自定义分区程序示例

Sai*_*idi 5 hadoop partitioning mapreduce

我正在尝试为输入数据写一个新的Hadoop作业,这有点偏差.对此的类比将是Hadoop教程中的单词计数示例,除非让我们说很多次出现一个特定的单词.

我想要一个分区功能,其中一个键将根据其通常的哈希分区映射到多个reducer和剩余键.这可能吗?

提前致谢.

Pra*_*ati 6

不要以为在Hadoop中可以将相同的密钥映射到多个reducer.但是,可以对键进行分区,以便减少器或多或少地均匀加载.为此,应对输入数据进行采样,并对键进行适当分区.有关自定义分区程序的更多详细信息,请查看Yahoo Paper.Yahoo Sort代码位于org.apache.hadoop.examples.terasort包中.

假设键A有10行,B有20行,C有30行,D在输入中有60行.然后,键A,B,C可以被发送到减速器1,键D可以被发送到减速器2,以使减速器上的负载均匀分布.要对键进行分区,必须进行输入采样以了解键的分布方式.

以下是一些使工作更快完成的建议.

JobConf上指定组合器以减少发送到reducer的键数.这还可以减少映射器和reducer任务之间的网络流量.虽然,不能保证Hadoop框架会调用组合器.

此外,由于数据是倾斜的(一些键一次又一次地重复,让我们说'工具'),您可能希望增加减少任务的数量以更快地完成作业.这确保了当reducer正在处理"工具"时,其他数据将被其他减速器并行处理.


Nie*_*jes 1

如果出于性能原因将数据拆分到多个缩减器中,那么您需要第二个缩减器将数据聚合到最终结果集中。

Hadoop 有一个内置功能可以实现类似的功能:组合器。

组合器是一种“减速器”功能。这确保了在映射任务内可以对数据进行部分缩减,从而减少稍后需要处理的记录数量。

在基本字数统计示例中,组合器与减速器完全相同。请注意,某些算法将需要这两种算法的不同实现。我还有一个项目,由于算法的原因,组合器是不可能的。