将整个目录添加到hadoop文件系统(hdfs)

时间:2014-03-15 22:34:47

标签: hadoop mapreduce hdfs

我有数据存储在子目录中,并希望将父目录放在HDFS中。数据始终存在于最后一个目录中,目录结构最多可扩展到2个级别。 所以结构是[parent_dir] - > [sub_directories] - > [sub_directories] - > data

我尝试通过

添加整个目录
hadoop fs -put parent_dir input

这需要很长时间!子目录可能是258X258。

最终失败了
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: DatanodeRegistration(X.X.X.245:50010, storageID=DS-262356658-X.X.X.245-50010-1394905028736, infoPort=50075, ipcPort=50020):DataXceiver
org.apache.hadoop.util.DiskChecker$DiskOutOfSpaceException: No space left on devic

我可以在节点上看到所需的空间。我在这里做错了什么?

另外,我计划访问我的文件的方式是

hadoop jar Computation.jar input/*/* output

这适用于小型数据集。

1 个答案:

答案 0 :(得分:0)

该错误消息通常基本上是正确的。您可能没有考虑HDFS文件系统的复制因素。如果您的复制因子设置为3(默认值),那么您需要300GB的存储空间来存储100GB的数据集。

您可以采取以下措施来解决问题:

1)在hdfs-site.xml中将复制因子(dfs.replication)和最大块(dfs.replication.max)减少到2

2)压缩数据集。 Hadoop可以在bzip和gzip压缩文件上运行(虽然你需要小心拆分)