java - 如果让自定义分区程序为具有相同键的记录选择不同的分区会怎样?

标签 java hadoop mapreduce partitioner

在学习 Hadoop MapReduce 时,我遇到了如何创建自定义 Partitioner 类。我明白我们需要在我们的类中定义抽象的 getPartition 方法。此方法应该返回当前键值对的分区号(整数)。

现在,分区数将等于作业的 reduce task 数。如果在自定义分区程序中,编写一些逻辑来根据“值”而不是“键”来选择分区怎么办?根据我的理解,这可能意味着具有相同键(但不同值)的记录可能由不同的 reduce 任务处理,这不是 MapReduce 所保证的。这不是异常吗?为什么我们甚至需要 getPartition(key, value, numPartitions) 方法中的“value”参数?理解有误请指正。

最佳答案

分区可以基于中间(映射器在将数据溢出到磁盘之前的输出)键或值进行。当您根据值进行分区时,两个不同的分区可以包含具有相同键的记录。

关于java - 如果让自定义分区程序为具有相同键的记录选择不同的分区会怎样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32350429/

相关文章:

mongodb - 如何使MapReduce与HDFS一起使用

java - 移动到新包后,IntelliJ 将 GIT 存储库的文件标记为未跟踪

php - 启动和停止hiveserver2

hadoop - 使用 HQL 在前面追加零

Java 读写 Spark Vector 到 Hdfs

erlang - Riak 提交后 Hook 在哪里运行?

hadoop - yarn : How to run MapReduce jobs with lot of mappers comparing to cluster size

java - 在线程中设置事件监听器

java - 多语言Java应用程序中的字体问题

java - 使用 Java 将数据发送到本地托管网站上的表单