一.MapReduce简介
MapReduce是一个分布式运算程序的编程框架,它的核心功能是将用户编写的业务逻辑和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个hadoop集群上。引入MapReduce框架后,开发人员可以将绝大部分工作集中在业务逻辑的开发商,而将分布式计算的复杂性交由框架来处理。
Hadoop的四大组件
1.HDFS:分布式存储系统
2.MapReduce:分布式计算系统
3.YARN:hadoop资源调度系统
4.Common:以上三大组件的底层支撑组件,主要提供基础工具包和RPC框架等
MapReduce的优点
1.易于编程
2.良好的扩展性
3.高容错性
4.适合TB级别以上的大数据的分布式离线批处理
MapReduce的缺点
1.难以实时计算(MapReduce处理的是存储在本地磁盘上的离线数据)
2.不能流式计算(MapReduce处理的数据源是静态的)
二.MapReudce的工作流程
MapReduce需要把要执行的大
文件数据进行切割(split)
每
一个输入分片(input split)对应
一个map任务
输入分片(input split)存储的并非数据本身而是
一个分片长度和
一个记录数据位置的数组
输入分片(input split)和HDFS(hadoop2.0之后)的block(块)关系很密切,HDFS(hadoop2.0之后)的block块的大小
默认是128M,如果我们执行的大
文件是128x10M,MapReduce会分为10个map任务,每个map任务都存在于它所要计算的block(块)的D
atanode上
程序员编写的map
函数
因此map
函数效率相对好控制
而且一般map操作都是本地化操作也就是在数据存储节点上进行
负责将map
生成的数据传递给reduce
因此shuffle分为在map的执行过程和在reduce的执行过程
负责shuffle传递过来的数据进行合并
最后负责
输出reduce中的数据信息
三.yarn
主要
包括三大类
ResourceManager NodeManager ApplicationMaster
ResourceManager:
启动和管理各个应用的ApplicationMaster,并且为ApplicationMaster申请第
一个Container用于启动和在它运行失败时将它重新启动。
管理NodeManager,接收来自NodeManager的资源和节点健康情况汇报,并向NodeManager下达管理资源命令,例如kill掉某个container。
主要
包括
ApplicationManager用于容错
ResourceSchedualer用于数据的调度
NodeManager:
管理Hadoop集群中单个计算节点,
功能包括与ResourceManager保持通信,管理Container的生命周期,监控每个Container的资源使用,追踪节点健康状况
同时NodeManager作为yarn中单个节点的代理,它需要与应用程序的ApplicationMaster和集权管理者ResourceManager交互;它从ApplicationMaster上接收有关Container的命令并执行
ResourceManager和NodeManager是应用于mapper里的,AppMaster是用于reducer里的,作用是对分组过后的数据进行收集
补充:
combiner
如果指定了Combiner,可能在两个地方被
调用:
1.当为作业设置Combiner类后,缓存溢出线程将缓存存放到磁盘时,就会
调用;
2.缓存溢出的
数量超过mapreduce.map.combine.minspills(
默认3)时,在缓存溢出
文件合并的时候会
调用
combiner可以在输入上反复运行,但并不影响最终结果。它的本质也是
一个Reducer。其目的是对将要写入到磁盘上的
文件先进行一次处理,这样使得map
输出结果更加紧凑,减少写到磁盘的数据。如果只有1或2个溢出写
文件,那么由于map
输出规模减少,因此不会为该map
输出再次运行combiner。
适用于汇总操作
数据块:Block是HDFS物理上把数据分成一块一块
数据切片:是逻辑上对输入进行分片,并不会在磁盘上将其切分成片进行存储
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。