目前我们通过在hadoop的FileSystem API中调用org.apache.hadoop.fs.FileSystem.moveFromLocalFile()
方法将文件导入HDFS,现在我们在namenode中遇到一些大的堆大小,因为导入的小文件数太多了我们希望减少它。是否有更简单的方法将文件作为 HAR 导入HDFS,而无需先导入所有小文件?简而言之,我导入了小文件,但在HDFS中有1个包含导入文件的HAR文件。
答案 0 :(得分:1)
无法直接将HAR(Hadoop ARchive)文件摄取到HDFS中。
更好的方法是先将较小的文件复制到HDFS中,然后通过将所有这些较小的文件合并在一起来创建一个HAR文件。
您可以使用hadoop archive
(用法:hadoop archive -archiveName {存档名称} -p {输入父文件夹路径} {输出文件夹路径})命令创建HAR文件并在创建HAR文件后,您可以删除原始文件。
如果有数百万个小文件,那么您可以将这些文件复制到块中。
例如我们假设您有100,000个小文件。一种可能的方法: