MapReduce笔记(架构及工作原理)
2014-10-27 10:04
246 查看
Mapreduce架构:
JobTracker:
•Master
•管理所有作业
•将作业分解成一系列任务
•将任务指派给TaskTracker
•作业/任务监控、错误处理等
TaskTracker:
•Slave
•运行Map Task和Reduce Task
•与JobTracker交互,执行命令,并汇报任务状态
MapTask:
•Map引擎
•解析每条数据记录,传递给用户编写的map()
•将map()输出数据写入本地磁盘(如果是map-only作业,则直接写入HDFS)
ReduceTask:
•Reduce引擎
•从Map Task上远程读取输入数据
•对数据排序
•将数据按照分组传递给用户编写的reduce()
Client:
提交Mapreduce作业
输出任务的进度报告
MapReduce容错性
JobTracker 单点故障,一旦出现故障,整个集群不可用
TaskTracker
周期性向JobTracker汇报心跳
一旦出现故障,上面所有任务将被调度到其他节点上
MapTask/ReduceTask
运行失败后,将被调度到其他节点上重新执行
Mapreduce工作流程
1、作业的提交:jobclient的runJob()方法新建JobClient实例并调用submitJob()。将运行作业所需资源复制到一个以作业ID命名的目录下。2、作业的初始化:JobTracker把此调用加入一个内部队列,交由作业调度器(job scheduler)进行调度,并对其初始化。调度器创建对应的map任务和reduce任务。
3、任务的分配:map任务数据的本地化
4、任务执行:jar的本地化、应用程序所需文件从分布式缓存复制到本地,taskTrack新建一个TaskRunner实例来运行该任务。TaskRunner启动新的JVM来运行(根据配置,也可能会JVM重用)
MapReduce编程模型(以WordCount为例)
1、split是MapReduce中最小的计算单元,默认与Block一一对应,也可配置。
2、InputFormat对输入数据格式解析,其中InputSplit对文件进行分片,处理跨行问题,使行数据完整。将分片数据解析成key/value对
默认实现是TextInputFormat(每一行数据解析成一个key value)。
3、Partitioner::把Mapper输出的每行数据分桶,决定输出的每条数据交给那个Reduce Task处理
默认实现:hash(key) mod R ,R是Reduce Task数目
允许用户自定义 , 比如"hash(hostname(URL)) mod R" 确保相同域名的网页交给同一个Reduce Task处理
4、Combiner:Combiner是一个local Reducer ,通常和Reducer逻辑一样,所以可以直接使用reducer,不用在编写 ,在partitioner之前运行。好处:减少Map
Task输出数据量(磁盘IO);减少Reduce-Map网络传输数据量(网络IO)。
5、shuffle和排序:每个map会输出n片数据,reduce从每个map中读取它对应的那篇数据并全排序叫shuffle。
map函数产生输出时,先缓冲到内存,并预排序,默认情况下这个缓冲区的大小为100M,可通过io.sort.mb属性来调整。一旦缓冲区内容达到阀值(io.sort.spill.percent,默认为0.80或80%),一个后台线程便开始把内容写到(spill)磁盘中。
在写磁盘之前,根据要传送的reducer对数据进行分区(partitioner),在每个分区中,后台线程按键进行内排序,如果有combiner,它会在排序后的输出上运行。
一旦内存区达到溢出的阀值,就会新建一个溢出文件,如此,就会有很多溢出文件在任务完成之前需要合并成一个已分区已排序的文件,配置属性io.sort.factor控制一次最多能合并多少流,默认值为10,实际环境中可以提高此值。
在reducer端,复制线程并行复制map的输出(mapred.reduce.parallel.copies设置复制的线程数,默认为5)。
如果map输出相当小,则会复制到reduce tasktrack的内存(缓存区大小由mapred.job.shuffle.input.buffer.percent控制,指定用于次用途的堆空间百分比)。
在复制map输出期间,reduce任务进入排序阶段,这个阶段合并map输出,维持其排序顺序。合并时,合并因子io.sort.factor(设置每次可合并的文件数。
参考文章:
hadoop作业调优参数整理及原理:http://www.alidata.org/archives/1470
相关文章推荐
- hadoop学习笔记二_MapReduce应用场景、原理、基本架构
- 笔记:深入解析MapReduce架构设计与实现原理 第3章 MapReduce编程模型
- 云计算学习笔记005---Hadoop HDFS和MapReduce 架构浅析
- 笔记:深入解析MapReduce架构设计与实现原理 第4章 RPC框架解析
- Hadoop1.0 MapReduce工作原理 与 Hadoop 2.x Yarn 设计理验与基本架构理解
- 大数据生态系统基础:Hadoop(七):Hadoop MapReduce 工作原理和 YARN架构
- 笔记:深入解析MapReduce架构设计与实现原理 第2章 MapReduce设计理念和基本架构
- Hadoop学习笔记-MapReduce工作原理
- 笔记:深入解析MapReduce架构设计与实现原理 第6章 JobTracker 内部实现
- Hadoop学习笔记(5)———Mapreduce工作原理
- 笔记:深入解析MapReduce架构设计与实现原理 第5章 Job提交与初始化
- 《Windows 64位架构及其开发》学习笔记
- SQL Server 2005 学习笔记--SSIS篇(3架构)
- HTML 4.0 语法教学 [笔记1] [网页架构]
- 写得蛮好的linux学习笔记一-目录架构(收藏)
- 从需求向架构过渡的系统方法 会议笔记
- Linux电源管理研究笔记—acpid工作原理
- oracle 的面向服务的基础架构(SOA)研讨会(济南) 的一点笔记
- 写得蛮好的linux学习笔记(linux目录架构)
- 孙鑫vc++ 第六课 笔记 菜单的工作原理及编写应用