我有点困惑于这张关于图书地图缩减设计第112页模式的笔记
注意,中间分区中的范围数量需要等于订单步骤中的减速器数量。如果您决定更改减速器的数量,并且您一直在重用同一个文件,则需要重新构建它
首先,我不完全确定“中间分区”一词在这种情况下是什么意思,请有人举例说明一下。
而且这本书没有继续解释为什么这是必需的,我猜原因是
将每个中间分区传递给还原器将使所有分区并行处理,因此效率最高.
但是为了论证,如果我同意a的低效,我可以把任意的数字作为减速器的数目吗?它是否会以任何方式影响最终输出(性能除外)?
您一直在重用同一个文件,您需要重新构建它**
这两条线是什么意思?
发布于 2014-02-23 10:31:05
这里是TotalOrderPartitioner如何工作的:首先,一个采样器(例如,RandomSampler)运行(在客户机上)并创建数据样本。如果数据被分类的话--这些样本有望将其放入大致相等的块中。其次,排序MapReduce将与这些样本一起使用TotalOrderPartitioner在减速器之间分发数据。每个减缩器都会对其块数据进行排序,并将其写入输出。由于数据是根据样本分配给减速器的,所以当我们连接减速器的输出时,就会得到整个输入数据。
--它可以被看作是具有一级递归的快速排序。
在声明中,你问到:
注意,中间分区中的范围数量需要等于订单步骤中的减速器数量。如果您决定更改减速器的数量,并且您一直在重用同一个文件,则需要重新构建它
中间分区是由带有示例的文件表示的分区(分区文件)。
这些“中间分区”的数目应该等于减速器的数目。这是一项要求。来自javadoc:
公共静态无效setPartitionFile(配置conf,路径p) //设置存储已排序分区密钥集的SequenceFile的路径。对于R减少,SequenceFile中必须有R-1键.
InputSampler创建的“中间分区”数量等于MapReduce作业中的减速器数量,满足了这一要求。
如果您重新运行排序--如果您的数据稍有变化,并且示例仍然很好地表示它--您可以在示例中使用现有的分区文件,因为它在客户机上的创建成本很高。,但是您必须使用相同数量的减速器,就像您在InputSample为其创建分区文件的作业中使用的那样。
发布于 2014-02-22 21:11:29
我认为“中间分区”指的是在分析阶段构建的中间分区文件。此文件确定每个减速器的范围分区。由于您希望范围大小相等,所以首先分析数据的样本,然后相应地构造范围。您还可以指定范围的数量。
由于订单阶段的每个减速机接收一个分区,减速器的数量需要等于该分区文件中的范围数。如果文件中有5个分区,但只使用4个减缩器,hadoop将不知道在哪里发送第五个分区。在这种情况下,您需要重新构建分区文件,使其只包含4个范围。
https://stackoverflow.com/questions/21957078
复制相似问题