Ответ 1
В Spark нет встроенного механизма, который поможет. Задача cron кажется разумной для вашего дела. Если вы постоянно добавляете зависимости к запланированному заданию, попробуйте Azkaban.
У меня есть работа Spark, которая читает исходную таблицу, выполняет ряд операций map/flatten/reduce, а затем сохраняет результаты в отдельной таблице, которую мы используем для отчетности. В настоящее время это задание выполняется вручную с помощью spark-submit
script. Я хочу запланировать его запуск каждую ночь, чтобы результаты были предварительно заполнены в начале дня. У меня:
spark-submit
script?Мы запускаем Spark в автономном режиме.
Любые предложения оценены!
В Spark нет встроенного механизма, который поможет. Задача cron кажется разумной для вашего дела. Если вы постоянно добавляете зависимости к запланированному заданию, попробуйте Azkaban.
Вы можете использовать вкладку cron, но на самом деле, когда вы начинаете создавать искровые задания, которые зависят от других искровых заданий, я бы рекомендовал пинбол для координации. https://github.com/pinterest/pinball
Чтобы получить простую работу crontab, я бы создал оболочку script, например
#!/bin/bash
cd /locm/spark_jobs
export SPARK_HOME=/usr/hdp/2.2.0.0-2041/spark
export HADOOP_CONF_DIR=/etc/hadoop/conf
export HADOOP_USER_NAME=hdfs
export HADOOP_GROUP=hdfs
#export SPARK_CLASSPATH=$SPARK_CLASSPATH:/locm/spark_jobs/configs/*
CLASS=$1
MASTER=$2
ARGS=$3
CLASS_ARGS=$4
echo "Running $CLASS With Master: $MASTER With Args: $ARGS And Class Args: $CLASS_ARGS"
$SPARK_HOME/bin/spark-submit --class $CLASS --master $MASTER --num-executors 4 --executor-cores 4 $ARGS spark-jobs-assembly*.jar $CLASS_ARGS >> /locm/spark_jobs/logs/$CLASS.log 2>&1
Затем создайте crontab
Crontab достаточно хорош, только если вы не заботитесь о высокой доступности, поскольку он будет работать на одной машине, которая может выйти из строя.
Тот факт, что вы запускаете автономный режим, указывает на то, что у вас нет настроек hadoop и mesos, у которых есть некоторые инструменты, чтобы сделать эту задачу более надежной.
Альтернативой crontab (хотя на данный момент он также испытывает проблемы с высокой степенью доступности) - воздушный поток airbnb. Он был построен для таких прецедентов точно (среди прочих) здесь: http://airflow.incubator.apache.org/scheduler.html.
Пользователи Mesos могут попробовать использовать хроны, которые являются заданием cron для кластеров: https://github.com/mesos/chronos.
Существует также oozie, который исходит из мира hadoop http://blog.cloudera.com/blog/2013/01/how-to-schedule-recurring-hadoop-jobs-with-apache-oozie/.
Если это критически важная задача, вы можете запрограммировать ее самостоятельно, если вы используете consul/zookeper или другие инструменты, которые обеспечивают выборы лидеров - просто ваши процессы запускаются на нескольких машинах, чтобы они соревновались на лидерстве и убеждались, что лидер подает работа на искру.
Вы можете использовать сервер искры, чтобы сделать подачу задания более элегантным: https://github.com/spark-jobserver/spark-jobserver
Самый стандартный планировщик, который поставляется со всеми дистрибутивами Apache Hadoop, - это Oozie.
https://oozie.apache.org/docs/4.2.0/DG_SparkActionExtension.html
В моем опыте изначально его немного сложно работать с XML, как только вы его повесили, он работает как шарм.
Вы можете использовать Rundeck для планирования заданий с достойными экранами пользовательского интерфейса для управления ошибками и уведомлениями о работе.
Вы можете использовать Oozie для составления расписаний ваших искровых заданий. Это часть самой экосистемы Hadoop.
Вы можете найти решение здесь https://www.quora.com/How-do-you-run-your-spark-job-periodically