Как обрабатывается искровая задача с экстремально длинной линией? - PullRequest
0 голосов
/ 28 октября 2019

Я использовал pyspark для обработки нескольких файлов журнала, в которых запись разбита на многострочный формат, поэтому я выбрал wholeTextFiles, чтобы прочитать данные, а затем отфильтровать то, что я хочу. Размер каждого файла ~ 800M, и в общей сложности 4096 файлов. Тем не менее, искро задание зависло после обработки некоторых задач, вот моя конфигурация и код:

конфигурация:

- num-executors 100 --executor-cores 1 --executor-memory 30G

код ядра:

file_rdd= sc.wholeTextFiles(inputDir, 2500)
print file_rdd.getNumPartitions()
out_rdd = file_rdd.flatMap(parseFileContent)\
                  .repartition(1000)\
                  .saveAsTextFile(title_outputDir)

После 300+ заданий произошел сбой; запущенный журнал показал следующее:

crash log Iтакже получите визуализацию DAG здесь:

job dag visualization

похоже, что операция перераспределения вызывает сбой, и этап 1 никогда не запускается. Кстати, вот больше информации о задачах, выполняемых, если это помогает:

tasks running and failure status 1

tasks running and failure status 2

tasks error log

Я нахожу некоторые связанные вопросы, поэтому здесь , здесь и здесь , но они только объясняютвысокоуровневое потребление памяти, а не то, как выполняются задачи (относительно каждой строки в файле) и сколько памяти требуется для каждой строки (когда она обрабатывается и после нее обрабатывается). Надеюсь, что кто-то может помочь мне в этом сложном понятии, и любые предложения будут полезны для обработки файла многострочного формата в pyspark (не Scala, я знаю, что Scala может использовать DataFrame для решения этой проблемы, но я не знаком со Scala)Спасибо всем!

...