标题很长:通过shell脚本来rerun一个oozie调度失败的job,从而可以跳过执行失败的节点
不过目前从oozie调度测试的例子来看,oozie本身的retry好像并没有参数可以控制跳过失败的节点。必须手工重新rerun的时候指定 -D oozie.wf.rerun.failnodes=false
参数。
这个问题发生的原因是不同的节点安装的软件包有些差异导致一些jar包冲突,这样就使得该job在某些节点执行成功,某些节点执行失败。
这样我就写了一段shell脚本,来从oozie的jog表里面抓取失败的某个任务,然后去执行oozie rerun的命令,然后在crontab中每天定时调度这个脚本3次。
shell脚本如下:
#!/bin/sh# mysql连接hostname="localhost"port="3306"username="oozie"password="oozie"dbname="oozie"# job的名称appname="coord_xxxx_job"#当前时间nowtime=`date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"`# sql 查询语句select_sql=" select concat(a.job_id,',',a.action_number) from COORD_JOBS j,COORD_ACTIONS a where j.id = a.job_id and j.app_name = '${appname}' and j.status = 'running' and to_days(a.created_time) = TO_DAYS(now()) and a.status != 'SUCCEEDED';"# 连接mysql查询result=(`mysql -h${ hostname} -P${port} -u${username} -p${password} ${dbname} -N -e "${select_sql}"`)echo ${result}# 如果查询结果不为空,则执行oozie的rerun脚本,并跳过失败的节点执行if [ -n "${result}" ] ;then #echo ${result} IFS=',' arr=(${result}) echo ${nowtime} ${appname} ${arr[0]} ${arr[1]} >> job_rerun.log oozie job -rerun ${arr[0]} -refresh -action ${arr[1]} -D oozie.wf.rerun.failnodes=falsefi