
Hadoop核心由HDFS和MapReduce组成,HDFS负责分布式存储,MapReduce负责分布式计算。
MapReduce最早是由Google研究提出的一种面向数据处理的并行计算模型和方式,其本意主要是为了解决搜索引擎中网页数据的并行化处理。由于MapReduce可以普遍应用于很多数据的假设难题,Google进一步将其广泛应用于很多数据处理问题。到当前为止,Google有上万个各种不同的硬件问题和流程都使用MapReduce进行处理。在Google的期刊中最初的关于MR的描写和编程模型如图所示。



在Hadoop生态中,MapReduce是建立在分布式文件系统之上,对存储在分布式文件系统中的数据进行分布式计算。正如其名称一样,MR的假设过程分为Map阶段和Reduce阶段,在英文中常常将其翻译为映射和规约。MR的构架在V1.x和V2.x差别较大,但基本都有Client、JobTracker、TaskTracker等主要部件,典型架构如图所示。


(1)Client
用户编写的MapReduce程序通过Client提交到JobTracker端;同时,用户可通过Client提供的一些接口查看作业运行状况。在Hadoop内部用“作业”(Job)认为MapReduce程序。一个MapReduce程序可对应若干个作业,而每位作业会被溶解成若干个Map/Reduce任务(Task)。
(2)JobTracker

JobTracker主要负责资源监控和作业调度。JobTracker监控一切TaskTracker与作业的健康状况分布式计算架构,一旦发现失败现象后,其会将相应的任务转移到这些结点;同时JobTracker会追踪任务的执行进度、资源应用量等,并将它们资料告诉给任务调度器(Task Scheduler)分布式计算架构,而T调度器会在资源出现空闲时,选择恰当的任务使用这种资源。在Hadoop中,任务调度器是一个可插拔的系统,用户可以按照自己的才能设计相应的Scheduler。
(3)TaskTracker
TaskTracker会周期性地通过Heartbeat将本结点上资源的应用状况和任务的运行进度汇报给JobTracker,同样接收JobTracker发送回来的指示并执行对应操作(如启动新任务、杀手任务等)。TaskTracker使用“slot”等量划分本结点上的资源量。“slot”代表计算资源(CPU、硬盘等)。一个Task获取到一个slot后才有良机运行,而Hadoop调度器的效果就是将各个TaskTracker上的闲暇slot分配给Task使用。slot分为Map slot和Reduce slot两种,分别供Map Task和Reduce Task使用。TaskTracker通过slot数目(可配置参数)限定Task的并发度。

(4)Task
Task分为Map Task和Reduce Task两种,均由TaskTracker启动。我们明白,HDFS以固定形状的block为完全单位存储数据,而对于MapReduce而言,其处理单位是split。split是一个逻辑概念,它只包括一些元,譬如数据起始位置、数据宽度、数据所在结点等。它的划分方式完全由用户自己决定。但需要注意的是,split的什么决定Map Task的数量,因为每位split会交由一个Map Task处理。
MapReduce计算任务执行的主要步骤如图所示,Map过程将输入的函数对按照业务需求转换成新方式的函数对输出,Reduce过程对Map阶段输出的函数对页面进行规约整理,得到最终的输出结果。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-118688-1.html
居然在非正规渠道买产品