2

Hadoop 版本:2.7.3 数据节点:32 块大小:512m 复制:3

我使用命令清除了 HDFS 中的所有数据 hdfs dfs -rm -r /*

清除 HDFS 集群后,很少有数据节点仍然显示Block pool used,尽管块为零。

hdfs webui的截图 在此处输入图像描述

的输出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 Pool Used未设置为 0 的数据节点需要花费大量时间来释放块。谁能帮我弄清楚,为什么在这些服务器上,块删除很慢,或者任何其他问题,因为这些块正在被使用。

4

1 回答 1

0

这有几个潜在的原因:

  1. 集群软件最近使用HDFS 滚动升级功能进行了升级,升级尚未完成。在滚动升级期间,文件删除实际上不会删除 DataNode 上的底层块文件。相反,块文件被维护,因此如果操作员选择回滚升级,集群的数据可以恢复到升级前的状态。因此,在滚动升级窗口期间,“使用的块池”等 DataNode 指标继续显示已消耗的空间。检查滚动升级是否正在进行的一种简单方法是转到 NameNode Web UI。概览选项卡将显示一条关于“滚动升级已开始”的消息。要完成升级,请运行hdfs dfsadmin -rollingUpgrade. 之后,DataNodes 将开始(异步)删除块文件。
  2. 集群的一个用户使用了HDFS 快照。快照在创建快照时维护文件系统路径的状态。为了支持这一点,DataNodes 可能需要为以前删除的文件保留块,以防用户选择读取包含数据的旧快照。hdfs fsck使用参数运行-includeSnapshots可以显示是否有正在使用的快照。
  3. 由于某种 I/O 错误(磁盘故障、底层块文件的权限冲突),DataNode 无法删除块文件。这不太可能,但如果出现问题,DataNode 日志会显示更多信息。
于 2017-07-18T05:19:24.657 回答