我的传感器数据是在蜂巢表中捕获的,我希望以固定的时间间隔对这些数据运行。让我们说15分钟30分钟45分钟的工作。
我们正在使用cron调度程序以固定的时间间隔安排作业(不同的spark-submit)。这里的问题是由于纱线资源争用问题,作业运行缓慢,而cron一次又一次地不断触发相同的作业。
例如:由于某些群集资源问题导致30分钟的工作被触发并且延迟了,cron每30分钟就会触发另外30分钟的工作。
可能是解决这个问题的一种方法是使用quarz / oozie调度程序操作。
是否有任何编程方法可确保一个具有相同作业名称的作业完成,那么只有具有相同名称的下一个作业才会触发?
安排它们的最佳方法是什么?
答案 0 :(得分:1)
选项1:您可以使用Airflow作为调度程序,并在作业之间创建依赖关系。
选项2:Apache Spark job using CRONTAB in Unix- prevents duplicate job submissions
#!/bin/bash
LOCKFILE=/filelock.pid
SPARK_PROGRAM_CLASS=com.javachain.javachainfeed
#SPARK_PROGRAM_JAR=javachain_family-assembly-5.0.jar
#HIVE_TBALE=javachain_prd_tbls.Family_data
#FEEDNAME=""
#Process Locking
if [ -f ${LOCKFILE} ] ; then
PID=`cat ${LOCKFILE}`
ps -fp${PID} > /dev/null
STAT=$?
if [ "${STAT}" = "0" ]; then
echolog "Already running as pid ${PID}"
exit 0
fi
[ -z "$DEBUGME" ] || echolog "${LOCKFILE} exists but contains PID: ${PID} of a prior process"
else
[ -z "$DEBUGME" ] || echolog "${LOCKFILE} does not exist, will create one"
fi
echo $$ > ${LOCKFILE}
while read -r line
do
set -- $line
FEEDNAME=$1
spark-submit --master yarn-client --driver-memory 10G --executor-memory 8G --num-executors 30
--class $SPARK_PROGRAM_CLASS $SPARK_PROGRAM_JAR --hiveTable $HIVE_TBALE --className $FAMILY
done < "familynames.txt"
还
为了公平地执行集群中的火花作业,我将提供配置hadoop yarn fair(NOT FIFO)调度程序