这是我最近在webui上看到的
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占用了一半以上的容量,
我认为这意味着一半的hadoop存储空间被浪费了
在花了无意义的时间搜索之后,我只是格式化namenode,然后从头开始。
然后我将一个巨大的文本文件(约19G)从本地复制到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大约是原始文本文件大小的两倍,而且我配置了2个副本,
我猜使用的dfs是由原始和meta的两个副本组成的。
但我仍然不知道非dfs的使用从何而来,为什么它比dfs的使用占用了那么多的容量。
发生什么事了?我做错了吗?
5条答案
按热度按时间5uzkadbs1#
使用的非dfs是数据节点的文件系统中不在
dfs.data.dirs
. 这将包括日志文件、mapreduce shuffle输出和数据文件的本地副本(如果将它们放在数据节点上)。使用du
或者类似的工具来查看文件系统中占用空间的内容。7lrncoxx2#
还有一件事。
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
调整保留空间。rseugnpd3#
正确的简化定义是:“任何不是由hdfs在同一文件系统中写入的数据
dfs.data.dirs
. 换句话说,如果你使用hdfs dfs
命令来复制数据,结果是dfs.data.dirs
但是,如果您使用常规的cp
将文件复制到的命令dfs.data.dirs
,则会变成“非dfs使用”。wi3ka0sx4#
非dfs将是一些缓存文件,这些文件将由节点管理器存储。您可以检查yarn-site.xml中的yarn.nodemanager.local-dirs属性下的路径
有关详细信息,请参阅default-site.xml。
rt4zxlrg5#
“未使用dfs”按以下公式计算:
non-dfs used=配置的容量-剩余空间-使用的dfs
至少对我来说,这仍然令人困惑。
因为配置的容量=总磁盘空间-保留空间。
所以non-dfs used=(总磁盘空间-保留空间)-剩余空间-dfs used
举个例子。假设我有100GB的磁盘,并且我将保留空间(dfs.datanode.du.reserved)设置为30GB。
在磁盘上,系统和其他文件使用了40GB,dfs使用了10GB。如果运行df-h,您将看到该磁盘卷的可用空间为50gb。
在hdfswebui中,它将显示
未使用dfs=100gb(总计)-30 gb(保留)-10 gb(使用dfs)-50gb(剩余)=10 gb
所以它实际上意味着,您最初配置为为非dfs使用保留30g,为hdfs保留70G。然而,非dfs的使用超过了30g的预留空间,占用了10gb的空间,这应该属于hdfs!
术语“non-dfs used”实际上应该重命名为“non-dfs use占用多少配置的dfs容量”
我们应该停下来试着弄清楚为什么在hadoop中非dfs的使用率如此之高。
一个有用的命令是
lsof | grep delete
,这将帮助您识别已删除的打开文件。有时,hadoop进程(如hive、yarn、mapred和hdfs)可能会引用那些已经删除的文件。这些引用将占用磁盘空间。也
du -hsx * | sort -rh | head -10
帮助列出前十大文件夹。