将小文件合并为hdfs中的单个文件
Merging small files into single file in hdfs
在一个 hdfs 集群中,我每天收到多个文件,可以是 3 种类型:
1) product_info_timestamp
2) user_info_timestamp
3) user_activity_timestamp
收到的文件数量可以是任意数量,但它们将仅属于这 3 个类别之一。
我想将属于一个类别的所有文件(检查它们是否小于100mb后)合并为一个文件。
例如:3 个名为 product_info_* 的文件应合并为一个名为 product_info.
的文件
我该如何实现?
你可以使用getmerge来实现这个,但是结果会存储在你的本地节点(边缘节点),所以你需要确保那里有足够的space。
hadoop fs -getmerge /hdfs_path/product_info_* /local_path/product_inf
您可以使用 put
将它们移回 hdfs
hadoop fs -put /local_path/product_inf /hdfs_path
您可以使用 hadoop 存档(.har 文件)或序列文件。使用起来非常简单 - 只需 google "hadoop archive" 或 "sequence file".
@SCouto 所建议的另一组命令与此相似
hdfs dfs -cat /hdfs_path/product_info_* > /local_path/product_info_combined.txt
hdfs dfs -put /local_path/product_info_combined.txt /hdfs_path/
在一个 hdfs 集群中,我每天收到多个文件,可以是 3 种类型:
1) product_info_timestamp
2) user_info_timestamp
3) user_activity_timestamp
收到的文件数量可以是任意数量,但它们将仅属于这 3 个类别之一。
我想将属于一个类别的所有文件(检查它们是否小于100mb后)合并为一个文件。 例如:3 个名为 product_info_* 的文件应合并为一个名为 product_info.
的文件我该如何实现?
你可以使用getmerge来实现这个,但是结果会存储在你的本地节点(边缘节点),所以你需要确保那里有足够的space。
hadoop fs -getmerge /hdfs_path/product_info_* /local_path/product_inf
您可以使用 put
将它们移回 hdfshadoop fs -put /local_path/product_inf /hdfs_path
您可以使用 hadoop 存档(.har 文件)或序列文件。使用起来非常简单 - 只需 google "hadoop archive" 或 "sequence file".
@SCouto 所建议的另一组命令与此相似
hdfs dfs -cat /hdfs_path/product_info_* > /local_path/product_info_combined.txt
hdfs dfs -put /local_path/product_info_combined.txt /hdfs_path/