在哪里可以找到损坏块的副本

where to find the replicas of corrupt blocks

我的 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 总符号链接: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 于 12 月 29 日星期五结束 02:32:32 MST 2017 仅用了 1 毫秒

但是当我对损坏的文件执行 fsck /corruptfile -blocks -locations -files 时,我没有得到副本位置,而且我看到平均块复制为 0.0 : 状态:腐败 总尺寸:27853 B 目录总数:0 文件总数:1 总符号链接:0 区块总数(已验证):1(平均区块大小 27853 B)


低于最小回复块数: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 于 12 月 29 日星期五结束 02:39:50 MST 2017 仅用了 0 毫秒

谁能解释一下: 1) 正如我所看到的 avg replication 为 0.0 ,这是否意味着我们没有损坏块的副本 2)我们通常删除损坏的块以使集群健康,在这种情况下,这是删除块的正确选项。 3)为什么我看不到这个损坏块的副本位置。 4) 任何人都可以 post 在他们损坏的块上的 FSCK 样本。

谢谢。

你可以查看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

看到这里损坏的是块而不是文件,所以这里有几种方法 -

  1. 你为什么不首先使用 hadoop fs -get 在本地获取文件,如果你在本地获取的文件是好的,稍后将文件从集群中删除,然后再次将文件放入它使用的相同位置 hadoop.

  2. 其次,找到block的文件或者如果有文件,查看健康状态,显示healthy,然后进入hadoop dfsadmin safemode enter done the maintenance,查看数据手动节点,配置后,留下safemodehadoop dfsadmin -refreshNodes和后来的运行 hadoop balancer命令,它会解决问题,因为第1点有很多失败的可能性那些其他工具连接并依赖于该文件。

我提到了我的想法,选择权在你,提前祝你 2018 年新年快乐,谢谢。