-2

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

4

1 回答 1

1

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

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

你可以使用hadoop archive(用法:hadoop archive -archiveName {name of the archive} -p {Input parent folder path} {Output folder Path})命令创建一个HAR文件,创建HAR文件后,你可以删除你的原始文件。

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

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

  1. 将 10,000 个文件复制到 HDFS 中的临时位置。例如 hdfs:///tmp/partition1/
  2. 从这 10,000 个文件中创建一个 HAR 文件。例如 hdfs:///tmp/archive1/
  3. 创建存档后,从 hdfs:///tmp/partition1/ 中删除文件
  4. 重复步骤 1 到 3,直到您摄取所有 100,000 个文件。
于 2015-12-17T09:33:29.610 回答