如何在HDFS上的文件夹下的所有叶节点中合并小文件

时间:2018-03-26 06:35:12

标签: hadoop hdfs

我在叶子节点中有很多小文件(文本文件和镶木地板文件)(例如/aaa/bbb/ccc/x/x1.txt,/aaa/bbb/ccc/x/x2.txt,.. 。和/ aaa / bbb / ccc / t / dt = xxxx-xx-xx / part-00000,/ aaa / bbb / ccc / t / dt = xxxx-xx-xx / part-00001,...)文件夹(/ aaa / bbb / ccc /),现在我需要将小文件(例如< 10MB)合并到所有叶节点中的单个文件中。有什么好办法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

首先,我建议合并所有小于128MB的文件或任何块大小。如果您认为10M足够大,那么您就错了。

有几种方法可以做到这一点。如果你有Hive,Spark或Pig,只需加载文件并将它们写在其他地方。

如果没有,您可以使用hadoop distcp作业执行MapReduce作业,该作业将读取文件并将其重写到同一群集中的不同文件夹中,通常以较大的大小写入。这甚至是Amazon EMR文档给出的模式。

如果这些文件不断到达,请使用Oozie工作流程重复该过程