我有一个三节点 hadoop 集群,复制因子 = 3。
存储目录是每个系统的/app/hadoop/tmp/dfs/。
每个datanode系统的硬盘容量为221GB。
HDFS的有效数据为62GB,复制62*3=186GB。
现在的问题是我的存储空间不足,即使我在 660 GB 集群上只有 186GB 数据: HDFS 显示可用空间的巨大差异:
datanode1 =7.47 GB
datanode2 =17.7 GB
datanode3 =143GB
为了确保这些空间被 hadoop 本地存储使用,我在每个数据节点上运行了这个命令。 对于数据节点1
du -h --max-depth=1 /app/hadoop/tmp/
63G /app/hadoop/tmp/dfs
139G /app/hadoop/tmp/mapred
201G /app/hadoop/tmp/
对于数据节点2
du -h --max-depth=1 /app/hadoop/tmp/
126G /app/hadoop/tmp/mapred
62G /app/hadoop/tmp/dfs
188G /app/hadoop/tmp/
对于datanode3 du -h --max-depth=1/app/hadoop/tmp/dfs/ 62G/应用程序/hadoop/tmp/dfs/数据 62G/app/hadoop/tmp/dfs/
这里datanode1已经使用了201GB的存储空间。 我尝试了负载均衡器,但它显示集群是平衡的。 这是输出。
start-balancer.sh
starting balancer, logging to /usr/lib/hadoop-0.20/logs/hadoop-ocpe-balancer-blrkec241933d.out
Time Stamp Iteration# Bytes Already Moved Bytes Left To Move Bytes Being Moved
The cluster is balanced. Exiting...
Balancing took 622.0 milliseconds
最近我的一个数据节点宕机了几天,修复后出现了这个问题。 如何平衡负载?
最佳答案
您对磁盘空间的分析包括 MapReduce 暂存目录空间(/app/hadoop/tmp/mapred 路径),它位于 HDFS 之外,主要是作业完成时清除的临时数据。 DFS 空间(/app/hadoop/tmp/dfs)似乎与您预期的使用大小一致。
因此,您的磁盘空间不是被 DataNode 占用,而是被 TaskTracker 占用 - 重新启动它们会强制清除这些目录。
关于hadoop 存储目录使用的空间超过 HDFS 上的总数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12478045/