2016-12-29 1 views
7

Я начал работу по искрообразованию в режиме кладки пряжи через spark-submit. Чтобы указать частичный сбой и т. Д., Я хочу передать код выхода из драйвера в сценарий, вызывающий spark-submit.передать пользовательский код выхода из режима пряжи-кластерного режима в CLI

Я пробовал оба, System.exit и выбрасывал SparkUserAppException в драйвере, но в обоих случаях CLI получил только 1, а не тот, который прошел с кодом выхода.

Я думаю, что невозможно передать пользовательский код выхода, так как любой код выхода, переданный драйвером, будет преобразован в состояние пряжи, а пряжа преобразует любой неудачный exitCode в 1 или не удался.

+0

Не могли бы вы рассказать мне, что вы использовали для отправки задания? – code

+0

$ SPARK_HOME/bin/spark-submit --verbose .... --master yarn --deploy-mode cluster .... <другие параметры>. Я использую spark-2.0.0 с hadoop 2.3. Любой конкретный вариант, который вы ищете? –

+0

Я думаю, что -deploy-mode клиент поможет вам. Или, по крайней мере, с помощью какого-то взлома, вы сможете достичь того, что вам нужно. – code

ответ

1

Глядя на свече кода, я могу сделать такой вывод:

Это возможно в режиме client. Посмотрите на runMain() метод SparkSubmit класса

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

Там альтернативное решение, которое может/не может быть подходящим для случая использования:

хост по REST API с конечной точкой, чтобы получить обновление статуса из вашего кода драйвера. В случае каких-либо исключений, пусть ваш код драйвера использует эту конечную точку для обновления статуса.

+0

spark-submit будет возвращать код выхода пряжи в cli. Поэтому нам нужен способ, чтобы драйвер позволял cli знать exitCode. Есть несколько уродливых способов сделать это. : P –

+0

Да, есть. Могу ли я узнать, почему вы не можете использовать режим клиента? – code

+0

Режим кластера рекомендуется для использования в производстве. На узлах с неравномерной конфигурацией режим кластера IMHO заботится о том, чтобы драйвер запускался на узле с требуемой ОЗУ, CPU. –

1

Вы можете сохранить код выхода в выходном файле (на HDFS или локальном FS) и заставить скрипт ждать появления, чтения и продолжения этого файла. Это определенно не изящный способ, но это может помочь вам продолжить. При сохранении файла обратите внимание на разрешения для этого местоположения. У вашего искрового процесса должен быть доступ к RW.

+0

Да, это уродливый способ, который я сказал в другом комментарии. –

Смежные вопросы