Map输出分区的大小?

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

假设我们有3个Map器(m1,m2和m3)和2个还原器(r1和r2)。
每个reducer从每个Map器生成的文件中获取其输入分区。
从工作历史中,我可以提取每个reduce任务的总输入,但是我想知道每个Map器对这个reducer输入的贡献?
例如,减速机r1将接收一个输入,例如:
输入_r1=(从m1取分区)+(从m2取分区)+(从m3取分区)
我想知道这些分区的大小从Map?

3phpmpom

3phpmpom1#

为了从Map器中找到分区的大小,需要考虑几个问题。
首先,我们应该明白,在hadoop中,分区是在组合器之前执行的,所以如果您的逻辑中有一个组合器,那么您需要考虑它。。。如果它影响你寻找尺寸的尝试。这是相关的,如果你觉得大小的另一种方式比我建议这里。
第二,默认的分区器 HashPartitioner 为每个减速器指定大致相同数量的键。使用的方法是:

public int getPartition(K2 key, V2 value, int numReduceTasks) {

     return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
}

请注意,分区器只考虑键,而忽略了值,这会导致分发给还原器的数据分布不均匀。
我要做的是在你家附近设一个柜台,看看尺寸 HashPartitioner 或自定义分区器,并说明每个分区所收集的键值对大小。然后为每个分区器打印这个值。您可能需要跟踪每个分区将其数据发送到哪里,因为分区程序本身不知道将其数据发送给谁。
很多关于这个问题的研究都是从mapreduce的书中引用的

相关问题