通过shell脚本来rerun一个oozie调度失败的job,从而可以跳过执行失败的节点

标题很长:通过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=false
fi

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值