失效链接处理 |
hbase和hadoop数据块损坏处理 PDF 下载
本站整理下载:
相关截图:
主要内容:
1.HDFS 坏块数据的处理
hadoop dfsadmin -safemode leave
通常是由挂了两台以上的机器导致的,注意检查集群机器是否挂了多台
检查一下hdfs状态
hadoop fsck /
如果不健康,确定有损坏,列出损坏块
hadoop fsck -list-corruptfileblocks
少量的确定是无法修复的。删除除全部的损坏块
hadoop fsck -delete
重启hbase 集群(或执行hbck -repair)
2 HBase hbck 工具
Hbase RegionServer 会因为机器硬件、网络、时间同步、GC等原因挂掉。导致hbase 冲
突问题。
hbase hbck 检查工具(/usr/local/hadoop/bin/hbase hbck)
0 inconsistencies detected.
Status: OK
冲突问题的处理
/usr/local/hadoop/bin/hbase hbck -repair
/usr/local/hadoop/bin/hbase hbck 表名 -repair
3 HBase 重建元数据表
前提:Hadoop正常。但hbase启动不起来,没办法解决
1.停用掉hbase进程(并备份元数据表)
2.执行离线重建元数据表
hbase org.apache.hadoop.hbase.util.hbck.OfflineMetaRepair
-->util.HBaseFsck: Success! hbase:meta table rebuilt.
3.备份或删除wal
hadoop fs -mv /hbase/WALs/* /backup/WALs20180131/
4.删除zk 里 /hbase 数据
/usr/local/zk/bin/zkCli.sh
rmr /hbase
5.启动hbase
4 备份与恢复-Export&Impo
Export&Import
Export&Import是HBase一个内置的实用功能,它使数据很容易将hbase表内容输出成
HDFS的SequenceFiles文件.也容易能把Hdfs文件插入到hbase表
需要开启Yarn&Mapreduce进程。
会给Hbase RegionServer 带来压力
hbase org.apache.hadoop.hbase.mapreduce.Export <tablename> <outputdir>
hbase org.apache.hadoop.hbase.mapreduce.Import <outputdir> <tablename>
4 Hbase 备份与恢复 Snapshot
snapshot:
快照在几秒内就可以完成,几乎对整个集群没有任何性能影响
基于表 test创建名为 snap_test 的快照
命令: snapshot 'test','snap_test'
ExportSnapshot tool 快照导出工具命令:
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot 'snap_test' -copyto
/data/huang_test
数据还原:
命令:clone_snapshot 'snap_test','test‘
(或 把快照的数据copy的hbase正确路径下,执行 hbck 表名 -repair)
1、手动修复:
hdfs fsck / #首先检查哪些数据块丢失了
hdfs debug recoverLease -path 文件位置 -retries 重试次数 # 修复指定路径的hdfs文件,尝试多次
此时,hdfs就能被修复了,切记不要使用hdfs fsck / -delete 命令,它是删除所有损坏的块的数据文件,会导致数据彻底丢失,当然若只有一个副本,或所有副本均已经损坏,则可以执行此命令。
2、自动修复
hdfs当然会自动修复损坏的数据块,当数据块损坏后,DN节点执⾏directoryscan(datanode进行内存和磁盘数据集块校验)操作之前,都不会发现损坏;也就是directoryscan操作校验是间隔6h
dfs.datanode.directoryscan.interval : 21600
在DN向NN进⾏blockreport前,都不会恢复数据块;也就是blockreport操作是间隔6h
dfs.blockreport.intervalMsec : 21600000
最终当NN收到blockreport才会进⾏恢复操作
生产中倾向于使用手动修复的方法去修复损坏的数据块。
5 批量删除损坏的文件
先列出损坏的文件并重定向到文件
hadoop fsck -list-corruptfileblocks >> 123.txt
删除123.txt的第一行
然后重建文件
cat 123.txt | awk ‘{print $2}’ >> abc.txt
批量删除
cat abc.txt | while read line;do hadoop fsck -delete $line;done
|