通過shell批量檢測集群跑資料是否異常指令碼

2021-07-24 16:09:59 字數 3242 閱讀 5904

在日常集群的跑資料中,時常出現跑的過程之中出現各種情況,導致一些日期的資料沒有跑成功。

而每日跑的表也是非常的多,所以有時候一張一張的去看哪些表缺資料,也會將自己的頭腦弄暈。

所以想著,自己寫乙個指令碼,然後批量的檢測哪些資料目錄為空。

輸入乙個查詢的截止日期(例如: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=($$$

$$$$

$)dir_len=$

#######

#**獲取查詢時間

#######

read -p "輸入本月查詢資料的截至日期:" end_day

start_day=$

01echo

-e"將從$日資料開始檢查"

######

#**檢查是否存在

######

#清空上次儲存的資料

true>checkindata.txt

#使用迴圈依次讀取表的路徑,再迴圈檢測該日期下的目錄是否存在

for((i=0;$

<$;i++))

do dir_path=$

echo

-e"檢測路徑:$"

echo

-e"檢測路徑:$\

">>checkindata.txt

for ((data_day=$;$data_day

<=$end_day;data_day=$data_day+1))

dohadoop fs -test -e

"$/$data_day/"

if [ $? -eq

0 ];

then

echo

-e"$data_day日資料存在"

else

echo

-e"$data_day日資料不存在"

echo

-e"$data_day" >>checkindata.txt

fidone;

done;

/table1_location

20161113

/table2_location

20161105

20161113

/table3_location

20161105

20161113

/table4_location

20161105

20161113

/table5_location

/table6_location

/table7_location

/table8_location

不能檢測到資料路徑存在,大小卻為0的情況

此指令碼只能檢測到表的路徑是否存在,對於表的路徑存在,但是資料大小卻為0的情況。這種情況也是需要補資料的。這個時候可以使用需要使用:

hadoop fs -test

-z location/

$receive_day

替換掉指令碼中的

hadoop fs -test

-e location/

$receive_day

來實現。

不能檢測資料是否出錯。

雖然大資料的特性之一是容錯性高,但是會發生當日整天資料雖然都跑好了,但是卻大批量跑錯地情況。所以日常人工定期的檢查資料是否跑錯也是非常重要的。

hadoop fs -test -z 是測試檔案的大小是否為0bytes,不是檔案路徑~

so 這個方法行不通

後來為了檢測檔案路徑是否是0的情況,我使用grep然後再cut來獲取檔案目錄的大小。就解決了不能測試路徑大小是否為0這種情況了。

test_num=`hadoop fs -du "$/"|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

shell通過ssh批量修改centos密碼

環境 centos7 1 準備ip位址文字 root 186 cat ip 100.98.100.186 100.98.100.1882 編寫批量修改密碼指令碼 root 186 more change passwd.sh bin bash source etc profile 人機互動是否執行批量...

1 大資料跑數shell學習

bin sh echo 清空同名檔案 rm rf bdp venv.zip echo 獲取環境 指令碼 資料等檔案 hdfs dfs get user 0 upload env.zip hdfs dfs get user 0 upload a.csv hdfs dfs get user 0 uplo...

shell 指令碼實 集群環境配置檢測

1 背景 集群部署的時候,需要一致的配置和環境設定.對於虛擬機器集群,可以借助映象拷貝,複製和還原集群機器.對與物理機集群而言,則不一樣,如果機器一多,多人去操作和配置,對於成熟精幹的團隊還好,對於不熟悉環境的小團隊,由於水平的參差不齊,往往會導致不一致的環境.因此無論如何,寫指令碼進行自動化的配置...