我们需要分区器吗?

roqulrg3  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(325)

在一个拥有10TB数据和30个节点的hadoop集群中,我们需要一个分区器吗?如果是,为什么?请用一个示例场景来支持,我们什么时候需要实现自定义分区器?

bcs8qyzn

bcs8qyzn1#

partitioner控制中间Map输出的键的分区。partitioner决定将哪些map输出键发送到哪些reducer。
默认值为hashpartitioner
例如:map output key/val:[a,1],[a,3],[b,5],[b,1],[c,9]
使用默认分区器-假设有3个异径管:
减速器1将得到:[a,1],[a,3]
减速器2将得到:[b,5],[b,1]
减速器c将得到:[c,9]
因此,单个分区中的所有数据都由单个缩减器执行。如果reducer的数目较少(比如上面的两个)—[c,9]也将转到reducer 1或2(分区模行为负责这一点)。
自定义分区器用于更改此默认行为。
例如:您可以决定将键/值发送到还原器,如下所示:
减速机1应获得:[a,1],[b,5],[c,9]
减速机2应该得到:[b,1],[a,3]
你为什么要这么做有很多原因。例如:
-reducer处理逻辑是基于分组键而不是基于键(哈希相同),而是一些自定义的东西,所以您希望将这些键分组在一起。
-reducer创建自己的输出文件(每个文件一个)。所以,如果你想输出文件,使它包含有关某些键的数据。

相关问题