非DFS使用的含义是什么?

Adr*_*Lee 22 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 %
Run Code Online (Sandbox Code Playgroud)

而且我很困惑,非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 %
Run Code Online (Sandbox Code Playgroud)

在复制之前,DFS Used和Non DFS Used都是0.

因为DFS Used大约是原始文本文件大小的两倍,我配置了2个副本,

我猜DFS Used由2份原始和元组成.

但是我仍然不知道非DFS使用的来源是什么,为什么这比DFS使用的占用了更多的容量.

发生了什么事?我弄错了吗?

Tim*_*Fei 34

"非DFS使用"通过以下公式计算:

非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) - 50 GB(剩余)= 10 GB

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

术语"非DFS使用"实际上应该重命名为"非dfs使用占用了多少DFS容量"

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

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

du -hsx * | sort -rh | head -10有助于列出十大文件夹.


hig*_*ted 7

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

  • 这是不正确的,特别是当`dfs.data.dirs`位于与`/`不同的文件系统上时.正确的定义是:HDFS不在与`dfs.data.dirs`相同的文件系统中写入的任何数据.换句话说,如果你使用`hdfs dfs`命令来复制数据,那么它就是"DFS使用",如果你使用`cp`命令将文件复制到`dfs.data.dirs`,那么它将变为"非DFS用法". (3认同)
  • 我可以清空非dfs数据吗?如果有,怎么样? (2认同)