Hadoop Partitioner

1. Hadoop Partitioner / MapReduce Partitioner

在本章中,我们讨论什么是Hadoop分区器。 MapReduce中的分区控制中间映射器输出键的分区。通过散列函数,key(或key的一个子集)被用来派生分区。分区总数取决于reduce任务的数量。在这里,我们还将了解Hadoop分区器的需求,Hadoop分区器的默认设置。

2. 什么是Hadoop分区器?

在开始使用MapReduce分区器之前,让我们先了解一下Hadoop中的Hadoop映射器,Hadoop Reducer和combiner?

Intermediate map output的键的分区由分区器控制。通过散列函数,key(或key的一个子集)被用来派生分区。根据键值对每个映射器输出进行分区,并将具有相同键值的记录放入同一分区(每个映射器内),然后将每个分区发送到reducer。 Partitioner Class确定给定(键,值)对将要分配的分区。分区阶段发生在映射阶段之后和Reduce阶段之前。

3. 需要Hadoop MapReduce分区器吗?

现在我们来讨论一下Hadoop中Mapreduce分区器的需求?

MapReduce作业接受一个输入数据集并生成键值对的列表,该列表是输入数据分割的映射阶段结果,每个任务处理分割和每个映射,输出键值对列表。然后,mapper 的输出发送到Reducer 的输入。但是在reducer阶段之前,mapper输出的划分是在key的基础上进行的,并进行排序。

此分区指定将每个键的所有值都组合在一起,并确保单个键的所有值都到同一个reducer,从而允许通过reducer均匀分布mapper输出。 Hadoop MapReduce中的分区程序通过确定哪个reducer负责特定的key,将映射器输出重定向到reducer。

4. 默认的MapReduce分区器

Hadoop MapReduce中的默认Hadoop分区程序是Hash分区程序,它计算key的哈希值并根据此结果分配分区。

5. Hadoop中有多少个分区器?

在Hadoop中运行的分区程序总数等于reducer的数量,即Partitioner将根据JobConf.setNumReduceTasks()方法设置的reducer数来分割数据。因此,来自单个分区器的数据由一个reducer处理。分区程序仅在存在多个reducer时创建。

6. Poor Partitioner

如果在数据输入中一个键出现比其他键更多。在这种情况下,我们使用两种机制将数据发送到分区。

出现更多的key将被发送到一个分区。

所有其他key将根据其hashCode()发送到分区。

但是如果hashCode()方法不能在分区范围内均匀地分配其他key数据,那么数据将不会均匀地发送给reducer。 对数据分区不好意味着一些reducer将拥有比其他更多的数据输入,即他们将比其他reducer有更多的工作要做。 所以,整个工作将等待别的reducer完成其超大的负载份额。

如何克服MapReduce中糟糕的分区?

为了克服Hadoop MapReduce中不好的分区器,我们可以创建自定义分区器,它允许在不同的reducer中统一共享工作负载。

7. Hadoop MapReduce – 结论

总而言之,Hadoop分区器允许通过reducer分配map输出。 在分区程序中,map输出的分区是根据键和排序进行的。

Hadoop Partitioner

发表评论

电子邮件地址不会被公开。 必填项已用*标注

六十 八 − 五十 八 =