Как переместить большой стол из PSQL в паркет на gcloud через Apache Spark? - PullRequest
0 голосов
/ 11 января 2019

У меня большой стол (около 300 ГБ) и баран около (50 ГБ) и 8 процессоров.
Я хочу переместить свою таблицу psql в облачное хранилище Google, используя соединение spark и jdbc. очень похоже на: Как преобразовать таблицу SQL объемом 500 ГБ в Apache Parquet? .

Я знаю, что мои соединения работают, потому что я смог переместить небольшой стол. Но с большой таблицей у меня возникают проблемы с памятью. Как я могу оптимизировать это?

import pyspark
from pyspark.sql import SQLContext
from pyspark import SparkContext
from pyspark.sql import DataFrameReader

conf = pyspark.SparkConf().setAll([("spark.driver.extraClassPath", "/usr/local/bin/postgresql-42.2.5.jar:/usr/local/jar/gcs-connector-hadoop2-latest.jar")
                                   ,("spark.executor.instances", "8")
                                   ,("spark.executor.cores", "4")
                                   ,("spark.executor.memory", "1g")
                                  ,("spark.driver.memory", "6g")
                                  ,("spark.memory.offHeap.enabled","true")
                                   ,("spark.memory.offHeap.size","40g")])

sc = pyspark.SparkContext(conf=conf)
sc.getConf().getAll()

sc._jsc.hadoopConfiguration().set("google.cloud.auth.service.account.json.keyfile","/home/user/analytics/gcloud_key_name.json")
sqlContext = SQLContext(sc)

url = 'postgresql://address:port/db_name'
properties = {
              'user': 'user', 
              'password': 'password'}
df_users = sqlContext.read.jdbc(
    url='jdbc:%s' % url, table='users', properties=properties
)

gcloud_path= "gs://BUCKET/users"
df_users.write.mode('overwrite').parquet(gcloud_path)

Бонусный вопрос: могу ли я сделать раздел сейчас, или сначала я должен сохранить его как паркет, затем прочитать его и перераспределить его?

Бонусный вопрос2: Если ответ на бонусный вопрос 1 - да, могу ли я отсортировать его сейчас, или сначала я должен сохранить его как паркет, а затем прочитать и перераспределить его?

...