Hadoop 非DFS使用的确切含义是什么?

Hadoop 非DFS使用的确切含义是什么?,hadoop,hdfs,Hadoop,Hdfs,这是我最近在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占用了超过一半的容量 我认为这意味着一半的hadoop存储被浪费了 在花了无意义的时间

这是我最近在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占用了超过一半的容量

我认为这意味着一半的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由两份原件和元数据组成

但我仍然不知道使用的非DFS从何而来,为什么它比使用的DFS占用了如此多的容量


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

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

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

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

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

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

因此未使用DFS=(总磁盘空间-保留空间)-剩余空间-已使用DFS

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

在磁盘上,系统和其他文件使用了高达40 GB的内存,DFS使用了10 GB的内存。如果你运行df-h ,您将看到该磁盘卷的可用空间为50GB

在HDFS web UI中,它将显示

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

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

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

我们应该停止努力,弄清楚为什么hadoop内部的非dfs使用率如此之高

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


另外,
du-hsx*| sort-rh | head-10
帮助列出前十大文件夹

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

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

你可以参考 详细信息的默认设置。

还有一件事。
未使用DFS=
100GB(总计)-30GB(保留)-10GB(使用DFS)-50GB(剩余)
=10 GB

因为ext3/ext4默认保留5%(参考保留块计数),所以它应该是
未使用DFS=
100GB(总计)-30GB(由应用程序保留)-5GB(由FS保留)-10GB(使用DFS)-50GB(剩余)
=5 GB

sudo tune2fs-l/dev/sdm1
获取“保留块计数”

顺便说一句,
tune2fs-m0.2/dev/sdm1
来调整保留空间。

这是不正确的,尤其是当
dfs.data.dirs
/
在不同的文件系统上时。正确的定义是:任何不是由HDFS在与
dfs.data.dirs
相同的文件系统中写入的数据。换句话说,如果您使用
hdfs-dfs
命令复制数据,那么它就是“dfs使用”,如果您使用
cp
命令将文件复制到
dfs.data.dirs
,那么它将变为“非dfs使用”。我可以清空非dfs数据吗?如果是,如何清空非dfs数据?如果是,怎么做?@Mahesha999:尝试重新启动datanode。UI中的“剩余”显然不是整个磁盘上的总剩余空间,至少在我的情况下是这样。我有315GB的磁盘和200GB的预留空间。用户界面显示26GB DFS(通过
df-h
确认)、21GB非DFS和68GB剩余空间,而实际上磁盘仍然有266GB空闲空间!注意:我正在运行Hadoop 2.7.2