Запуск заданий Spark в кластере YARN с дополнительными файлами
Я пишу простое приложение spark, которое использует некоторый входной RDD, отправляет его во внешний скрипт через канал и записывает вывод этого скрипта в файл. Код драйвера выглядит так:
val input = args(0)
val scriptPath = args(1)
val output = args(2)
val sc = getSparkContext
if (args.length == 4) {
//Here I pass an additional argument which contains an absolute path to a script on my local machine, only for local testing
sc.addFile(args(3))
}
sc.textFile(input).pipe(Seq("python2", SparkFiles.get(scriptPath))).saveAsTextFile(output)
когда я запускаю его на своей локальной машине, он работает нормально. Но когда я отправляю его в кластер пряжи через
spark-submit --master yarn --deploy-mode cluster --files /absolute/path/to/local/test.py --class somepackage.PythonLauncher path/to/driver.jar path/to/input/part-* test.py path/to/output`
завершается с исключением.
Lost task 1.0 in stage 0.0 (TID 1, rwds2.1dmp.ru): java.lang.Exception: Subprocess exited with status 2
Я пробовал различные варианты команды трубы. Например, .pipe("cat")
работает нормально, и ведет себя как ожидаемо, но .pipe(Seq("cat", scriptPath))
также не удается с кодом ошибки 1, поэтому кажется, что spark не может выяснить путь к скрипту на узле кластера.
какие предложения?
2 ответов
Я сам не использую python, но я нахожу некоторые подсказки, которые могут быть полезны для вас (в исходном коде Spark-1.3
SparkSubmitArguments)
--py-files PY_FILES
, -разделенный запятыми список .промелькнуть. ,яйцо, или .py-файлы для размещения на PYTHONPATH для приложений Python.--files FILES
, список файлов, разделенных запятыми, которые будут помещены в рабочий каталог каждого исполнитель.--archives ARCHIVES
, разделенный запятыми список архивов для извлечения в рабочий каталог каждого исполнителя.
а также, ваши аргументы в spark-submit
должны следовать этому стилю:
Usage: spark-submit [options] <app jar | python file> [app arguments]
вы можете попробовать и использовать local://
и $SPARK_YARN_STAGING_DIR
env var.
например, должно работать следующее:
spark-submit \
--master yarn \
--deploy-mode cluster \
--files /absolute/path/to/local/test.py \
--class somepackage.PythonLauncher \
local://$SPARK_YARN_STAGING_DIR/test.py