我正在实现一个需要在多个S3对象中创建输出的Hadoop Map reduce作业。 Hadoop本身只创建一个输出文件(一个S3对象),但我需要将输出分区为多个文件。
我如何实现这一目标?
答案 0 :(得分:3)
我是通过使用S3工具包直接将我的reducer方法的输出写入S3来实现的。由于我在EC2上运行,因此速度快且免费。
通常,您希望Hadoop尽可能地处理您的输入和输出,以获得更清晰的映射器和减速器;当然,您希望在管道的最后写入S3,让Hadoop的代码移动完成HDFS的工作。
在任何情况下,我建议您执行所有数据分区,并在最终reduce任务中将整个输出集写入S3,每个S3文件一组。这会尽可能地将代码逻辑放在代码中。这得到了回报,因为我最终得到了一个最小的Hadoop S3工具包,我用它来完成几个任务流程。
我需要在我的reducer代码中写入S3,因为S3 / S3n文件系统还不成熟;他们现在可能会工作得更好。
答案 1 :(得分:0)
您是否也知道MultipleOutputFormat? 它与S3无关,但通常它允许将输出写入多个文件,实现给定的逻辑。