2

我最近有一个 hadoop 集群空间不足。我尝试清理一些日志以获取一些磁盘空间。我运行命令df -h,它显示:

/dev/sda1        22G   20G  1.9G  92% /
/dev/sda3       1.8T  747G  960G  44% /data/1
/dev/sdb1       1.8T  755G  986G  44% /data/2
/dev/sdc1       1.8T  754G  987G  44% /data/3
/dev/sdd1       1.8T  745G  996G  43% /data/4

HDFS 在目录下,/data这很好。但是根目录/几乎没有剩余空间。所以我使用了ncdu可以快速计算dir磁盘使用情况的工具,它显示:

  2.9TiB [##########] /data
  1.5GiB [          ] /home
800.9MiB [          ] /usr
716.3MiB [          ] /var
349.1MiB [          ] /lib
293.8MiB [          ] /opt

没有大目录。我也尝试了诸如 之类的命令du -a | sort -n -r | head,仍然无法找到这个不可见的目录或文件。有谁知道其他方法可以找出问题所在?

谢谢

4

2 回答 2

4

我终于找到了答案。

因为 我删除了一个大的日志文件,但没有回收文件系统中的空间,它仍在占用磁盘空间。这就是为什么命令的结果du -hdf -h不匹配的原因。

解决方案

root@linux:# lsof / | grep deleted
java    15393    hdfs    114w    REG    8,1    4463704    655506    /var/log/hadoop/hdfs/hadoop-hdfs-datanode-hslave.log (deleted)

该命令lsof列出打开的文件。当我删除它时,该文件被打开。第二列显示打开此文件的进程的 PID。

root@linux:# cd /proc/15393/fd/
root@linux:# ls -l | grep deleted
l-wx------ 1 hdfs hadoop 64 Jul 25 17:55 114 -> /var/log/hadoop/hdfs/hadoop-hdfs-datanode-hslave.log (deleted)
root@linux:# > 114

键入上一行 (114) 中显示的文件描述符。现在空间被回收了。

于 2013-07-26T07:53:03.380 回答
1

/data挂载点或其他挂载点可能隐藏了大文件。例如,如果您将一个 10G 文件写入/data/large.bin然后在其上挂载另一个文件系统/data,则该 10G 文件将实际上是不可见的。

/您可以通过绑定到另一个位置来查看是否是这种情况:

mkdir /tmp/slash
mount --bind / /tmp/slash

如果您随后测量/tmp/slash's 的使用情况,您将仅看到根文件系统上的内容。如果/tmp/slash/data显示为已满,则意味着那里有隐藏的数据。

于 2013-07-25T14:11:31.900 回答