Java Mapreduce组由compositekey和sort组成

时间:2016-06-15 23:35:53

标签: java hadoop mapreduce hadoop2 composite-key

我有一个mapreduce作业,它执行一些处理并生成一个城市的复合键(实现WritableComparable):具有相关计数的水果。现在我想用一个辅助mapreduce工作来链接它,该工作确定每种水果类型的最高计数的城市。

mapreduce作业1的复合键输出示例:

+---------------------+-------+
| city:fruit composite| count |
+---------------------+-------+
| london:apples       | 3     |
+---------------------+-------+
| london:bannanas     | 2     |
+---------------------+-------+
| london:oranges      | 15    |
+---------------------+-------+
| charleston:apples   | 20    |
+---------------------+-------+
| charleston:bannanas | 1     |
+---------------------+-------+
| charleston:oranges  | 3     |
+---------------------+-------+
| chicago:bannanas    | 17    |
+---------------------+-------+
| chicago:apples      | 5     |
+---------------------+-------+
| chicago:oranges     | 11    |
+---------------------+-------+

作业2的所需输出:

+------------+----------+
| city       | fruit    |
+------------+----------+
| london     | oranges  |
+------------+----------+
| charleston | apples   |
+------------+----------+
| chicago    | bannanas |
+------------+----------+

我怎样才能做到这一点?在我的SQL思想中,复合键将是两列,一列用于城市,一列用于水果。我会按水果分组,排序,并抓住最高计数的行。我无法弄清楚这是如何转化为mapreduce世界的。任何建议将不胜感激!

1 个答案:

答案 0 :(得分:1)

<强>过程

  1. 将您的数据读入新地图缩减工作
  2. 将您的信息拆分为城市作为关键和水果的复合值:count
  3. 在减少阶段,您拥有手头城市的每一个价值。现在,您可以在循环中迭代所有这些值。将它们分开并记住最大的水果和水果。
  4. 现在将您的数据写入数据库或HDFS
  5. 请注意,对于每个reducer,都会写一个单独的文件。您可以使用HDFS功能轻松地将它们合并。还有可能只有一个减速器,但我不喜欢这种方式,因为它不可扩展。