MapReduce排序算法如何工作?


110

Terasort基准是用于演示MapReduce功能的主要示例之一。我在理解MapReduce环境中使用的排序算法的基础时遇到了麻烦。

对我而言,排序仅涉及确定元素相对于所有其他元素的相对位置。因此,分类涉及将“所有”与“所有”进行比较。您的平均排序算法(快速,冒泡,...)简单地以一种聪明的方式做到了。

在我看来,将数据集分为多个部分意味着您可以对单个部分进行排序,然后仍然必须将这些部分集成到“完整的”完全排序的数据集中。鉴于TB数据集分布在数千个系统中,我希望这是一项艰巨的任务。

那么这到底是怎么做的呢?该MapReduce排序算法如何工作?

感谢您帮助我理解。

Answers:


61

以下是有关Hadoop为Terasort实施的一些详细信息:

TeraSort是标准的map / reduce排序,但自定义分区程序除外,该分区程序使用N-1个采样键的排序列表来定义每个reduce的键范围。特别是,发送所有采样,使sample [i-1] <= key <sample [i]减少i。这保证了reduce i的输出都小于reduce i + 1的输出。”

因此,他们的诀窍在于在地图阶段确定键的方式。从本质上讲,它们确保单个减速器中的每个值都可以相对于所有其他减速器进行“预排序”。

我通过James Hamilton的Blog Post找到了该论文的参考资料。


3

Google参考:MapReduce:大型集群上的简化数据处理

出现在
OSDI'04:第六届操作系统设计和实现座谈会上,
加利福尼亚州旧金山,2004年12月。

该链接具有PDF和HTML-Slide参考。

还有一个Wikipedia页面,其中包含实现参考的描述

还批评,

并行数据库的先驱专家David DeWitt和Michael Stonebraker并没有共享任何体系结构,它们对MapReduce可以解决的问题的范围提出了一些有争议的主张。他们称其接口太低级,并质疑它是否真正代表了支持者所宣称的范式转变。他们以Teradata作为已有二十多年的现有技术的一个例子来挑战MapReduce支持者的新颖性主张。他们将MapReduce程序员与Codasyl程序员进行了比较,并指出两者都是“用低级语言编写,执行低级记录操作”。MapReduce对输入文件的使用以及对模式的缺乏支持阻止了由常见的数据库系统功能(例如B树和哈希分区)实现的性能改进,


我了解上述文档中描述的MapReduce的大多数概念。我正在尝试了解排序算法。
Niels Basjes,2009年

1

在阅读Google的MapReduce论文时,我遇到了同样的问题。@Yuval F回答几乎解决了我的难题。

在阅读本文时,我注意到的一件事是魔术发生在分区中(在映射之后,在归约之前)。

本文以hash(key) mod R分区为例,但这并不是将中间数据分区为不同归约任务的唯一方法。

只需在@Yuval F答案中添加边界条件以使其完整即可:假设min(S)和max(S)是采样密钥中的最小密钥和最大密钥;所有<min(S)的键都被划分为一个归约任务;反之亦然,所有> = max(S)的键都被划分为一个归约任务。

采样键没有严格限制,例如最小或最大。只是,这些R密钥在所有密钥之间分布更均匀,此分布式系统更“平行”,并且reduce运算符不太可能出现内存溢出问题。


0

只是猜测...

给定大量数据,您会将数据划分为一些要并行处理的块(也许按记录号,即记录1-1000 =分区1,依此类推)。

将每个分区分配/调度到群集中的特定节点。

每个群集节点可能会进一步按字母顺序将分区分解(映射)成它自己的小型分区。因此,在分区1中,将以A开头的所有内容带给我,并将其输出到x的迷你分区A中。如果当前已经有一个A(x),则创建一个新的A(x)。将x替换为序号(也许这是计划程序的工作)。即给我下一个A(x)唯一ID。

将由映射器完成的作业(计划)(上一步)移交给“减少”群集节点。减少节点簇然后将进一步优化在完成映射器任务时将不可避免发生的每个A(x)部分的种类(当仍然有可能仍然无法开始对所有以w / A开头的单词进行排序时,将成为制作中的另一个迷你分区)。将结果输出到最终排序的部分(即Sorted-A,Sorted-B等)

完成后,再次将排序后的分区合并到单个数据集中。此时,这只是n个文件的简单串联(如果仅执行A-Z,则n可以为26),等等。

之间可能会有中间步骤...我不确定:)。即在最初的缩小步骤之后进一步映射和缩小。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.