shell动态循环监控HDFS路径下新分区是否生成的脚本

用户画像项目DataToES环节中,需要在kettle启动之前动态监控${sday}的90d数据是否已经生成,不用公司xcenter的方案如下:

每隔5min动态监控HDFS路径下${sday}新分区文件夹是否生成:

方案一:

${_HADOOP_BIN} fs -text /HDFS路径/${sday}/*00000*|head -10|wc -l

监控HDFS路径下文件,查看前10行,wc -l输出行数为10

如果${sday}路径没有生成,则会返回0

依据返回值是10还是0,以此判断${sday}路径是否已经生成。

方案二:若返回值为0代表目录存,若返回值为1代表目录不存在

${_HADOOP_BIN} fs -test -d /HDFS路径/${sday}
echo $?

hdfs的-test -d命令为判断是否为directory, return 0 if <path> is a directory

贴一个动态监控的脚本check_90d_data.sh如下,每隔5min监控一次,共监控6h:

#!/bin/bash

sday=$1
total_check_cnt=72
sleep_time=300s
export _HADOOP_BIN=/usr/lib/software/hadoop/bin/hadoop

let "sleep_time=${sleep_time} * ${total_check_cnt}"

echo "最多检查 ${total_check_cnt}次,共计${sleep_time} 秒"

check_cnt=1
while(( ${check_cnt} <= ${total_check_cnt} ))
do
        echo "进行第${check_cnt} 次检查"
        result=$(${_HADOOP_BIN} fs -text /HDFS路径/${sday}/*00000*|head -10|wc -l)

        if [[ "${result}" == "10" ]];then
                echo "90d数据的 ${sday} 分区数据已生成!!!"
                break
        else
                if [[ ${check_cnt} -lt ${total_check_cnt} ]] ;then
                        echo "90d数据 ${sday} 分区数据还未生成,等待5分钟后再次检查"
                        sleep ${sleep_time}
                        let "check_cnt++"
                else
                        echo "检查4小时后,90d数据 ${sday} 分区数据仍然未生成,Game Over!!!"
                        exit 1
                fi
        fi
done

然后写一个脚本check_90d_start.sh,调度上面的监控脚本就行,还可以把监控脚本的日志输出到指定log日志中

#!/bin/bash
bin=$(cd '/XXXXX/bin'; pwd)
cd ${bin}

sday=$1

./check_90d_data.sh ${sday} > /opt/log/wangxuan/smart/${sday}/check_90d_data_${sday}.log 2>&1
echo '${sday} 的90d数据入库成功!!!'

exit 0

这样,在kettle流程中,如果90d数据没有入库,就会每隔5min一直监控72次,直到90d数据入库成功,脚本执行完毕,进入下一步流程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值