Pyspark - DataFrame persist () выдает ошибки java.lang.OutOfMemoryError: Превышен лимит накладных расходов GC - PullRequest
0 голосов
/ 14 февраля 2019

Сбой задания Pyspark, когда я пытаюсь сохранить DataFrame, созданный в таблице размером ~ 270 ГБ, с ошибкой

Исключение в потоке "yarn-scheduler-ask-am-thread-pool-9 "java.lang.OutOfMemoryError: Превышен предел накладных расходов GC

Эта проблема возникает, только когда я пытаюсь persist .Ниже приведены конфигурации, в которых я пытался поиграть с памятью исполнителя / исполнителя, случайными разделами, динамическим распределением исполнителей и уровнем постоянного хранения (DISK_ONLY, MEMORY_AND_DISK).Мое намерение состоит в том, чтобы разбить данные на ключ и сохранить их, поэтому последовательные соединения будут выполняться быстрее.Любое предложение окажет большую помощь.

Версия Spark: 1.6.1 (Распределение MapR) Размер данных: ~ 270 ГБ Конфигурация: spark.executor.instances - 300spark.executor.memory - 10 гspark.executor.cores - 3spark.driver.memory - 10 гspark.yarn.executor.memoryOverhead - 2048spark.io.compression.codec - lz4

Обычный запрос

query = "select * from tableA"
df = sqlctx.sql(query)
df.count()

Успешный запуск без сохранения () Successful run with no persist()

Повторное распределение и сохранение

Имея в виду случайный блок, выбрал 2001 как разделы, так что каждый раздел будет иметь около 128M данных.

test = df.repartition(2001, "key")
test.persist(StorageLevel.DISK_ONLY)
test.count()

Ошибка GC - при сохранении () GC Error - on Persist()

1 Ответ

0 голосов
/ 14 февраля 2019
  • Вы пытались увеличить максимальный размер файла spark.executor.memory?(если у вашего кластера достаточно памяти)

  • Вы пытались увеличить количество разделов для увеличения параллелизма?И, таким образом, уменьшить размер самих разделов.

Также проанализируйте статистику того, как часто происходит сборка мусора и количество времени, проведенного GC. Эта статья будет очень полезна для анализа и настройки работы GC.

...