运行预定的Spark作业

Mat*_*att 29 apache-spark

我有一个Spark作业,它读取源表,执行一些map/flatten/reduce操作,然后将结果存储到我们用于报告的单独表中.目前,此作业是使用spark-submit脚本手动运行的.我想安排它每晚运行,以便在一天开始时预先填充结果.我是:

  1. 设置一个cron作业来调用spark-submit脚本?
  2. 将计划添加到我的工作类中,以便它提交一次但每晚都执行操作?
  3. Spark中是否有内置机制或单独的脚本可以帮助我做到这一点?

我们在独立模式下运行Spark.

任何建议赞赏!

ben*_*man 13

您可以使用cron选项卡,但实际上当您开始依赖其他火花工作的火花工作时,我会建议弹球用于协调.https://github.com/pinterest/pinball

为了获得一个简单的crontab工作,我将创建包装脚本,如

#!/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
Run Code Online (Sandbox Code Playgroud)

然后创建一个crontab

  1. crontab -e
  2. 插入30 1***/PATH/TO/SCRIPT.sh $ CLASS"yarn-client"


Sha*_*ood 8

Spark中没有内置机制可以提供帮助.一个cron工作对你的案子来说似乎是合理的.如果您发现自己不断向计划作业添加依赖项,请尝试Azkaban.


Ofe*_*saf 5

仅当您不关心高可用性时,Crontab才足够好,因为Crontab可以在可能发生故障的单台计算机上运行。

您以独立模式运行的事实表明您没有安装hadoop和mesos,它们具有一些使此任务更可靠的工具。

Airbnb的气流是crontab的替代产品(尽管目前也遭受高可用性问题的困扰)。正是针对此类用例(尤其是其中的一种)构建的,请参见此处:http : //airflow.incubator.apache.org/scheduler.html

Mesos用户可以尝试使用chronos,这是集群的一项cron任务:https : //github.com/mesos/chronos

还有来自Hadoop世界的oozie http://blog.cloudera.com/blog/2013/01/how-to-schedule-recurring-hadoop-jobs-with-apache-oozie/

如果这是一项关键任务,那么如果您使用领事/ zookeper或其他提供领导者选举的工具,您甚至可以自己进行编程-只是让您的流程在多台计算机上运行,​​让他们在领导者上竞争并确保领导者将工作提交给火花。

您可以使用spark作业服务器使作业提交更加优雅:https : //github.com/spark-jobserver/spark-jobserver