Hadoop - reducer 如何获取数据?

标签 hadoop

我知道映射器为每个 reducer 生成 1 个分区。 reducer 如何知道要复制哪个分区?假设有 2 个节点为字数统计程序运行 mapper,并且配置了 2 个 reducer。如果每个 map 节点产生 2 个分区,并且两个节点中的分区都可能包含相同的单词作为键,reducer 将如何正常工作?

例如:

如果节点 1 产生分区 1 和分区 2,分区 1 包含一个名为“WHO”的键。

如果节点 2 产生分区 3 和分区 4,分区 3 包含一个名为“WHO”的键。

如果 Partition 1 和 Partition 4 进入 reducer 1(剩余部分进入 reducer 2),reducer 1 如何计算正确的字数?

如果这不可能,分区 1 和分区 3 将转到 reducer 1,Hadoop 如何做到这一点?它是否确保来自不同节点的给定键值对始终进入同一个 reducer?如果是这样,它是如何做到的?

谢谢, 苏雷什。

最佳答案

在您的情况下,由于分区 1 和分区 3 都具有键“WHO”,因此可以保证这两个分区进入同一个 reducer。

更新

在 hadoop 中,在任何时候一个 tasktracker 的 reduce 任务的最大数量由 mapred.tasktracker.reduce.tasks.maximum 属性决定。
一个 MapReduce 作业的 reducer 数量通过 -D mapred.reduce.tasks=n

设置

When there are multiple reducers, the map tasks partition their output, each creating one partition for each reduce task. There can be many keys (and their associated values) in each partition, but the records for any given key are all in a single partition. The partitioning can be controlled by a user-defined partitioning function, but normally the default partitioner—which buckets keys using a hash function—works very well.(Hadoop: The definitive guide)

因此,具有指定键的值将始终转到同一个 reducer。

关于Hadoop - reducer 如何获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10527271/

相关文章:

r - 使用RJDBC从Hive导入数据到R

hadoop - 在 Spark 作业上使用 ElasticSearch 时 Guava jar 冲突

hadoop - 在hadoop中逐章计算文本文件的单词数

hadoop - 为什么 Map 任务输出写入到本地磁盘而不是 HDFS?

hadoop - Sqoop 导入后 Hive 表中的空格而不是 NULL

hadoop - 什么是适合我索引和处理大数据的工具?

hadoop - 如何在 mapreduce 作业之后安排后处理任务

hadoop - 使用配置单元在 gcp 中跨项目访问存储桶

java - 亚马逊电子病历 : running Custom Jar with input and output from S3

hadoop - 如何增加 hive 中的 reducer ?