我的hadoop集群中有一些损坏的块,我们使用的复制因子是3。 我的理解是,即使一个块被破坏,我们将在其他节点中有两个更好的副本。 当我在一个好的文件路径中执行fsck时,我会获得下面的详细信息以及所有副本的位置: / location / to / goodfile1 29600字节,1块:好的 0. BP-xxxx-xx.1xx.1xx.xx-1364828076720:blk_1114138336_1099565732615 len = 29600 Live_repl = 3 [/default/xx.1xx.1xx.xx:50010,/default/xx.1xx.1xx.xx:50010, /default/xx.1xx.1xx.xx:50010]
状态:健康 总面积:29600 B. 总目标:0 总文件数:1 总符号链接:0 总块数(已验证):1(平均块大小29600 B) 最小复制块:1(100.0%) 过度复制的块:0(0.0%) 未复制的块:0(0.0%) 错误复制的块:0(0.0%) 默认复制因子:3 平均块复制:3.0 腐败的块:0 缺少副本:0(0.0%) 数据节点数:14 机架数量:1 FSCK于2017年2月29日星期二02:32:32结束,1毫秒
但是当我对一个损坏的文件执行 fsck / corruptfile -blocks -locations -files 时,我没有获得副本位置,我也看到平均块复制为0.0: 状态:腐败 总面积:27853 B. 总目标:0 总文件数:1 总符号链接:0 总块数(已验证):1(平均块大小27853 B)
MINER REPL&D; D块:1(100.0%) dfs.namenode.replication.min:1 腐败文件:1 缺少块:1 缺少尺寸:27853 B. 腐败块:1
最小复制块:0(0.0%) 过度复制的块:0(0.0%) 未复制的块:0(0.0%) 错误复制的块:0(0.0%) 默认复制因子:3 平均块复制:0.0 腐败的块:1 缺少副本:0 数据节点数:14 机架数量:1 FSCK于2017年2月29日星期二02:39:50结束,时间为0毫秒
任何人都可以解释: 1)因为我看到avg复制为0.0,这是否意味着我们没有为损坏的块提供复制品 2)我们通常会删除损坏的块以使群集健康,在这种情况下这是删除块的正确选项。 3)为什么我没有看到这个腐败块的副本位置。 4)任何人都可以在他们的腐败区块上发布FSCK样本。
谢谢。
答案 0 :(得分:0)
你可以查看namenode:50075 / blockScannerReport?listblocks,它会列出所有块的状态(会出现很长的页面),
因此,当您检查fsck(文件系统检查实用程序) -
时hadoop fsck -block -location -racks fullAddressOfFileInHDFS
所以在你得到之后你也已经弄清了 -
的名单 Over-replicated blocks: 0 (0.0 %)
Under-replicated blocks: 0 (0.0 %)
Mis-replicated blocks: 0 (0.0 %)
实际上,Average block replication:
必须1.0
才能保持身体健康,但由于0.0
Corrupt Blocks: 1
在这里看到块被损坏而不是文件,所以这里有几种方法 -
为什么不首先使用hadoop fs -get
在本地获取文件,如果你在本地获得的文件是好的,稍后将文件从集群中删除,从而再次将文件放在同一位置正在使用hadoop
。
其次,找到该块的文件或者如果您有该文件,请检查运行状况良好的健康状态,然后输入hadoop dfsadmin safemode enter
完成维护,手动检查数据节点,之后配置,离开safemode
,hadoop dfsadmin -refreshNodes
然后运行hadoop balancer
命令,它将解决问题,因为对于那些其他工具连接而言,有很多可能会失败,并且依赖于文件
我提到了我的想法,选择是你的,2018年新年快乐,谢谢。