通过shell批量检测集群跑数据是否异常脚本

本文介绍了一种通过Shell脚本批量检测HDFS上集群数据是否异常的方法,主要关注路径是否存在。脚本从指定日期的月初开始遍历,输出缺少数据的日期及表路径。同时指出了脚本的不足,如无法检测数据大小为0的情况,并分享了后续的改进措施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前情提要

在日常集群的跑数据中,时常出现跑的过程之中出现各种情况,导致一些日期的数据没有跑成功。
而每日跑的表也是非常的多,所以有时候一张一张的去看哪些表缺数据,也会将自己的头脑弄晕。
所以想着,自己写一个脚本,然后批量的检测哪些数据目录为空。

脚本功能说明

输入一个查询的截止日期(例如:20161115),从截止日期当月1号(例子:20161101)开始遍历各表路径,如果路径不存在,就表示当日缺少数据。

输出缺少日期的表的路径,以及缺数据的日期。

需要的信息

整个集群跑出来的数据保存在HDFS上面,所以我们看数据是否跑空或则有错误的时候,就使用hadoop shell的方式去查看该当日路径(每日任务都是分区表,以日期分区)是否存在。

hadoop fs -du TABLE_LOCATION/$RECEIVE_DAY

所以我们需要知道的关键信息就是表的路径

使用:

hadoop fs -test -e TABLE_LOCATION/$RECEIVE_DAY

可以查看该目录是否存在,如果存在会return 0

返回的数值,我们使用linux的$?来读取,结合if判断来确定文件路径是否存在。

$?

脚本部分

#!/bin/bash
#PROGRAM:
#   检查日汇总表格,当月1日至截至日期跑数据情况
#HISTROY:
#   20161115  L.Z created

#####
#**设置好各表的路径
#####

#DIR(0)=table1
loc_table1=table1_location
#DIR(1)=table2
loc_table2=table2_location
#DIR(2)=table3
loc_table3=table3_location
#DIR(3)=table4
loc_table4=table4_location

#DIR(4)=table5
loc_table5=table5_location
#DIR(5)=table6
loc_table6=table6_location
#DIR(6)=table7
loc_table7=table7_location
#DIR(7)=table8
loc_table8=table8_location


#使用数组装整个目录列表
DIR=(${loc_table1} ${loc_table2} ${loc_table3} ${loc_table4} ${loc_table5} ${loc_table6} ${loc_table7} ${loc_table8})
DIR_LEN=${#DIR[*]}

#######
#**获取查询时间
#######
read -p "输入本月查询数据的截至日期:" end_day

start_day=${end_day:0:6}01

echo -e "将从${start_day}日数据开始检查"


######
#**检查是否存在
######

#清空上次保存的数据
true>checkindata.txt    

#使用循环依次读取表的路径,再循环检测该日期下的目录是否存在
for((i=0;${i}<${DIR_LEN};i++))
do 
        dir_path=${DIR[i]}
        echo -e "检测路径:${DIR[i]}"
        echo -e "检测路径:${DIR[i]}\
        ">>checkindata.txt
        for ((data_day=${start_day};$data_day<=$end_day;data_day=$data_day+1))
        do
            hadoop fs -test -e "${DIR[i]}/$data_day/"
            if [ $? -eq 0 ];
                then 
                    echo -e "$data_day日数据存在"
            else
                echo -e "$data_day日数据不存在"
                echo -e "$data_day" >>checkindata.txt
            fi
        done;
done;

输出结果:

/table1_location
20161113
/table2_location
20161105
20161113
/table3_location
20161105
20161113
/table4_location
20161105
20161113
/table5_location
/table6_location
/table7_location
/table8_location

不足

  1. 不能检测到数据路径存在,大小却为0的情况

此脚本只能检测到表的路径是否存在,对于表的路径存在,但是数据大小却为0的情况。这种情况也是需要补数据的。这个时候可以使用需要使用:

hadoop fs -test -z  LOCATION/$RECEIVE_DAY

替换掉脚本中的

hadoop fs -test -e LOCATION/$RECEIVE_DAY

来实现。

  1. 不能检测数据是否出错。

虽然大数据的特性之一是容错性高,但是会发生当日整天数据虽然都跑好了,但是却大批量跑错地情况。所以日常人工定期的检查数据是否跑错也是非常重要的。

20161121更新:

hadoop fs -test -z 是测试文件的大小是否为0bytes,不是文件路径~
so 这个方法行不通

20161208更新:

后来为了检测文件路径是否是0的情况,我使用grep然后再cut来获取文件目录的大小。就解决了不能测试路径大小是否为0这种情况了。

test_num=`hadoop fs -du "${DIR[i]}/"|grep "$data_day" |cut -d " " -f1`
                                        echo $test_num
                                        if [ "$test_num" == '0' ];
                                                then
                                                        echo -e "$data_day日数据为空"
                                                        echo -e "$data_day为空" >>checkindata_e0.txt
                                        fi

### 解决方案 为了确保MathType公式编号最后一行对齐,在Word中的操作可以遵循特定的格式调整方式。当遇到公式编号对齐的情况时,可以通过以下几种方法来解决问题。 #### 方法一:自定义样式并应用 创建一个新的段落样式专门用于公式及其编号。通过这种方式能够更好地控制公式的显示效果以及编号的位置[^3]。 ```plaintext 1. 打开“设计”选项卡下的“样式”,点击右侧的小箭头进入更多样式界面; 2. 选择“创建新样式”,命名为`FormulaWithNumber`; 3. 设置此样式的对齐方式为居中,并指定后续段落样式为正文或其它适当样式; 4. 对于编号部分,则单独作为一个右对齐的段落处理。 ``` #### 方法二:使用制表位精确调整 利用制表符功能可以让公式编号在同一行内完美对齐。这种方法适用于希望保持原有布局的同时微调位置的情形[^4]。 ```plaintext 1. 将光标放置到要插入公式的地方; 2. 插入公式后按Tab键移动到期望的编号位置; 3. 调整水平标尺上的制表位至页面边缘附近,使得编号能贴紧右边框; 4. 输入公式编号(可采用手动输入或是域代码形式)。 ``` #### 方法三:借助表格结构辅助定位 如果上述两种办法仍无法满足需求,考虑构建一个简单的单行双列表格作为载体。这样做的好处是可以更灵活地管理各元素之间的相对关系,同时也便于日后维护修改[^1]。 ```plaintext | 公式 | 编号 | | :---: | ---:| | E=mc² | (1) | 注意这里边框线应设为无颜色以隐藏起来不影响视觉呈现。 ``` 以上三种策略可以根据实际应用场景和个人偏好选用最合适的那一种来进行尝试。通常情况下,合理组合这些技巧往往能达到令人满意的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值