摘要:MapReduce是Hadoop的又一核心模块,从MapReduce是什么,MapReduce能做什么以及MapReduce的工作机制三方面认识MapReduce。
关键词:Hadoop MapReduce 分布式处理
面对大数据,大数据的存储和处理,就好比一个人的左右手,显得尤为重要。Hadoop比较适合解决大数据问题,很大程度上依赖其大数据存储系统,即HDFS和大数据处理系统,即MapReduce。关于HDFS,可以参阅作者写的《Hadoop之HDFS》文章。而对于MapReduce,我们从如下三个问题来认识MapReduce。
问题一:MapReduce是什么?
问题二:MapReduce能做什么?
问题三:MapReduce工作机制?
对于第一个问题,我们引用Apache Foundation对MapReduce的介绍“Hadoop MapReduce is a software framework for easily writing applications which process vast amounts of data (multi-terabyte data-sets) in-parallel on large clusters (thousands of nodes) of commodity hardware in a reliable, fault-tolerant manner.”由此可知,Hadoop MapReduce是一个软件框架,基于该框架能够容易地编写应用程序,这些应用程序能够运行在由上千个商用机器组成的大集群上,并以一种可靠的,具有容错能力的方式并行地处理上TB级别的海量数据集。这个定义里面有着这些关键词,一是软件框架,二是并行处理,三是可靠且容错,四是大规模集群,五是海量数据集。因此,对于MapReduce,可以简洁地认为,它是一个软件框架,海量数据是它的“菜”,它在大规模集群上以一种可靠且容错的方式并行地“烹饪这道菜”。写到这里,作者由衷地感叹思想之伟大,分解之神奇,合并之巧妙。
认识了MapReduce 是什么,关于第二个问题,也就清晰了。MapReduce能做什么?简单地讲,可以做大数据处理。所谓大数据处理,即以价值为导向,对大数据加工、挖掘和优化等各种处理。
MapReduce擅长处理大数据,它为什么具有这种能力呢?这可由MapReduce的设计思想发觉。MapReduce的思想就是“分而治之”。Mapper负责“分”,即把复杂的任务分解为若干个“简单的任务”来处理。“简单的任务”包含三层含义:一是数据或计算的规模相对原任务要大大缩小;二是就近计算原则,即任务会分配到存放着所需数据的节点上进行计算;三是这些小任务可以并行计算,彼此间几乎没有依赖关系。Reducer负责对map阶段的结果进行汇总。至于需要多少个Reducer,用户可以根据具体问题,通过在mapred-site.xml配置文件里设置参数mapred.reduce.tasks的值,缺省值为1。
MapReduce是如何来处理大数据呢?用户可以通过编MapReduce应用程序来实现对大数据的操作。既然是用MapReduce程序处理大数据,那么MapReduce程序怎样工作呢?这就是第三个问题,即MapReduce的工作机制。
MapReduce的整个工作过程如上图所示,它包含如下4个独立的实体。
实体一:客户端,用来提交MapReduce作业。
实体二:jobtracker,用来协调作业的运行。
实体三:tasktracker,用来处理作业划分后的任务。
实体四:HDFS,用来在其它实体间共享作业文件。
通过审阅MapReduce工作流程图,可以看出MapReduce整个工作过程有序地包含如下工作环节。
环节一:作业的提交
环节二:作业的初始化
环节三:任务的分配
环节四:任务的执行
环节五:进程和状态的更新
环节六:作业的完成
关于每一个环节里具体做什么事情,可以参读《Hadoop权威指南》的第六章MapReduce工作机制的内容,下载见 。
对于用户来说,若是想使用MapReduce来处理大数据,就需要根据需求编写MapReduce应用程序。因而,如何利用MapReduce框架开发程序,是需要深入思考和不断实践的事情。
相关阅读:
Ubuntu 13.04上搭建Hadoop环境