zoukankan      html  css  js  c++  java
  • 通过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

  • 相关阅读:
    基本运算符
    格式化输出
    Python与用户的交互
    数据类型
    变量
    正则表达式
    vuex方法
    vue的webpack打包步骤
    浮动问题
    媒体查询技术
  • 原文地址:https://www.cnblogs.com/30go/p/9244142.html
Copyright © 2011-2022 走看看