Шаг Spark в AWS EMR завершается с ошибкой exitCode 13

Я немного экспериментирую с EMR. Я пытаюсь запустить очень простую искровую программу.

from pyspark.sql.types import IntegerType
mylist = [1, 2, 3, 4]
df = spark.createDataFrame(mylist, IntegerType()).show()
df.write.parquet('/path/to/save', mode='overwrite')

Я запускаю приложение, добавляя шаг в AWS EMR web-console. Я выбираю приложение из s3, выбираю deploy mode cluster и оставляю остальные пустыми.

Приложение даже не запускается, вероятно, потому что я получаю следующий код ошибки: Application application_1564485869414_0002 failed 2 times due to AM Container for appattempt_1564485869414_0002_000002 exited with exitCode: 13

что я здесь делаю не так?


person Thagor    schedule 30.07.2019    source источник
comment
Вы можете просмотреть подробный журнал в разделе шага веб-консоли. Я предполагаю, что ваш df не должен содержать .show(), который является действием, и результатом не будет фрейм данных.   -  person Lamanus    schedule 30.07.2019
comment
спасибо, я тоже заметил ошибку и удалил. Это была ошибка быстрого копирования и прошлой ошибки :D. Но, к сожалению, это не решает мою проблему.   -  person Thagor    schedule 31.07.2019
comment
Вы установили мастер как пряжу? spark-submit --master yarn --deploy cluster --class main something.jar вот так.   -  person Lamanus    schedule 31.07.2019
comment
Я просто использую значение по умолчанию, когда отправляю задание через веб-интерфейс EMR. Я попробую это.   -  person Thagor    schedule 31.07.2019
comment
Как вы это сделали? Из консоли? затем добавьте эти параметры в качестве аргументов.   -  person Lamanus    schedule 31.07.2019
comment
Нет, из веб-консоли я также передал туда --master yarn, но он не работал. Я написал здесь еще один более развернутый вопрос: stackoverflow.com/questions/57289032/   -  person Thagor    schedule 31.07.2019


Ответы (1)


Ваша переменная spark не определена в коде, который вы пробовали. Это может быть причиной проблемы, поскольку вы не передаете контекст искры в приложение.

Попробуйте добавить:

from pyspark.sql import SparkSession
spark = SparkSession\
        .builder\
        .getOrCreate()

Перед использованием spark.createDataFrame(...)

person FransDel    schedule 30.07.2019
comment
нет, тогда код просто сломается. Я могу запустить консоль pyspark на мастере и просто использовать spark. Amazon AWS передает переменную spark - person Thagor; 30.07.2019
comment
Когда вы открываете консоль pyspark в кластере EMR, контекст искры уже установлен, это верно. Это не тот случай, когда вы пропускаете шаг. - person FransDel; 30.07.2019
comment
Есть ли узлы задач в вашем кластере EMR? Если нет, это может быть вашей проблемой - person FransDel; 31.07.2019
comment
На данный момент я использую 1 главный и 1 основной узел. Но, насколько я понял, узлы задач все равно необязательны. Когда я запускаю консоль pyspark или открываю Livy notebook, они получают назначенного работника, но не когда я использую опцию spark-submit - person Thagor; 31.07.2019
comment
Да, извините, мой плохой не видел, что основные узлы также работали как узлы-исполнители Spark. Могу ли я увидеть логи, которые вы получаете при выполнении своей задачи. - person FransDel; 31.07.2019
comment
Попробуйте так: spark-submit --deploy-mode client --py-files s3://mybucket/EMR_test.py - person FransDel; 31.07.2019
comment
Это не работает, это не работает с Error: Missing application resource. - person Thagor; 01.08.2019
comment
Я решил проблему здесь: stackoverflow.com/questions/57289032/ - person Thagor; 01.08.2019