Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop MapReduce-单个reducer负载很重_Hadoop_Mapreduce_Hadoop Partitioning - Fatal编程技术网

Hadoop MapReduce-单个reducer负载很重

Hadoop MapReduce-单个reducer负载很重,hadoop,mapreduce,hadoop-partitioning,Hadoop,Mapreduce,Hadoop Partitioning,我正在运行一个猪脚本,它看起来像 <something> <something> B = GROUP A by bucketid PARALLEL 200; C = FOREACH B { sorted = SORT A by field1, field2 ...; GENERATE FLATTEN(sorted); } STORE C INTO 'output' USING MultiStorage(output, '8', 'gz');

我正在运行一个猪脚本,它看起来像

<something>
<something>
B = GROUP A by bucketid PARALLEL 200;
C = FOREACH B {
      sorted = SORT A by field1, field2 ...;
      GENERATE FLATTEN(sorted);
    }
STORE C INTO 'output' USING MultiStorage(output, '8', 'gz');

B=A组,采用bucketid并联200;
C=FOREACH B{
排序=按字段1、字段2对A进行排序。。。;
生成展平(排序);
}
使用多存储(output,'8','gz')将C存储到'output'中;
字段
bucketid
采用200个不同的值,因此我将平行设置为200,期望每个减速器将处理一组。然而,一些减速机什么也不做,而其他减速机负责多个组。这背后的想法是什么


我面临的真正问题是,一个reducer
R
落后于其他reducer,任务日志显示
合并13GB的数据(并且reducer处于reduce阶段)。但是,根据我输入的数据,我不希望
R
处理那么大的数据量。一旦
R
完成,它生成的输出部件文件只有
350MB
(gzip格式),如果我解压缩,它只有
6GB
。所以我想知道,当reducer运行时,为什么日志会显示合并13GB的数据。这背后有什么原因吗?我遗漏了什么吗?

您是否有任何测试来详细说明bucketid值的分布?(您可以在B上运行另一个foreach以获得A的计数)。此外,模式中的字段“8”是什么?350MB/6GB输出文件是否仅用于一个键?我每天都有数据,根据其他成功日期的运行情况,每个存储桶大小从1MB到最大290MB不等。当一个减速机卡住时,我可以看到其他减速机生成的输出,并推断出这个减速机(当前卡住的最后一个减速机)应该处理哪些Buckid。350MB/6GB用于4个BucketId的组合,其中一个BucketId为290MB,其他的则较小。正如我所说的,在它完成后(需要很长时间),它产生的输出只有350MB(最终输出大小和减速机运行时的输出大小之间的增量)。@ChrisWhite字段8是bucketid(我想根据bucket id存储记录)。