在日常集群的跑資料中,時常出現跑的過程之中出現各種情況,導致一些日期的資料沒有跑成功。
而每日跑的表也是非常的多,所以有時候一張一張的去看哪些表缺資料,也會將自己的頭腦弄暈。
所以想著,自己寫乙個指令碼,然後批量的檢測哪些資料目錄為空。
輸入乙個查詢的截止日期(例如: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 背景 集群部署的時候,需要一致的配置和環境設定.對於虛擬機器集群,可以借助映象拷貝,複製和還原集群機器.對與物理機集群而言,則不一樣,如果機器一多,多人去操作和配置,對於成熟精幹的團隊還好,對於不熟悉環境的小團隊,由於水平的參差不齊,往往會導致不一致的環境.因此無論如何,寫指令碼進行自動化的配置...