我的Hadoop集群中有一些损坏的块,我们使用的复制因子是3。 我的理解是,即使一个块损坏,我们也会在其他节点中再有 2 个好副本。 当我在一个好的文件路径中执行 FSCK 时,我会在下面获得所有副本位置的详细信息:/location/to/goodfile1 29600 字节, 1 块: OK 0. BP-xxxx-xx.1xx.1xx.xx.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 在 1 毫秒内于 2017 年 12 月 29 日星期五 02:32:32 MST
结束但是当我对损坏的文件进行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 在 0 毫秒内于 2017 年 12 月 29 日星期五 02:39:50 MST
结束谁能解释一下: 1)正如我认为平均复制为 0.0 时,这是否意味着我们没有损坏块的副本 2)我们通常会删除损坏的块以使集群健康,在这种情况下,这是删除块的正确选择。 3)为什么我看不到这个损坏块的副本位置。 4)任何人都可以在他们的腐败块上发布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
新鲜和健康,但它只是因为Corrupt Blocks: 1
而显示出0.0
看到这里块损坏了而不是文件,所以这里有几种方法 -
为什么不首先使用
hadoop fs -get
在本地获取文件,如果本地获取的文件很好,并且稍后从群集中删除文件,从而再次将文件放在它使用的相同位置hadoop
.其次,找到块的文件,或者如果您有该文件,请检查运行状况,显示为正常,然后输入完成维护
hadoop dfsadmin safemode enter
,手动检查数据节点,配置后,离开safemode
,hadoop dfsadmin -refreshNodes
,稍后运行hadoop balancer
命令,它将解决问题,因为对于其他工具连接并依赖于该文件,第 1 点有很多失败的可能性。
我提到了我认为的,选择是你的,提前祝2018年新年快乐,谢谢。