一、MapReduce
1、分布式计算概念
概念:将该应用分解成许多小的部分,分配给多台计算机进行处理。可以节约整体计算时间,提高计算效率。
相对:集中式计算
2、MapRuce介绍
概念:是分布式计算框架,用于编写分布式应用程序,该程序可靠、容错处理大型硬件集群上的海量数据。是一种面向海量数据处理的一种指导思想,也是用于对大规模数据进行分布式计算的编程模型。易于使用和高度可拓展
起源:2004年谷歌的一篇论文
特点:易于编程:MapReduce框架提供了用于二次开发的接口,简单实现一些接口,就可以完成一个分布式程序。任务计算交给计算框架去处理,将分布式部署到Hadoop集群上运行,集群节点可以拓展到成百上千个等。
良好的拓展性:计算机资源得到不满足的时候,可以通过增加机器来扩展他的计算能力。
高容错性:Hadoop集群是分布式搭建和部署的,任何单一机器节点宕机了,可以把上面的计算转移到另一个节点上运行,不会影响整个任务完成。
适合海量数据的离线处理:可以处理GB、TB和PB级别的数据
局限性:实时计算性能差:主要应用于离线作业,无法做到秒级或者是亚秒级的数据响应。
不能进行流式计算:流式计算的特点是数据源源不断的计算,且数据是动态的;而MapReduce作为离线计算框架,主要是针对静态数据集,数据是不能动态变化的。
3、MapReduce实例进程
一个完整的MapReduce程序在分布式运行时有三类
1)MRAppMaster:负责整个MR程序的过程调度及状态协调。
2)MapTask: 负责Map阶段的整个数据处理流程。
3)ReduceTask:负责reduce阶段的整个数据处理流程。
4、阶段组成
1 个MapReduce 编程模型只能包含一个Map阶段和一个Reduce阶段,或者只有Map阶段
不能有诸多map阶段、多个reduce阶段的情景
如果业务逻辑非常复杂,只能多个MapReduce程序串行运行。
5、数据类型
整个MR程序中,数据都是以Key-value键值对的形式流传的
在实际业务中,需要考虑每个阶段的输入输出kv分别是什么
MR内置很多默认属性,比如排序、分组等,都是和数据的k有关,所以 极其重要。
6、官方示例
完整的MR程序=用户编写的代码+Hadoop自己实现的代码 ”+“=整合
用户负责map、reduce俩阶段业务问题,Hadoop负责底层所有的技术问题
企业中很小涉及到MR直接编程(因为慢),官方提供示例,展示MR及其内部执行程序,以及后面Spark背后也有MR。
1)计算pi值
2)WordCount
map阶段的核心:把输入的数据进行切割,全部标记1,输出格式<单词,1>
shuffle阶段的核心:经过MR程序内部自带默认的排序分组等功能,把key相同的单词作为一组数据构成新的kv对。((排序过程也叫key的字典序)
reduce阶段的核心:处理shuffle完的一组数据,该组数据就是该单词所有的键值对。对所有的1累加求和,就是单词的总次数。
在Web UI上显示的结果
3)执行过程:
map阶段:
1)第一阶段:把输入目录下文件按照一定标准逐个进行逻辑切片,形成切片规划
默认Split size =Block size(128M),每一个切片由一个MapTask处理(getSplits)
第二阶段:对切片中的数据按照一定的规则读取解析返回<key,value>对
默认是按行读取数据。key是每一行的起始位置偏移量,value是本行的文本内容(TextInputFormat)
第三阶段:调用Mapper类中的map方法处理数据
每读取解析出来的一个<key,value>,调用一次map方法
第四阶段:按照一定的规则对Map输出的键值对进行分区partition。默认不分区,因为只有一个reducetask(分区数量=reducetask数量)
第五阶段:Map数据输出数据写入内存缓冲区,达到比例溢出到磁盘上,溢出spill的时候根据key进行排序sort。默认根据key字典序排序。(为解决频繁的直接到磁盘导致性能下降,设置的缓冲区)
第六阶段:对所有溢出文件进行最终的merge合并,成为一个文件。
reduce阶段:
第一阶段(copy):RuduceTask会主动从MapTask复制拉取属于需要自己处理的数据(主动拉取 +copy)
第二阶段(merge+sort):拉取的数据,全合并merge(即将分散的数据合并成一个大的数据,在对合并后的数据排序)
第三阶段:对排序后的键值对,调用reduce方法。键相等的键值对调用一次reduce方法。最后把这些输出的键值对写入到HDFS文件中。
7、Shuffle机制
shuffle:将map端的无规则输出按照指定的规则“打乱”成具有一定规则的数据,以便reduce端接收处理。一般把从map产生输出开始到Reduce取得数据作为输入之前的过程成为shuffle。
弊端:慢,因为频繁涉及到数据在内存、磁盘之间的多次往复。
二、YARN
1、yarn介绍
简介:是一种新的Hadoop资源管理器(资源协调者),通用资源管理系统和调度平台,可以为上层应用提供统一的资源管理和调度。在为集群的利用率、资源统一管理和数据共享等方面带来了巨大好处。
概述:
功能:资源管理系统:集群的硬件资源,和程序运行相关,比如内存、cpu等
调度平台:多个程序同时申请计算资源如何分配,调度的规则(算法)
通用:不仅支持MR,理论上也支持各种计算程序。
2、框架、组件
3大组件:
ResourceManager(RM):yarn集群中主角色,决定系统中所有应用程序之间资源分配的最终权限,及最终仲裁者。
NodeManager(NM):yarn中的从角色,一天机器上一个,负责管理本机器上的计算机资源
根据RM命令,启动Container容器、监视容器的资源使用情况。并且向RM主角色汇报资源使用情况。
ApplicationMaster(AM):用户提交的每个应用程序均包含一个AM。(应用程序内的“老大”),负责程序内部各阶段的资源申请,监督程序的执行情况。
3、程序提交yarn流程
1)核心交互流程
2)整体概述
用户向yarn提交应用程序后,yarn将分俩个阶段运行该应用程序
第一阶段:客户端申请资源启动运行本次程序的ApplicationMaster;
第二阶段:由ApplicationMater根据本次程序内部具体情况,为其申请资源,并监控他的整个运行过程,直到运行完成。
3)MR提交YARN交互流程
第一步:用户通过客户端向yarn中ResourceManager提交应用程序(比如Hadoop jar提交MR程序)
第二步:ResourceManager为该应用程序分配第一个Container(容器),并与之对应NodeManager通信,要求它在这个Container中启动这个应用程序的ApplicationMaster。
第三步:ApplicationMaster启动成功后,向RM注册并保持通信,用户可以通过RM查看运行状态(处理进度%)
第四步:AM为本次程序内部的各个Task任务向RM申请资源,并监控它的运行状态。
第五步:AM申请到资源后,对NM通信,要求启动任务。
第六步:NM为任务设置好运行环境后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
第七步:各个任务通过RPC协议向AM汇报进度和状态,让AM随时掌握各个任务情况,以便于重新启动任务,用户可以通过AM查看任务状态。
第八步:任务完成后,AM向RM注销并关闭自己。
4、yarn资源调度器Scheduler
资源有限,在繁忙的集群上,根据一些定义的策略为应用程序分配资源
1)三种调度器:
FIFO Scheduler :先进先出 无需配置 易于执行
缺点:优先级不会变高,高优先级的作业需要等待,不适合共享集群。
Capacity Scheduler: Hadoop3.x默认调度策略,允许多个组织共享整个集群资源,通过为每个组织分配专门的队列,然后在为每个队列分配一定的集群资源。
优点:层次化的队列设计、容量保证、安全、弹性分配
Fair Scheduler:公平调度,公平的共享大型集群中资源(以下不是各1/3)
优点:分层队列,按层级机构划分资源;基于用户或组的队列映射;资源抢占,根据应用配置,抢占和分配资源,默认不启动资源抢占。
特点:保证最小配额、允许资源共享、默认不限制每个队列和用户可以同时运行应用的数量。