首先通过 hadf fsck 命令帮助
1 | [hadoop@hadoop ~]$ hdfs fsck |
1.现象:
断电 导致HDFS服务不正常或者显示块损坏
2.检查HDFS系统文件健康
1 | hdfs fsck / |
3.检查hdfs fsck -list-corruptfileblocks
1 | Connecting to namenode via http://hadoop36:50070/fsck?ugi=hdfs&listcorruptfileblocks=1&path=%2F |
4.分析
MySQL–》大数据平台
只需要从MySQL这个表的数据重新刷新一份到HDFS平台
5.想要知道文件的哪些块分布在哪些机器上面?手工删除linux文件/dfs/dn/…..
hadoop36:hdfs:/var/lib/hadoop-hdfs:>
-files 文件分块信息,
-blocks 在带-files参数后才显示block信息
-locations 在带-blocks参数后才显示block块所在datanode的具体IP位置,
-racks 在带-files参数后显示机架位置
无法显示,无法手工删除块文件:
1 | hdfs fsck /hbase/data/JYDW/WMS_PO_ITEMS/c71f5f49535e0728ca72fd1ad0166597/0/f4d3d97bb3f64820b24cd9b4a1af5cdd -files -locations -blocks -racks |
好的文件是显示块分布情况的:
1 | hadoop36:hdfs:/var/lib/hadoop-hdfs:>hdfs fsck /hbase/data/JYDW/WMS_TO/011dea9ae46dae6c1f1f3a24a75af100/0/1d60f56773984e4cac614a8b5f7e93a6 -files -locations -blocks -racks |
最终选择一了百了,删除损坏的块文件,然后业务系统数据重刷
hadoop36:hdfs:/var/lib/hadoop-hdfs:>hdfs fsck / -delete
7.假设数据仅有HDFS上 【文件只有hdfs上有;其他来源没有;这个时候如果有副本是完好的;有的副本是损坏的】
7.1 hdfs dfs -ls /xxxx
hdfs dfs -get /xxxx ./ 下载好完好的副本到Linux环境
hdfs dfs -rm /xxx 删除已有的文件包括损坏的副本文件
hdfs dfs -put xxx / 上传完好的副本文件;此时hdfs就会自动完善3个副本。
注意:
log文件丢一丢丢 没有关系
文件是业务数据 订单数据 丢了,需要报告
手动修复损坏的块【hdfs debug】
hdfs命令帮助是没有debug的,但是确实有hdfs debug这个组合命令,切记。 hdfs debug recoverLease -path hdfs文件位置 -retries 10自动修复
1 | 当数据块损坏后,DN节点执⾏行行directoryscan操作之前,都不会发现损坏; |