Сбой задания 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()
Успешный запуск без сохранения ()
Повторное распределение и сохранение
Имея в виду случайный блок, выбрал 2001 как разделы, так что каждый раздел будет иметь около 128M данных.
test = df.repartition(2001, "key")
test.persist(StorageLevel.DISK_ONLY)
test.count()
Ошибка GC - при сохранении ()