我有数据存储在子目录中,并希望将父目录放在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
这适用于小型数据集。
答案 0 :(得分:0)
该错误消息通常基本上是正确的。您可能没有考虑HDFS文件系统的复制因素。如果您的复制因子设置为3(默认值),那么您需要300GB的存储空间来存储100GB的数据集。
您可以采取以下措施来解决问题:
1)在hdfs-site.xml中将复制因子(dfs.replication)和最大块(dfs.replication.max)减少到2
2)压缩数据集。 Hadoop可以在bzip和gzip压缩文件上运行(虽然你需要小心拆分)