这是我最近在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千兆字节)从本地复制到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和使用的非DFS均为0.
因为DFS Used大约是原始文本文件大小的两倍,我配置了2个副本,
我猜DFS Used由2份原创和元组成。
但是我仍然不知道非DFS使用的来源是什么,为什么这比DFS使用的要多得多。
发生什么事了?我犯了错误吗?
答案 0 :(得分:33)
"使用非DFS"计算公式如下:
使用非DFS =已配置容量 - 剩余空间 - 已使用DFS
至少在我看来,它仍然令人困惑。
由于 已配置容量=磁盘空间总量 - 预留空间。
所以非DFS使用=(总磁盘空间 - 保留空间) - 剩余空间 - 使用DFS
让我们举个例子。假设我有100 GB磁盘,并将保留空间(dfs.datanode.du.reserved)设置为30 GB。
在磁盘中,系统和其他文件最多使用40 GB,DFS使用10 GB。如果你运行df -h ,您将看到该磁盘卷的可用空间为50GB。
在HDFS网页界面中,它会显示
非DFS使用= 100GB(总计) - 30 GB(保留) - 10 GB(使用DFS) - 50 GB(剩余) = 10 GB
所以它实际上意味着,您最初配置为为非dfs使用保留30G,为HDFS保留70 G。然而,事实证明非dfs使用超过30G预留并占用10 GB空间,这应该属于HDFS!
术语"非DFS使用"应该真的被重命名为"非dfs使用了多少配置的DFS容量"
并且应该停止尝试弄清楚为什么非dfs在hadoop中使用如此之高。
一个有用的命令是lsof | grep delete
,它可以帮助您识别已删除的打开文件。有时,Hadoop进程(如hive,yarn,mapred和hdfs)可能会引用已经删除的文件。而这些引用将占用磁盘空间。
同样du -hsx * | sort -rh | head -10
有助于列出前十大文件夹。
答案 1 :(得分:7)
非DFS使用的是数据节点的文件系统中不在dfs.data.dirs
中的任何数据。这将包括日志文件,mapreduce shuffle输出和数据文件的本地副本(如果将它们放在数据节点上)。使用du
或类似工具查看占用文件系统空间的内容。
答案 2 :(得分:1)
正确的简化定义是:" HDFS不在与dfs.data.dirs
相同的文件系统中写入的任何数据。换句话说,如果您使用hdfs dfs
命令复制数据,它最终会在dfs.data.dirs
下,但会被视为" DFS使用情况",如果您使用常规{{1} }命令将文件复制到cp
,然后它将成为"非DFS使用"。
答案 3 :(得分:1)
还有一件事。
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
调整预留空间。
答案 4 :(得分:0)
非dfs将是一些将由节点管理器存储的缓存文件。您可以在yarn-site.xml
中检查yarn.nodemanager.local-dirs属性下的路径你可以参考 默认yarn-site.xml了解详情。