答案 0 :(得分:4)
答案 1 :(得分:0)
答案 2 :(得分:0)
您不需要减速机。您可以在作业配置阶段将减速器数量设置为0,例如
job.setNumReduceTasks(0);
此外,为确保每个映射器处理一个完整的输入文件,您可以告诉hadoop输入文件不可拆分。 FileInputFormat有一个方法
protected boolean isSplitable(JobContext context, Path filename)
可用于将文件标记为不可拆分,这意味着它将由单个映射器处理。有关文档,请参阅here。 我只是重新阅读了你的问题,并意识到你的输入可能是一个包含文件名列表的文件,所以你很可能想要拆分它,或者它只能由一个映射器运行。
我在你的情况下会做的是输入,这是s3中的文件名列表。映射器输入是一个文件名,它下载并运行你的exe。然后将此exe运行的输出上载到s3,映射器移动到下一个文件。然后映射器不需要输出任何东西。虽然输出处理的文件名可能是个好主意,但您可以在之后检查输入。使用我刚刚概述的方法,您不需要使用isSplitable方法。