在hdfs集群中,我每天收到多个文件,可以是3种类型:
1) product_info_timestamp
2) user_info_timestamp
3) user_activity_timestamp
收到的文件数量可以是任意数量,但它们只属于这3个类别中的一个。
我想将属于一个类别的所有文件(在检查它们是否小于100mb后)合并到一个文件中。 例如:名为product_info_ *的3个文件应合并到一个名为product_info的文件中。
我如何实现这一目标?
答案 0 :(得分:3)
您可以使用getmerge来实现此目的,但结果将存储在您的本地节点(边缘节点)中,因此您需要确保在那里有足够的空间。
hadoop fs -getmerge /hdfs_path/product_info_* /local_path/product_inf
您可以使用put
将它们移回hdfshadoop 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/