Подтвердить что ты не робот

Запуск запланированной работы Spark

У меня есть работа Spark, которая читает исходную таблицу, выполняет ряд операций map/flatten/reduce, а затем сохраняет результаты в отдельной таблице, которую мы используем для отчетности. В настоящее время это задание выполняется вручную с помощью spark-submit script. Я хочу запланировать его запуск каждую ночь, чтобы результаты были предварительно заполнены в начале дня. У меня:

  • Настройте задание cron, чтобы вызвать spark-submit script?
  • Добавить планирование в мой класс работы, чтобы он был отправлен один раз, но выполняет действия каждую ночь?
  • Есть ли встроенный механизм в Spark или отдельный script, который поможет мне сделать это?

Мы запускаем Spark в автономном режиме.

Любые предложения оценены!

4b9b3361

Ответ 1

В Spark нет встроенного механизма, который поможет. Задача cron кажется разумной для вашего дела. Если вы постоянно добавляете зависимости к запланированному заданию, попробуйте Azkaban.

Ответ 2

Вы можете использовать вкладку 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 -e
  • Вставить 30 1 * * */PATH/TO/ SCRIPT.sh $CLASS "нить-клиент"

Ответ 3

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

Ответ 4

Самый стандартный планировщик, который поставляется со всеми дистрибутивами Apache Hadoop, - это Oozie.

https://oozie.apache.org/docs/4.2.0/DG_SparkActionExtension.html

В моем опыте изначально его немного сложно работать с XML, как только вы его повесили, он работает как шарм.

Ответ 5

Вы можете использовать Rundeck для планирования заданий с достойными экранами пользовательского интерфейса для управления ошибками и уведомлениями о работе.

Ответ 6

Вы можете использовать Oozie для составления расписаний ваших искровых заданий. Это часть самой экосистемы Hadoop.