我有一个Spark作业,它读取源表,执行一些map / flatten / reduce操作,然后将结果存储到我们用于报告的单独表中。目前,此作业是使用spark-submit
脚本手动运行的。我想安排它每晚运行,以便在一天开始时预先填充结果。我:
我们在独立模式下运行Spark。
任何建议都赞赏!
答案 0 :(得分:12)
你可以使用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
然后按
创建一个crontab答案 1 :(得分:7)
Spark中没有内置机制可以提供帮助。一个cron工作对你的案子来说似乎是合理的。如果您发现自己不断向计划作业添加依赖项,请尝试Azkaban。
答案 2 :(得分:4)
Crontab只有在不关心高可用性的情况下才够好,因为它可以在一台可能出现故障的计算机上运行。
您以独立模式运行这一事实表明您没有安装hadoop和mesos,它们有一些工具可以使此任务更可靠。
crontab的另一种选择(尽管它目前也存在高可用性问题)是airbnb的气流。它是为这些用例准确构建的(除其他外)请参见此处: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/。
如果这是关键任务,如果您使用consul / zookeper或其他提供领导者选举的工具,您甚至可以自己编程 - 只需让您的流程在多台机器上运行,让他们在领导力上竞争并确保领导者提交工作到了火花。
您可以使用spark job服务器使作业提交更加优雅:https://github.com/spark-jobserver/spark-jobserver
答案 3 :(得分:3)
Apache Hadoop的所有发行版附带的最标准的调度程序是Oozie。
https://oozie.apache.org/docs/4.2.0/DG_SparkActionExtension.html
根据我的经验,一旦掌握了XML,就很难使用XML,它就像一个魅力。
答案 4 :(得分:1)
您可以使用Rundeck来安排具有良好UI屏幕的作业,以管理作业失败和通知。
答案 5 :(得分:0)
推荐的计划程序: