Java 如何使用mapreduce合并一些文件?

Java 如何使用mapreduce合并一些文件?,java,file-io,merge,hadoop,mapreduce,Java,File Io,Merge,Hadoop,Mapreduce,我打算使用map/reduce将一些小文件合并到同一目录下。我看到有人说使用流将非常简单,但现在我只能使用JAVA map/reduce。 现在我的解决方案是一条记录一条记录地读取文件,然后将它们写入同一个输出文件。但我认为这是低效的。我可以将整个文件的内容用作映射器的值,以便提高I/O效率吗? 谢谢你的回复 执行此操作的“低效”方法是只对文件进行cat并将其写回: hadoop fs -cat /path/to/files/*.txt | hadoop fs -put - /output/pa

我打算使用map/reduce将一些小文件合并到同一目录下。我看到有人说使用流将非常简单,但现在我只能使用JAVA map/reduce。 现在我的解决方案是一条记录一条记录地读取文件,然后将它们写入同一个输出文件。但我认为这是低效的。我可以将整个文件的内容用作映射器的值,以便提高I/O效率吗? 谢谢你的回复

执行此操作的“低效”方法是只对文件进行cat并将其写回:

hadoop fs -cat /path/to/files/*.txt | hadoop fs -put - /output/path/blobbed.txt

您可能会发现,对于更大的数据集,这种方法可以很好地工作。

它不是效率低下的,但比通过mapreduce作业并行执行要慢。但是,根据小文件的数量,它可能比MR作业快。您认为
getmerge
,然后将结果向后推会更快吗?这取决于文件的大小和数量。但是每个文件高达64m的getmerge应该会更快。我已经尝试了“getmerge&&put”来做这项工作,但我们的工作将在分布式Hadoop上运行100多个节点。我的输入可能超过100个文件。我想使用map/reduce将提高效率。感谢您的回复@王浩,仔细想想,MapReduce作业必须加载数据,然后将所有数据发送到reducer。这实际上是相同的事情,但开销较小。合并的顺序对您重要吗?这些文件是从以前的MR作业中输出的,您想创建一个单独的排序输出,还是只需要一个未定义顺序的文件?这些文件已经在HDFS中,还是在某个本地磁盘上?我不需要顺序,所有文件都在HDFS中