Pyspark: контейнер вышел с ненулевым кодом выхода 143

Я видел различные темы по этой проблеме, но приведенные решения не работают в моем случае.

Среда с pyspark 2.1.0, Java 7 и имеет достаточно памяти и ядер.

Я запускаю задание spark-submit, которое работает с файлами Json, задание отлично работает с размером файла ‹ 200 МБ, но если его больше, оно завершается сбоем из-за Контейнер вышел с ненулевым кодом выхода 143 затем я проверил журналы пряжи и обнаружил ошибку java.lang.OutOfMemoryError: Запрошенный размер массива превышает лимит виртуальной машины

Поскольку файл json не имеет формата, который можно напрямую прочитать с помощью spark.read.json(), первым шагом в приложении является чтение json как текстового файла в rdd для применения карты и flatMap для скрытого в требуемый формат, затем используйте spark.read.json(rdd) для создания кадра данных для дальнейшей обработки, код ниже

def read_json(self, spark_session, filepath):
        raw_rdd = spark_session.sparkContext.textFile(filepath)
        raw_rdd_add_sep =  raw_rdd.map(lambda x:x.replace('}{','}}{{'))
        raw_rdd_split = raw_rdd_add_sep.flatMap(lambda x:x.split('}{'))
        required_df = spark_session.read.json(raw_rdd_split)
        return required_df

Я попытался увеличить накладные расходы памяти для исполнителя и драйвера, что не помогло, используя параметры spark.driver.memoryOverhead , spark.executor.memoryOverhead

Также я включил параметры Off-Heap spark.memory.offHeap.enabled и установил значение spark.memory.offHeap.size.

Я попытался установить параметр памяти JVM с помощью spark.driver.extraJavaOptions=-Xms10g.

Таким образом, приведенные выше параметры не работают в этом сценарии, некоторые файлы Json имеют размер почти 1 ГБ, и мы должны обрабатывать ~ 200 файлов в день.

Может ли кто-нибудь помочь решить эту проблему, пожалуйста?


person Mahesh    schedule 03.04.2020    source источник


Ответы (1)


  1. Что касается "Container exited with a non-zero exit code 143", то это, вероятно, из-за проблем с памятью.

  2. Вам нужно проверить в пользовательском интерфейсе Spark, вступают ли в силу установленные вами настройки.

  3. Кстати, пропорция для executor.memory:overhead.memory должна быть примерно 4:1

  4. Я не знаю, почему вы меняете настройку JVM напрямую spark.driver.extraJavaOptions=-Xms10g, я рекомендую использовать --driver-memory 10g вместо этого. например: spark-submit --driver-memory 10G (я помню, что driver-memory иногда работает только с spark-submit)

  5. с моей точки зрения, вам просто нужно обновить четыре аргумента, чтобы обеспечить ресурсы вашей машины:

spark.driver.memoryOverhead , 
spark.executor.memoryOverhead, 
spark.driver.memory , 
spark.executor.memory
person DennisLi    schedule 08.04.2020
comment
Привет, спасибо за комментарий. Я пытался управлять четырьмя параметрами конфигурации, указанными в вашем комментарии, с различными комбинациями, но это не работает. - person Mahesh; 08.04.2020
comment
Вы проверили интерфейс Spark на наличие памяти? и сколько искровых рабочих вы используете? вы можете обновить общее количество ядер и памяти кластера в своем вопросе. - person DennisLi; 08.04.2020