DataX 刷历史任务脚本 (串行/并行)

刷历史的脚本,下面的脚本是按照顺序刷历史使用,一天跑完才能跑下一天,存在依赖

(注意:dataX跑数的环境:如果是生产:路径为/opt/datax/bin/datax.py  如果是预发布环境,路径为/opt/software/datax/bin/datax.py)

#/bin/bash
 
# 安全验证
 
 # 往历史数据的分区加载数据
    startDate=$1 # 输入格式如:2019-01-01
    endDate=$2 # 输入格式如:2020-01-01
 
     echo "------------------ $1 ----------------- "
     echo "------------------ $2 ----------------- "
 
    # 获取两个日期区间的所有日期
    startSec=`date -d "$startDate" "+%s"`
    endSec=`date -d "$endDate" "+%s"`
    for((i=$startSec;i<=$endSec;i+=86400));do
        yesterday=`date -d "@$i" "+%Y-%m-%d"`
        echo "------------------ ${yesterday} ----------------- "
 
        python /opt/software/datax/bin/datax.py /opt/export/server/db_name/table_name.json -p "-Ddt=${yesterday}"
 
    done

并行跑,可以设置并行度,如果并行度设置为6,那么一次起6个任务,6个任务执行完,才会继续启动6个,任务之间不存在依赖

(注意:dataX跑数的环境:如果是生产:路径为/opt/datax/bin/datax.py  如果是预发布环境,路径为/opt/software/datax/bin/datax.py),假设该脚本名为test.sh,则使用方式为sh test.sh json配置文件绝对路径(不含.json) 起始日期 结束日期,如果需要设置并行度,可以将其作为一个传参来使用

#/bin/bash
 
 # 安全验证
 
 # 往历史数据的分区加载数据
    startDate=$2 # 输入格式如:2019-01-01
    endDate=$3 # 输入格式如:2020-01-01
 
     echo "------------------ json_name=$1  startDate=$2  endDate=$3----------------- "
     echo "------------------  ----------------- "
     echo "------------------  ----------------- "
##每批15天
parall_num=6 #设置并行度
max_times=3  #尝试多少次读取日志判断是否做完
dataX_script=/opt/software/datax/bin/datax.py   #dataX脚本的绝对路径 左边是预发布的DataX执行路径 右边是 生产DataX执行路径 /opt/datax/bin/datax.py  #dataX脚本的绝对路径
json_name=${1} #传入json配置文件的绝对路径
json_file=${1}.json
log_dir=${json_name}_log
  
  
mkdir ${log_dir}
    startSec=`date -d "$startDate" "+%s"`
    endSec=`date -d "$endDate" "+%s"`
    index=0
for((i=$startSec;i<=$endSec;i+=86400));do
    yesterday=`date -d "@$i" "+%Y-%m-%d"`
    yes_format=`date -d ${yesterday} +%Y%m%d`
   echo "${yes_format}"
 echo "nohup python dataX_script $json_file  -p "-Ddt=${yesterday}" > ${log_dir}/${yesterday}.log &"
 nohup python ${dataX_script} $json_file  -p "-Ddt=${yesterday} -Ddt_format=${yes_format}"  > ${log_dir}/${yesterday}.log &   #左边-D表示传入的参数=值,如果有多个变量用空格隔开即可
  
     index=`expr $index + 1`
   if [ $index -eq $parall_num ]
    then
   echo "判断是否做完  index=${index}"
## 判断是否做完 
      times=0
      old_lines=0
      while [ 1 -eq 1 ]
      do
        echo "判断是否做完 while times=${times}"
         now_lines=`cat ${log_dir}/*.log|wc -l `
     echo "daociyiyou- ${now_lines}-----------------" 
         if [ $now_lines -eq $old_lines ]
         then
                 times=`expr $times + 1`
                 if [ $times -eq ${max_times} ]
                 then
                  break
                 fi
         fi
         old_lines=${now_lines}
         sleep 5
      done
      index=0
  fi
 
done
  • 版权声明: 凡本站作品,未经本人授权不得转载、摘编或利用其它方式使用上述作品。已经受本人授权使用作品的,应在授权范围内使用,并注明出处。违反上述声明者,本人将追究其相关法律责任。

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2021-2022 Kaneki Ken
  • Visitors: | Views:

^_^ 感谢您的肯定和支持 ^_^

支付宝
微信