应该在map reduce中使用自定义分区器来遵循哪个逻辑来解决此问题

时间:2015-05-13 12:07:45

标签: java hadoop mapreduce load-balancing hadoop-partitioning

如果在文件密钥分发中,99%的单词以'A'开头,1%以'B'开头为'Z',您必须计算以每个字母开头的单词数,您将如何计算?有效地分配你的密钥?

1 个答案:

答案 0 :(得分:4)

解决方案1:我认为要走的路是组合器,而不是分区器。组合器将聚合以字母'A'开头的单词的本地和,然后将部分和(而不是始终为1)发送到reducer。

解决方案2:但是,如果你坚持使用自定义分区程序,你可以简单地处理单独的reducer中以字母'A'开头的单词,而不是所有其他单词,即奉献一个reducer仅适用于以字母“A”开头的单词。

解决方案3:此外,如果您不介意“作弊”一点,您可以为以字母“A”开头的单词定义计数器,并在地图阶段将其递增。然后,忽略这些单词(不需要通过网络发送它们)并使用默认分区程序来表示其他单词。作业完成后,检索计数器的值。

解决方案4:如果您不介意“作弊”,请定义26个计数器,每个字母一个,然后根据第一个字母在地图阶段递增它们。现在的话。您可以不使用减速器(将减速器的数量设置为0)。这将保存所有排序和改组。作业完成后,检索所有计数器的值。