共享conf变量或使用两个作业?哪个更好?

时间:2016-10-22 16:23:55

标签: java hadoop mapreduce

我收到了一个大文本文件。使用来自公司出租车的数据。这些数据在旅行之间进行组织。 示例:

  1. 驾驶执照(32421ALED),票价(US $ 6)
  2. 驾驶执照(9167825HF),票价(15美元)
  3. 我的hadoop地图缩减计划的目的是以最大的收入金额返还司机。

    所以:

    • Mapper 使用令牌工具处理文本文件,这样,对于每次旅行,将每个驾驶执照与票价相关联。
    • Reducer 获取映射器的输出,然后通过添加所有票价来获取每个驱动程序的收款

    现在怎么办?我需要另一个减速机,这样一旦我得到每个司机的收款,我只需要获得收集金额最高的那个。这就是问题所在。

    我搜索了stackoverflow,发现两种可能的解决方案

    哪个是我问题的最佳选择?还有另一个吗?

1 个答案:

答案 0 :(得分:0)

实际上你可以在一个程序中执行此操作。您可以在reducer中维护一个本地比较对象(驱动程序许可证,汇总金额)并将其与当前处理(键,值)进行比较,如果它大于本地对象,则总计$ $,并使用当前对象进行分配。 这里你不打算在reduce方法中做context.write()。最后,您将在Reducer的清理方法中执行本地比较对象的context.write(),它将具有驱动程序许可证和$的最高集合。

注意:您需要通过设置job.setNumReduceTasks(1)来仅使用一个reducer运行它;不确定这是否符合你的要求。