将小文件合并到hdfs

时间:2018-04-30 04:52:33

标签: hadoop mapreduce hdfs

在hdfs集群中,我每天收到多个文件,可以是3种类型:

1) product_info_timestamp

2) user_info_timestamp

3) user_activity_timestamp

收到的文件数量可以是任意数量,但它们只属于这3个类别中的一个。

我想将属于一个类别的所有文件(在检查它们是否小于100mb后)合并到一个文件中。 例如:名为product_info_ *的3个文件应合并到一个名为product_info的文件中。

我如何实现这一目标?

3 个答案:

答案 0 :(得分:3)

您可以使用getmerge来实现此目的,但结果将存储在您的本地节点(边缘节点)中,因此您需要确保在那里有足够的空间。

hadoop fs -getmerge /hdfs_path/product_info_* /local_path/product_inf

您可以使用put

将它们移回hdfs
hadoop fs -put  /local_path/product_inf /hdfs_path

答案 1 :(得分:1)

您可以使用hadoop存档(.har文件)或序列文件。它使用起来非常简单 - 只需google" hadoop archive"或"序列文件"。

答案 2 :(得分:1)

@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/