我正在尝试合并hdfs上的小文件。这仅仅是出于历史目的,如果需要,大文件将被反汇编并在整个过程中运行,以创建hadoop表的数据。有没有一个简单的方法来实现这一点?例如,第一天收到100个小文件,合并成一个文件,然后第二天在先前创建的文件中添加/附加更多文件,等等。。。
bqjvbblv1#
如果文件都是相同的“模式”,比如csv或json。然后,您可以编写一个非常基本的pig/spark作业来读取整个文件夹中的小文件,然后将其写回其他地方,这很可能会根据hdfs块大小将所有文件合并成更大的大小。您还提到了hive,所以对小文件使用一个外部表,并使用ctas查询创建一个单独的表,从而创建一个mapreduce作业,这与pig的做法非常相似。在我看来,如果可能的话,最佳的解决方案是在hadoop的“上游”设置一个系统,它将把较小的文件批处理成较大的文件,然后将它们转储到hdfs。apachenifi是一个非常有用的工具。
1条答案
按热度按时间bqjvbblv1#
如果文件都是相同的“模式”,比如csv或json。然后,您可以编写一个非常基本的pig/spark作业来读取整个文件夹中的小文件,然后将其写回其他地方,这很可能会根据hdfs块大小将所有文件合并成更大的大小。
您还提到了hive,所以对小文件使用一个外部表,并使用ctas查询创建一个单独的表,从而创建一个mapreduce作业,这与pig的做法非常相似。
在我看来,如果可能的话,最佳的解决方案是在hadoop的“上游”设置一个系统,它将把较小的文件批处理成较大的文件,然后将它们转储到hdfs。apachenifi是一个非常有用的工具。