我的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完成维护,手动检查数据节点,配置后,保留safemodehadoop dfsadmin -refreshNodes及更高版本运行hadoop balancer命令,它将解决此问题,因为那些其他工具连接并依赖于该文件的点1失败的可能性很大。

  • 我提到了我的想法,选择是您的选择,提前2018年新年快乐,谢谢。

    关于hadoop - 在哪里找到损坏的块的副本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48021300/

    10-16 05:35