Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mapreduce 如何将文件作为HAR存档导入HDFS?在爪哇_Mapreduce_Hdfs_Har - Fatal编程技术网

Mapreduce 如何将文件作为HAR存档导入HDFS?在爪哇

Mapreduce 如何将文件作为HAR存档导入HDFS?在爪哇,mapreduce,hdfs,har,Mapreduce,Hdfs,Har,目前,我们正在通过调用hadoop的FileSystem API中的org.apache.hadoop.fs.FileSystem.moveFromLocalFile()方法将文件导入HDFS,现在我们在namenode中遇到一些较大的堆大小,因为导入的小文件太多,我们希望减少它。是否有更简单的方法将文件作为HAR导入HDFS,而不必首先导入所有小文件?简而言之,我导入了小文件,但在HDFS中有一个HAR文件包含我导入的文件。无法直接将HAR(Hadoop存档)文件摄取到HDFS中 更好的方法是

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

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

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

您可以使用
hadoop archive
(用法:hadoop archive-archiveName{archive名称}-p{Input parent folder path}{Output folder path})命令创建HAR文件,创建HAR文件后,可以删除原始文件

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

例如,假设您有100000个小文件。一种可能的办法:

  • 将10000个文件复制到HDFS中的临时位置。例如。hdfs:///tmp/partition1/
  • 从这10000个文件创建一个HAR文件。例如。hdfs:///tmp/archive1/
  • 创建存档后,从中删除文件hdfs:///tmp/partition1/
  • 重复步骤1到3,直到您摄取了所有100000个文件