如何将文件导入HDFS作为HAR存档?在Java中

时间:2015-12-15 09:33:27

标签: mapreduce hdfs har

目前我们通过在hadoop的FileSystem API中调用org.apache.hadoop.fs.FileSystem.moveFromLocalFile()方法将文件导入HDFS,现在我们在namenode中遇到一些大的堆大小,因为导入的小文件数太多了我们希望减少它。是否有更简单的方法将文件作为 HAR 导入HDFS,而无需先导入所有小文件?简而言之,我导入了小文件,但在HDFS中有1个包含导入文件的HAR文件。

1 个答案:

答案 0 :(得分:1)

无法直接将HAR(Hadoop ARchive)文件摄取到HDFS中。

更好的方法是先将较小的文件复制到HDFS中,然后通过将所有这些较小的文件合并在一起来创建一个HAR文件。

您可以使用hadoop archive(用法:hadoop archive -archiveName {存档名称} -p {输入父文件夹路径} {输出文件夹路径})命令创建HAR文件并在创建HAR文件后,您可以删除原始文件。

如果有数百万个小文件,那么您可以将这些文件复制到块中。

例如我们假设您有100,000个小文件。一种可能的方法:

  1. 将10,000个文件复制到HDFS中的临时位置。对于例如HDFS:/// TMP /分区1 /
  2. 从这10,000个文件中创建一个HAR文件。对于例如HDFS:/// TMP /为archive1 /
  3. 创建存档后,从hdfs:/// tmp / partition1 /
  4. 中删除文件
  5. 重复步骤1到3,直到您摄取所有100,000个文件。