Hadoop 版本:2.7.3 数据节点:32 区 block 大小:512m 复制:3
我使用命令清除了HDFS中的所有数据
hdfs dfs -rm -r/*
清除 HDFS 集群后,尽管 block 为零,但很少有数据节点仍显示使用的 block 池
。
hdfs fsck/
输出结果如下
Connecting to namenode via http://ip-10-0-2-7:50070/fsck?ugi=ubuntu&path=%2F
FSCK started by ubuntu (auth:SIMPLE) from /10.0.2.7 for path / at Tue Jul 18 04:34:19 UTC 2017
Status: HEALTHY
Total size: 0 B
Total dirs: 1
Total files: 0
Total symlinks: 0
Total blocks (validated): 0
Minimally replicated blocks: 0
Over-replicated blocks: 0
Under-replicated blocks: 0
Mis-replicated blocks: 0
Default replication factor: 3
Average block replication: 0.0
Corrupt blocks: 0
Missing replicas: 0
Number of data-nodes: 32
Number of racks: 1
FSCK ended at Tue Jul 18 04:34:19 UTC 2017 in 1 milliseconds
The filesystem under path '/' is HEALTHY
我知道 block 删除是异步过程,但是 Block Pool Used
未设置为 0 的数据节点需要很长时间才能释放 block 。
任何人都可以帮我弄清楚,为什么在这些服务器上, block 删除速度很慢,或者由于正在使用 block 而导致的任何其他问题。
最佳答案
这有几个潜在的原因:
- 最近使用 HDFS Rolling Upgrade 升级了集群软件功能,升级尚未完成。在滚动升级期间,文件删除实际上并没有删除 DataNode 上的底层 block 文件。相反, block 文件得到维护,因此如果运算符(operator)选择回滚升级,集群的数据可以恢复到升级前的状态。因此,在滚动升级窗口期间,“已使用的 block 池”等 DataNode 指标继续显示已消耗的空间。检查滚动升级是否正在进行的一种简单方法是转到 NameNode Web UI。 “概述”选项卡将显示有关“滚动升级已开始”的消息。要完成升级,请运行
hdfs dfsadmin -rollingUpgrade
。之后,DataNodes 将开始删除 block 文件(异步)。 - 集群的用户使用了 HDFS Snapshots .快照在创建快照时维护文件系统路径的状态。为了支持这一点,DataNodes 可能需要为以前删除的文件保留 block ,以防用户选择读取包含数据的旧快照。使用
-includeSnapshots
参数运行hdfs fsck
可以显示是否有正在使用的快照。 - 由于某种 I/O 错误(磁盘故障、基础 block 文件的权限冲突),DataNode 无法删除 block 文件。这不太可能,但如果出现问题,DataNode 日志会显示更多信息。
关于hadoop - 一些数据节点在清除 HDFS 后仍然显示使用的 block 池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45157724/