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 到底是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章