设为首页 加入收藏

TOP

异常断电导致HDFS文件块丢失,影响HBASE数据的问题处理
2018-12-04 08:13:38 】 浏览:63
Tags:异常 断电 导致 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目录下,所以现在丢失的文件块都放在这个目录下了,然后将这个目录清了。

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

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇HDFS再学习:HA和Federation机制 下一篇sqoop   把 hdfs 和关系型数..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目