我的hadoop集群中有一些损坏的块,我们使用的复制因子是3。
我的理解是,即使一个块损坏,我们在其他节点上也会有2个更好的副本。
当我在一个好的文件路径中执行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
符号链接(symbolic link)总数: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以1毫秒的时间在2017年12月29日星期五02:32:32结束
但是当我对损坏的文件执行 fsck / corruptfile -blocks -locations -files 时,我没有得到副本位置,我也看到平均块复制为0.0:
状态:CORRUPT
总大小:27853 B
总数:0
文件总数:1
符号链接(symbolic link)总数:0
总块(已验证):1(平均块大小27853 B)
在最小更换方块以下:1(100.0%)
dfs.namenode.replication.min:1
损坏的文件:1
丢失块:1
缺失尺寸:27853 B
腐 eclipse 块:1
最少复制的块:0(0.0%)
过度复制的块:0(0.0%)
复制不足的块:0(0.0%)
错误复制的块:0(0.0%)
默认复制因子:3
平均块复制:0.0
腐败块:1
缺少副本:0
数据节点数:14
机架数:1
FSCK于2017年12月29日星期五12:39:50 MST结束于0毫秒
谁能解释一下:
1)我看到avg复制为0.0,这是否意味着我们没有损坏块的副本
2)我们通常删除损坏的块以使群集正常运行,在这种情况下,这是删除该块的正确选择。
3)为什么我看不到此损坏块的副本位置。
4)任何人都可以在其损坏的块上发布FSCK的样本。
谢谢。
最佳答案
您可以检查名称节点: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
命令,它将解决此问题,因为那些其他工具连接并依赖于该文件的点1失败的可能性很大。 我提到了我的想法,选择是您的选择,提前2018年新年快乐,谢谢。
关于hadoop - 在哪里找到损坏的块的副本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48021300/