为什么 MapReduce 是这样命名的?

Why MapReduce is is named like that?

我是 Hadoop 的初学者。我想了解为什么 MapReduce 是这样命名的。

据我了解,它基本上是先转换数据以过滤数据,然后聚合数据以产生一些输出。

为什么过滤或转换称为映射?那个操作怎么算作映射?

为什么那个聚合操作叫做归约?在这里至少我可以想象聚合将输入数据集减少到有限数量的值。

我试图从语义的角度来理解MapReduce的含义。

为了找到 MapReduce 术语背后的原因,我们必须回到构成这个特定编程范式的那些元素的根源。这意味着我们需要讨论(尽可能准确且尽可能不乏味)函数式编程

简而言之,Wikipedia 的函数式编程是:

a declarative programming paradigm in which function definitions are trees of expressions that map values to other values, rather than a sequence of imperative statements which update the running state of the program.

这基本上意味着该模型的重点是函数的应用,而不是强调对状态进行更改的命令式编程。因此,通过使用函数式代码,执行中的函数并不真正依赖或操作其范围之外的数据(正如 here 所说的那样)。

"Ok, and what does that have to do with MapReduce, anyhow?"

嗯,MapReduce直接受到函数式编程的启发,因为Map和Reduce函数是函数式编程中使用的基本函数。当然,MapReduce 还有许多其他附加的执行阶段,例如 CombineShuffleSort 等., 但该模型的核心思想源于上述函数式编程的思想。

关于映射,在功能意义上它被描述为一个接收两个参数的函数,一个函数和一个值列表。 Map 函数本质上是在列表的每个值上实现该函数,以 return 输出结果列表。您确实可以将其称为一种“过滤”,但是可以通过更多方式操作数据,而不仅仅是“过滤”它们。 Map 函数的主要目标是将输入数据更改为所需的形式,以便接下来在 Reduce 函数中进行计算。

现在谈到 Reduce,它遵循类似的方法。这里也给出了两个参数,一个函数和一个值列表,函数将在其中实现。由于此处的值列表是来自 Map 函数输出的转换后的数据集合,因此剩下要做的就是处理它们并获得所需的结果。凭借您对 MapReduce 作业该步骤的抽象意义的了解,当您将 Reduce 函数描述为尝试聚合输入数据时,您的想法是正确的。不过,该过程中“缺少”的一件事是 how 并且基于 what 将聚合这些输入数据。而这就是Map函数的主要本质,如上所述。

综上所述,我们可以理解MapReduce模型是以抽象实现的函数式编程的这两个基本功能命名的,因此该模型本质上遵循后者的语义契约。

您可以从 here, here, here, and here.

开始自行探索所有这些以及更多内容