25

这是我最近在Web UI上看到的

 Configured Capacity     :   232.5 GB
 DFS Used    :   112.44 GB
 Non DFS Used    :   119.46 GB
 DFS Remaining   :   613.88 MB
 DFS Used%   :   48.36 %
 DFS Remaining%  :   0.26 %

而且我很困惑,非dfs Used占用了一半以上的容量,

我认为这意味着一半的 hadoop 存储被浪费了

在花费了无意义的时间搜索之后,我只是格式化了 namenode,并从头开始。

然后我将一个巨大的文本文件(大约 19 GB)从本地复制到 HDFS(成功)。

现在用户界面说

Configured Capacity  :   232.5 GB
DFS Used     :   38.52 GB
Non DFS Used     :   45.35 GB
DFS Remaining    :   148.62 GB
DFS Used%    :   16.57 %
DFS Remaining%   :   63.92 %

在复制之前,DFS Used 和 Non DFS Used 都是 0。

因为使用的 DFS 大约是原始文本文件大小的两倍,并且我配置了 2 个副本,

我猜 DFS Used 由原始和元的 2 个副本组成。

但是我仍然不知道 Non DFS Used 是从哪里来的,为什么它比 DFS Used 占用更多的容量。

发生了什么事?我犯错了吗?

4

5 回答 5

36

“未使用 DFS”通过以下公式计算:

未使用 DFS = 已配置容量 - 剩余空间 - 已使用 DFS

它仍然令人困惑,至少对我来说。

因为 配置容量 = 总磁盘空间 - 保留空间。

所以使用的非 DFS =(总磁盘空间 - 保留空间) - 剩余空间 - 使用的 DFS

让我们举个例子。假设我有 100 GB 磁盘,并且我将保留空间 (dfs.datanode.du.reserved) 设置为 30 GB。

在磁盘中,系统和其他文件使用最多 40 GB,DFS 使用 10 GB。如果您运行 df -h ,您将看到该磁盘卷的可用空间为 50GB。

在 HDFS Web UI 中,它将显示

使用的非 DFS = 100GB(总计)- 30 GB(保留)- 10 GB(使用的 DFS)- 50GB(剩余)= 10 GB

所以这实际上意味着,您最初配置为为非 dfs 使用预留 30G,为 HDFS 预留 70G。然而,事实证明,non dfs 的使用量超过了 30G 的预留空间,并且占用了应该属于 HDFS 的 10 GB 空间!

术语“未使用 DFS”实际上应该重命名为“使用非 dfs 占用了多少配置的 DFS 容量”

并且应该停止尝试弄清楚为什么在 hadoop 中非 dfs 的使用率如此之高。

一个有用的命令是lsof | grep delete,它将帮助您识别那些已被删除的打开文件。有时,Hadoop 进程(如 hive、yarn、mapred 和 hdfs)可能会引用那些已删除的文件。而这些引用会占用磁盘空间。

du -hsx * | sort -rh | head -10有助于列出前十个最大的文件夹。

于 2014-08-06T06:55:55.740 回答
7

使用的非 DFS 是数据节点的文件系统中不在dfs.data.dirs. 这将包括日志文件、mapreduce shuffle 输出和数据文件的本地副本(如果将它们放在数据节点上)。使用du或类似工具查看文件系统中占用空间的内容。

于 2013-08-28T03:49:43.760 回答
2

正确的简化定义是: “任何不是由 HDFS 写入与dfs.data.dirs. ,如果你使用常规命令将文件复制到,那么它将成为“非DFS使用”。hdfs dfsdfs.data.dirscpdfs.data.dirs

于 2015-04-08T11:01:22.263 回答
1

还有一件事。
Non DFS used = 100GB(Total) - 30 GB( Reserved) - 10 GB (DFS used) - 50GB(Remaining) = 10 GB
因为ext3/ext4默认reserve 5%(参考reserved block count),所以应该是
Non DFS used = 100GB(Total) - 30 GB( Reserved from App) - 5 GB(Reserved from FS) - 10 GB (DFS used) - 50GB(Remaining) = 5 GB

sudo tune2fs -l /dev/sdm1获取“保留块计数”
顺便说一句,tune2fs -m 0.2 /dev/sdm1调整保留空间。

于 2018-05-31T06:24:50.370 回答
0

非 dfs 将是节点管理器存储的一些缓存文件。您可以检查 yarn-site.xml 中 yarn.nodemanager.local-dirs 属性下的路径

具体可以参考默认的yarn-site.xml

于 2016-08-29T03:54:52.633 回答