Запись Spark в HDFS выполняется медленно - PullRequest
0 голосов
/ 28 мая 2020

У меня есть данные OR C на HDFS (без секций), ~ 8 миллиардов строк, размер 250 ГБ. Я читаю данные в DF, записываю DF без преобразований с помощью partitionBy ex: df.write.mode ("overwrite"). PartitionBy ("some_column"). Или c ("hdfs path")

Поскольку я следил за статусом задания в пользовательском интерфейсе искры - задание и этап завершаются за 20 минут. Но вкладка «SQL» в пользовательском интерфейсе Spark показывает 40 минут.

После запуска задания в режиме отладки и просмотра журнала искры я понял, что задачи, записывающие в «_ Contemporary», выполняются за 20 минут.

После этого слияние «_temporary» с фактическим путем вывода занимает 20 минут.

Итак, мой вопрос: выполняет ли процесс драйвера последовательное слияние данных из «_temporary» с путем вывода? Или это выполняется задачами исполнителя?

Могу ли я что-нибудь сделать, чтобы повысить производительность?

1 Ответ

1 голос
/ 28 мая 2020

Вы можете проверить опцию spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version в конфигурации вашего приложения. В версии 1 драйвер выполняет фиксацию temp. файлы последовательно, что, как известно, создает узкое место. Но откровенно говоря, люди обычно наблюдают эту проблему только на гораздо большем количестве файлов, чем в вашем случае. В зависимости от версии Spark вы можете установить для версии фиксации значение 2, подробности см. В SPARK-20107 .

Отдельно стоит отметить, что наличие 8 ядер на исполнителя не рекомендуется, так как это может привести к перегрузке дискового ввода-вывода, когда все 8 задач записывают вывод одновременно.

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