我在Hackbright的导师期间,被要求向技术背景有限的学生解释MapReduce算法,所以我想出了一个有趣的例子来说明它是如何工作的。示例MapReduce算法您想要计算一副纸牌中有多少张黑桃。直观的方法是一张一张检查,数一数有多少张是黑桃。MapReduce的方法是:1.把一副牌分发给所有在场的玩家2.让每个玩家数一数自己手上有多少张是黑桃,然后把这个数报告给你3.你告诉所有的玩家把数并得出最佳结论。MapReduce算法背景2004年,Google发布了可以分析大量数据的MapReduce算法。每当您听到“大数据”一词时,它指的是对于单个机器来说太大而无法有效存储或分析的问题。MapReduce可以通过将计算量分配到不同的计算机组来解决大部分与大数据相关的分析问题。Hadoop提供了使用MapReduce算法管理大数据的最佳开源方式。今天MapReduce是主流。所以一般来说,每当你听到“大数据”时,这可能意味着Hadoop被用来存储数据,而且通常意味着数据是使用MapReduce提取和检索的。拆分MapReduce算法MapReduce结合了两个经典功能:映射对集合中的每个目标应用相同的操作。也就是说,如果要将表格中的每个单元格乘以2,那么将这个函数单独应用于每个单元格的操作就属于映射。减少(Reducing)迭代集合中的元素以返回综合结果。即输出表格中一列数字之和的任务属于归约。重新审视上面的MapReduce算法示例重新审视我们原来的散点卡示例,我们有了MapReduce数据分析的基本方法。友情提示:这不是一个严谨的例子。在这个例子中,人代表计算机,因为他们同时工作,所以他们是一个集群。在大多数实际应用中,我们假设数据已经在每台计算机上——也就是说,分发卡片不是MapReduce步骤。(实际上,文件在计算机集群中的存储方式是Hadoop的核心。)通过将卡片分发给多个玩家并让他们各自计数,您可以并行执行计算,因为每个玩家都在计数同时。这也使工作得以分散,因为处理同一问题的多个不同的人不需要知道他们的邻居在做什么。通过告诉每个人数数,你已经制定了检查每张卡片的任务。您不要求他们将黑桃牌递给您,而是要求他们将您想要的东西减少到一个数字。另一个有趣的情况是卡片分布的均匀程度。MapReduce假设数据是经过洗牌的——如果所有的黑桃都分配给一个人,他数牌的速度可能比其他人慢得多。只要有足够多的人,就可以很简单地提出更有趣的问题——比如“一副纸牌的平均值(二十一点算法)是多少”。你可以结合“所有牌的价值总和是多少”和“我们有多少张牌?”的问题得到答案。将此总和除以卡片数量以获得平均值。MapReduce算法总结MapReduce算法的机制比这复杂得多,但主要思想是一样的——通过分布式计算来分析大量数据。无论是Facebook、NASA,还是小型创业公司,MapReduce都是目前互联网级数据分析的主流方法。有趣的是,MapReduce在处理超过10PB的数据时往往会变慢,因此谷歌在今年的IO大会上报告说MapReduce对他们来说已经不够用了。
