totalorderpartitioner中的拆分数

qaxu7uf2  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(425)

我对这本书的112页上的注解有点困惑
请注意,中间分区中的范围数需要等于顺序步骤中的减速器数。如果您决定更改reducer的数量,并且一直在重复使用同一个文件,则需要重新生成它
首先,我不太清楚“中间分区”这个词在这里是什么意思,有人能用一个例子来解释一下吗。。
而且这本书没有继续解释为什么这是必需的,我猜原因是
将每个中间分区传递给一个reducer可以并行处理所有分区,因此效率最高。。。
但为了论证,如果我对一个无效率的问题没意见的话,我可以把任意数作为减速机的个数吗?它是否会以任何方式影响最终输出(性能除外)
你一直在重复使用同一个文件,你需要重建它**
以上两行是什么意思?

kb5ga3dv

kb5ga3dv1#

totalorderpartitioner的工作原理如下:首先,一个采样器(例如randomsampler)运行(在客户机上)并创建数据样本。数据会被分类吗?这些样本会希望把数据分成大致相等的块。第二,排序mapreduce将使用totalorderpartitioner和这些示例在Reducer之间分发数据。每个reducer都会对其块数据进行排序并将其写入输出。由于数据是根据样本分配给约简器的,所以当我们连接约简器的输出时,我们会对整个输入数据进行排序。
可以将其视为具有一级递归的快速排序。
在声明中,您询问了:
请注意,中间分区中的范围数需要等于顺序步骤中的减速器数。如果您决定更改reducer的数量,并且一直在重复使用同一个文件,则需要重新生成它
中间分区是由带有示例的文件(分区文件)表示的分区。
这些“中间隔板”的数量应等于减速器的数量。这是一项要求。从javadoc:
公共静态void setpartitionfile(配置conf,路径p)
//设置存储已排序分区键集的sequencefile的路径。对于r reduces,sequencefile中肯定有r-1键。
inputsampler创建的“中间分区”的数量等于mapreduce作业中的reducer的数量,以满足此要求。
如果您重新运行排序—如果您的数据发生了细微的变化,并且示例仍然可以很好地表示它—您可以将现有的分区文件与示例一起使用,因为在客户机上创建它的成本很高。但是您必须使用与inputsample为其创建分区文件的作业相同数量的缩减器。

i2loujxw

i2loujxw2#

我认为“中间分区”是指在分析阶段构建的中间分区文件。此文件确定每个缩减器的范围分区。当您希望范围大小相等时,首先分析数据样本,然后相应地构造范围。还可以指定范围数。
由于order阶段中的每个reducer都接收一个分区,因此reducer的数量必须等于该分区文件中的范围数。如果文件中有5个分区,但只使用4个缩减器,hadoop将不知道将第五个分区发送到何处。在这种情况下,您需要重建分区文件,使其仅包含4个范围。

相关问题