收集多个映射器的结果,在Hadoop中的Reducer中排序

时间:2016-04-01 05:47:40

标签: java hadoop hadoop-streaming hadoop-partitioning bigdata

我有多个非常大的文件(接近500MB)作为我的MR程序的输入。我将这些文件划分(拆分)为相同大小的分区。每个Mapper都有 文件的单个分区

Mapper:Key =(filename,partition_number)和Value =(分区的字符流)

我在mapper中对值(字符流)应用了一些计算。 我想在一个reducer中收集与输入文件(对于它的所有分区)相对应的结果。所以我认为reducer i / p键为'filename'。但是映射器的那些输出必须在reducer中顺序收集。(比如[partition1 o / p + partition2 + ... + partitionN o / p])

你能告诉我逻辑吗? 感谢。

1 个答案:

答案 0 :(得分:1)

您需要进行二次排序。有关示例,请参阅https://vangjee.wordpress.com/2012/03/20/secondary-sorting-aka-sorting-values-in-hadoops-mapreduce-programming-paradigm/

在这种情况下"

  • Primary Comparator在[filename,partition_number]
  • 上进行比较
  • 仅限文件名的组比较器
  • 仅限文件名的分区程序