异常断电导致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目录下,所以现在丢失的文件块都放在这个目录下了,然后将这个目录清了。

再做一次检查,这个时候已经完成了修复。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值