Настройка производительности Apache Spark - PullRequest
0 голосов
/ 26 сентября 2019

У меня проблема с производительностью при загрузке файла размером 4 МБ в таблицу кустов с помощью логики Upsert (вставка и обновление записей).В рамках этой загрузки у нас есть два этапа -

Этап 1 - загрузка текстового файла размером 4 МБ в таблицу A

Этап 2 - загрузка таблицы B путем исключения source_code NOT IN ("ABC")из таблицы A, которая возвращает около 6 миллионов записей

val finalizedDf= sparkSession.sql(s"""select * from $tableA where $source_code not in ("ABC")""")


finalizedDf.write.format("parquet").mode("Overwrite").insertInto(tableB)

При вставке в таблицу B задание не выполняется из-за того, что лимит памяти превышает накладные расходы исполнителя.Также нагрузка длится более 5 часов.Пожалуйста, порекомендуйте советы поворота производительности для вышеуказанной ситуации:)

1 Ответ

0 голосов
/ 26 сентября 2019

При настройке производительности в spark необходимо учитывать несколько факторов.

  1. Что такое набор разделов в случайном порядке?По умолчанию установлено значение 200. Вам нужно изменить это значение на большее.spark.sql.shuffle.partitions=1000

  2. Ядра и память исполнителя.Глядя на описание, мне кажется, что памяти исполнителя меньше.Меньшее количество памяти будет приводить к тому, что GC часто замедляет выполнение искры.Попробуйте увеличить его.

  3. Вам не нужен overwrite при выполнении insertInto.

Используйте это вместо этого.finalizedDf.write.format("parquet") .insertInto(tableB)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...