Hadoop之Map-Reduce

来源:互联网 发布:挪威的森林知乎 编辑:程序博客网 时间:2024/06/05 22:32

连续发3篇hadoop的文章,还真的有点累,但是在发表过程中又对其原理又有了比较清晰的了解了.感觉还是不错的。
Hadoop的第二大框架Map-Reduce,即分布式处理框架.总的来说它是对HDFS的具体实现。
术语:

PayLoad - 应用程序实现映射和减少功能,形成工作的核心。Mapper - 映射器的输入键/值对映射到一组中间键/值对。NamedNode - 节点管理Hadoop分布式文件系统(HDFS)。DataNode - 节点数据呈现在任何处理发生之前。MasterNode - 节点所在JobTracker运行并接受来自客户端作业请求。SlaveNode - 节点所在Map和Reduce程序运行。JobTracker - 调度作业并跟踪作业分配给任务跟踪器。Task Tracker - 跟踪任务和报告状态的JobTracker。Job -程序在整个数据集映射器和减速的执行。Task - 一个映射程序的执行或对数据的一个片段的减速器。Task Attempt - 一种尝试的特定实例在SlaveNode执行任务。

1:Map-Reduce原理:*

把大文件分成很多个块,每一个块分别放在不同的节点上的做一个map函数,可以被jobtracker分配到各个节点上运行对分在机子上的数据进行mapmapper对原始数据进行抽取,在本地数据进行抽取因此把比较大的工作进行分解成小工作,处理完之后再将结果融合。

由字面的意思就可以猜测到,此框架至少分2步,即mapper和reducer。

mapping阶段:定义一个数据处理函数mapper,该阶段MapReduce获取获取输入数据并将数据装入mapper。
Map-reduce的思想是”分而治之”

      Mapper负责"分",即把复杂的任务分解成为若干个"简单的任务"执行。      "简单任务"有几个含义:1数据或计算规模相对于原任务要大大的缩小;2:就近计算,即会被分配到存放了所需数据节点进行计算;3:这些小任务可以并行进行计算,彼此间激活没有依赖关系。

Reducing阶段:定义一个数据处理函数reducer,处理来自mapper的所有输出,并给出最终结果。

      Reducer的数码自由mapred-site配置文件的项目mapred.reduce.tasks决定,缺省值为1,用户可以覆盖之

当然,除了这两个阶段,MapReduce还包括data splitting(数据分割),shuffing(洗牌),partioning(分组),conbining(合并)。
2:MapReduce的体系结构
这里写图片描述
这里写图片描述
描述:客户端提交任务(Job)给主节点JobTracker后,Job进入JobTracker中的候选队列,由JobTracker进行调度Job任务并拆分为Map任务和Reduce任务。集群先执行Map任务,由多个TaskTracker并发运行,当每个TaskTracker执行自己分配的任务过程中,向JobTracker提交更新信息,当所有的TaskTracker完成任务后,紧接着集群执行Reduce任务。
3:Map-Reduce工作机制的剖析

a:编写好Map-Reduce的程序,在一个client节点里面对程序的提交    提交可以在集群中的任意一个节点进行b:jobclient收到作业之后,会和jobtracker联系,申请一个作业id,用来加入作业队列c:通过hdfs文件系统,把作业代码散发出去,到各个节点上去d:提交作业e:在jobtracker上初始化一系列操作,例如在它内存中建立数据结构记录情况f:jobtracker会向namenode询问有关的数据在那些文件上面g:通过jobtracker和tasktracker每三秒进行的心跳联系,tasktracker可以参与进来,在tasktracker很繁忙的时候不建议提交作业h:确定哪些tasktracer参与到计算中来i:tasktracer会从hdfs系统中取出java代码,之后它开始架设java的虚拟机,进行作业的工作 通过图的形式比较清楚:

这里写图片描述
这里写图片描述
文字描述:在Map端,每个TaskTracker节点从DataNode中接收到需要的数据块后信息,执行Map任务,Map任务完成后,得到一个中间结果存到本地磁盘中,形式为键值对,通过给定规则将中间结果信息进行洗牌阶段(shuffing)得到的信息传入Reduce端,执行完Reduce任务后得到最终结果存放到HDFS文件系统中去。
4:性能调优:
究竟需要多少个reducer
输入:大文件优于小文件
减少网络传输:压缩map的输出
优化每个节点能运行的任务数mapred.tasktracker.map.tasks.maximum和mapred.tasktracker.reduces.tasks.maximum(缺省值均为2)

5.MapReduce的容错机制

Hadoop执行MapReduce程序任务难免会出现故障问题,MapReduce框架提供了两种容错机制。

(1)重复执行:MapReduce程序任务出现错误后,重复执行,4次后还是失败,则放弃该任务。

(2)推测执行:当Map端有物理节点TaskTracker出现异常情况,将会启动一个新的TaskTracker节点执行同样的Map任务,新旧同时运行相同任务,谁先完成就放弃掉另一个,这就保证了Map端任务的正常完成,就可以进入到Reduce端任务的处理。

0 0