java - 在 map reduce 中使用自定义分区程序应该遵循哪个逻辑来解决这个问题

标签 java hadoop mapreduce load-balancing hadoop-partitioning

如果文件中的键分布是 99% 的单词以 'A' 开头,1% 的单词以 'B' 到 'Z' 开头,并且您必须计算每个字母开头的单词数,您将如何计算有效地分发您的 key ?

最佳答案

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

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

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

解决方案 4: 如果您不介意“作弊”,定义 26 个计数器,每个字母一个,并根据当前词。您可以不使用 reducer (将 reducer 的数量设置为 0)。这将保存所有排序和洗牌。作业完成后,检索所有计数器的值。

关于java - 在 map reduce 中使用自定义分区程序应该遵循哪个逻辑来解决这个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30214332/

相关文章:

java - 使用Java Script从URL打开 Intent 不适用于生产-DeepLink

json - 带有嵌套Json的Hadoop PIG

java - MapReduce 从 Redis 读取输入

design-patterns - 设计 MapReduce 作业以找到低于给定阈值的最大值

java - 如何告诉 eclipse java 运行什么

java - final 是否静态重要吗?

hadoop - 集群遗传编程/算法

hadoop - 关闭电源后重新启动hadoop HA群集节点后,名称节点失败

hadoop - 接口(interface) InputFormat 与类 InputFormat

java - 如何禁用(停用)Spoon 登录?