一.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的工作流程

  • input
MapReduce需要把要执行的大文件数据进行切割(split)
每一个输入分片(input split)对应一个map任务
输入分片(input split)存储的并非数据本身而是一个分片长度和一个记录数据位置的数组
输入分片(input split)和HDFS(hadoop2.0之后)的block(块)关系很密切,HDFS(hadoop2.0之后)的block块的大小默认是128M,如果我们执行的大文件是128x10M,MapReduce会分为10个map任务,每个map任务都存在于它所要计算的block(块)的DataNode上
  • map
程序员编写的map函数
因此map函数效率相对好控制
而且一般map操作都是本地化操作也就是在数据存储节点上进行
  • shuffle
负责将map生成的数据传递给reduce
因此shuffle分为在map的执行过程和在reduce的执行过程
  • reduce
负责shuffle传递过来的数据进行合并
  • output
最后负责输出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是主节点上负责监控资源与资源分配
 
 
补充:
combiner
如果指定了Combiner,可能在两个地方被调用:
1.当为作业设置Combiner类后,缓存溢出线程将缓存存放到磁盘时,就会调用;
2.缓存溢出的数量超过mapreduce.map.combine.minspills(默认3)时,在缓存溢出文件合并的时候会调用
combiner可以在输入上反复运行,但并不影响最终结果。它的本质也是一个Reducer。其目的是对将要写入到磁盘上的文件先进行一次处理,这样使得map输出结果更加紧凑,减少写到磁盘的数据。如果只有1或2个溢出写文件,那么由于map输出规模减少,因此不会为该map输出再次运行combiner。
适用于汇总操作
数据块:Block是HDFS物理上把数据分成一块一块
数据切片:是逻辑上对输入进行分片,并不会在磁盘上将其切分成片进行存储

 

posted on 2020-08-22 10:25  尧啊尧  阅读(185)  评论(0)    收藏  举报