異常斷電導致HDFS文件塊丟失,影響HBASE數據的問題處理

這幾天一直看到HDFS提示文件塊丟失的異常信息,也一直沒有去關注,認爲其他都正常。但是翻查HBASE入庫日誌的時候,發現了HBASE在提示入庫的異常信息。聯想到HDFS的塊丟失問題,所以決定仔細檢查一下,一查不得了,果然文件塊丟失的問題影響還很大。很多數據都無法入庫了。

通過命令檢查HDFS的丟失文件塊

hdfs fsck / -list-corruptfileblocks

發現有25個文件塊有問題,剛好都是HBASE數據存儲的文件。還好我有備而來,翻出兩年前寫的hbase region 維護腳本,來刪除異常的文件塊和 hbase meta信息。


if [ $# -lt 2 ]; then
	echo `date +"%Y-%m-%d %H:%M:%S"`  "Usage:<TABLENAME> <FILE>"
	exit 1
fi

TABLENAME=$1
FILE=$2

WORKPATH=/home/hadoop/turk/
LOGFILE=${WORKPATH}/log/hbase_export_sh.log

echo `date +"%Y-%m-%d %H:%M:%S"`  "-------------------------------------------" | tee -a $LOGFILE
echo `date +"%Y-%m-%d %H:%M:%S"`  "Delete Hbase Region & Meta 1.0 (2015-11-30)"     | tee -a $LOGFILE
echo `date +"%Y-%m-%d %H:%M:%S"`  "Delete"  | tee -a $LOGFILE
echo `date +"%Y-%m-%d %H:%M:%S"`  "-------------------------------------------"  | tee -a $LOGFILE
echo `date +"%Y-%m-%d %H:%M:%S"`  "Start..."  | tee -a $LOGFILE

cat $FILE | while read line 
do
#        echo "$line"
regionpath=/hbase/data/default/$1/`echo "$line" | awk -F ',' '{print $3}' | awk -F '.' '{print $2}'`
TABLENAME=`echo "$line" | awk -F ',' '{print $1}'`
echo "$regionpath"
echo "$line" 
hadoop fs -mv  $regionpath /tmp/hbase/delete
echo "deleteall 'hbase:meta','$line'" | hbase shell
done < $2
exit 0


通過hdfs檢查到丟失的文件塊信息,

/hbase/data/default/SDS_SESSION_STAT_HOUR/9362660da32bee2e8b3161ceeb3718a7/cf/6373445294bd42279bd83870abe8dd3a


9362660da32bee2e8b3161ceeb3718a7 在HBASE 元數據中找到了 這條記錄的元數據信息

SDS_SESSION_STAT_HOUR,60.181.156.65_201603181400,1459818475992.9362660da32bee2e8b3161ceeb3718a7.


把這些元數據信息寫入,腳本的輸入文件(第二個參數)中。

然後執行腳本,刪除文件,同時也刪除了元數據信息


再通過 

hdfs fsck / -list-corruptfileblocks

檢查一次現在文件塊丟失的情況,OK,由於腳本中是先把這些文件移動到 /tmp/hbase/delete目錄下,所以現在丟失的文件塊都放在這個目錄下了,然後將這個目錄清了。

再做一次檢查,這個時候已經完成了修復。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章