MapReduce算法示例
欢迎使用MapReduce算法示例。
在CloudEra环境中编写MapReduce程序之前,首先我们将通过本文中的一些简单MapReduce示例讨论MapReduce算法在理论上如何工作。
在我的下一篇文章中,我们将讨论如何开发MapReduce程序来执行WordCounting以及一些更有用和更简单的示例。
MapReduce算法
MapReduce是一种分布式数据处理算法,由Google在其MapReduce技术论文中引入。
MapReduce算法主要受功能编程模型的启发。
(请阅读"功能编程基础"一文,以了解有关功能编程,其工作原理及其主要优点)。
MapReduce算法主要用于在集群环境中以并行,可靠和高效的方式处理大量数据。
我希望每个人都熟悉"分而治之"算法。
它使用分而治之技术来处理大量数据。
它将输入任务分为较小且易于管理的子任务(它们应独立执行)以并行执行它们。
MapReduce算法步骤
MapReduce算法使用以下三个主要步骤:
- 地图功能
- 随机播放功能
- 减少功能
其中我们将讨论MapReduce算法中的每个功能角色和职责。
如果您在本节中不太了解,请不要慌张。
请阅读下一节,在这里我们将使用一个简单的单词计数示例详细解释它们。
再次阅读下一节后,请再次阅读本节。
我敢打赌,您一定会很好地理解这三个步骤或者功能。
地图功能
地图功能是MapReduce算法的第一步。
它需要输入任务(例如DataSets。
在下图中,我仅给出了一个DataSet。
)并将它们划分为较小的子任务。
然后对每个子任务并行执行所需的计算。
此步骤执行以下两个子步骤:
分裂
制图
拆分步骤从Source获取输入DataSet,并将其划分为较小的Sub-DataSet。
映射步骤采用那些较小的Sub-DataSet,并对每个Sub-DataSet执行所需的操作或者计算。
该映射函数的输出是一组键和值对,如<Key,Value>,如下图所示。
MapReduce第一步输出:
随机播放功能
这是MapReduce算法的第二步。
随机播放功能也称为"合并功能"。
它执行以下两个子步骤:
- 合并中
- 排序
它获取来自"映射功能"的输出列表,并对每个键值对执行这两个子步骤。
合并步骤将具有相同键的所有键值对组合在一起(即通过比较"键"对键值对进行分组)。
此步骤返回<键,列表<值>>。排序步骤从"合并"步骤获取输入,并使用"键"对所有键值对进行排序。
此步骤还返回<Key,List <Value >>输出,但具有排序的键值对。
最后,随机播放功能将<键,列表<值>>排序对的列表返回到下一步。
MapReduce第二步输出:
减少功能
这是MapReduce算法的最后一步。
它仅执行一个步骤:减少步骤。
它从随机播放功能中获取<Key,List <Value >>排序对的列表,并执行如下所示的归约运算。
MapReduce最终步骤输出:
最后一步输出看起来像第一步输出。
但是,最后一步<Key,Value>对与第一步<Key,Value>对不同。
最后步骤<键,值>对被计算并排序。
我们可以通过一些简单的示例观察第一步输出和最后一步输出之间的差异。
下一节将通过一个简单的示例讨论相同的步骤。
这就是MapReduce算法的所有三个步骤。
MapReduce示例–字数统计
在本节中,我们将从理论上讨论" MapReduce算法如何解决WordCount问题"。
我们将实现Hadoop MapReduce程序并在我的后续文章中对其进行测试。
问题语句:计算数据集中可用的每个单词的出现次数。
输入数据集请在下图中找到我们的示例输入数据集文件。
为了简单起见,我们将使用简单的小型DataSet。
但是,实时应用程序使用非常大量的数据。
客户要求的最终结果
MapReduce –地图功能(分割步骤)
MapReduce –地图功能(映射步骤)
MapReduce –随机播放功能(合并步骤)
MapReduce –随机播放功能(排序步骤)
MapReduce –减少功能(减少步骤)
带WordCount示例的MapReduce 3步骤过程
就是关于MapReduce算法和地图归约示例的全部内容。
现在该开始开发和测试MapReduce程序了。