Non DFS Used 到底是啥意思?

Posted

技术标签:

【中文标题】Non DFS Used 到底是啥意思?【英文标题】:What exactly Non DFS Used means?Non DFS Used 到底是什么意思? 【发布时间】:2013-08-28 01:25:38 【问题描述】:

这是我最近在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 %

而且我很困惑,non-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 多。

发生了什么?我是不是搞错了?

【问题讨论】:

【参考方案1】:

“Non DFS used”按以下公式计算:

未使用 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的10GB空间!

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

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

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

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

【讨论】:

我可以清空非dfs数据吗?如果是怎么办? @Mahesha999:尝试重启datanode。 UI 中的“Remaining”显然不是整个磁盘上的总剩余空间,至少在我的情况下是这样。我有一个 315GB 的磁盘和 200GB 的预留空间。 UI 显示 26GB DFS(通过 df -h 确认)、21GB 非 DFS 和 68GB 剩余,而实际上磁盘仍有 266GB 可用空间! 注意:我正在运行 Hadoop 2.7.2【参考方案2】:

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

【讨论】:

这是不正确的,尤其是当dfs.data.dirs 位于与/ 不同的文件系统上时。正确的定义是:任何不是由 HDFS 写入与dfs.data.dirs 相同的文件系统中的数据。换句话说,如果你使用hdfs dfs命令复制数据,那么它是“DFS使用”,如果你使用cp命令将文件复制到dfs.data.dirs,那么它将成为“非DFS使用”。 我可以清空非dfs数据吗?如果是怎么办?【参考方案3】:

正确的简化定义是:“任何不是由 HDFS 写入与dfs.data.dirs 相同的文件系统中的任何数据。换句话说,如果您使用hdfs dfs 命令复制数据,它最终会在dfs.data.dirs 但后来它被认为是“DFS 使用”,如果你使用常规的cp 命令将文件复制到dfs.data.dirs,那么它将成为“非 DFS 使用”。

【讨论】:

【参考方案4】:

还有一件事。Non DFS used = 100GB(Total) - 30 GB( Reserved) - 10 GB (DFS used) - 50GB(Remaining) = 10 GB 因为ext3/ext4默认预留5%(参考预留块数),所以应该是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 调整保留空间。

【讨论】:

【参考方案5】:

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

你可以参考 默认yarn-site.xml 了解详情。

【讨论】:

以上是关于Non DFS Used 到底是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

GPU Z 中的Memory used选项是啥意思???

$NON-NLS-1$ 是啥意思?

non monthly model period是啥意思

*NSFileProtectionComplete* 到底是啥意思?

module 到底是啥意思

authTokenType 到底是啥意思?