将小文件合并为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/