1、Hadoop的改进
Hadoop 1.0到2.0的改进分为MapReduce和HDFS架构的演进。另一方面,不断加入kafka,spark,pig,tez等新的组件。
Hadoop2.0 针对HDFS涉及了HDFS HA,提供名称节点的热备份;
设计了HDFS Federation管理多个命名空间;
涉及了新的资源管理框架YEAR。
2、HDFS HA解决单点故障问题
HA集群设置两个名称节点,Active和Standby状态,一旦活跃状态出现故障,可以切换到到Standby备用节点。Zookeeper确保只有一个名称节点对外服务,名称节点维护映射信息,数据节点同时向两个名称节点汇报信息。
名称节点共享存储系统来同步状态。
3、HDFS Federation
因为HDFS 2.0中,名称节点的集群,使得HDFS的命名空间可以水平扩展,这些名称节点分别进行各自的命名空间和块的管理,相互之间是联盟Federation的关系,不需要彼此协调。HDFS Federation中,所有的名称节点共享底层数据节点,数据节点向所有的名称节点汇报。
属于同一个命名空间的块构成了一个块池。
4、HDFS Federation的访问
对于多个命名空间,可以采用客户端挂载表方式进行数据的共享访问。客户端访问不同的挂载点来访问不同的命名空间。
Federation使得HDFS集群可以更方便的扩展,并且名称节点的管理更高效,提供良好的隔离性;但是不能解决单点故障问题。
5、YARN框架
MapReduce 1.0缺陷:
1)单点故障;
2)JobTracker任务过重,任务多时内存开销大,上线4000节点,多了出现故障概率大;
3)容易出现内存溢出,分配资源只考虑MapReduce任务数,不考虑CPU和内存
4)资源划分不合理,强制划分slot.
6、YARN体系结构
ResourceManager:处理客户端请求;启动/监控ApplicationMaster;监控NodeManager;资源划分和调度
NodeManager:单个节点上的资源管理;处理来自ResourceManager的命令;处理来自ApplicationManager的命令;
ApplicationMaster:为应用程序申请资源,并分配给内部任务;任务调度、监控、容错 ;
ResourceManager是一个全局的资源管理器,负责整个系统的资源管理和分配,主要包括了调度器Scheduler和应用程序管理器Applications Manager。
Scheduler接收来自ApplicationMaster的应用程序资源请求,会把集群中的资源以容器的方式分配给申请的应用程序,容器的选择会考虑应用程序所需处理数据的位置,进行就近选择,实现计算向数据靠拢;
容器Container作为动态分配的资源单位,封装了一定的cpu、内存、磁盘等资源,从而限定每个应用程序的使用量;
调度器设计为可插拔组件,YARN不仅自身提供资源调度器,也允许用户自定义;
Applications Managerr负责集群中所有的应用程序的管理工作,主要包括应用程序提交,与资源调度器协商资源,启动ApplicationMaster,监控ApplicationMaster运行状态,并在失败时重启等。
ResourceManager接收用户提交的作业,按照作业上下文信息以及从NodeManager收集的容器状态信息,启动调度过程,为作业分配一个ApplicationMaster。
ApplicationMaster作用:
用户提交一个作业的时候,ApplicationMaster与ResourceManager协商获取资源,ResourceManager将资源以Container方式分配给ApplicationMaster;
ApplicationMaster把获得的资源进一步分配格内部各个任务,实现资源的二次分配;
与NodeManager保持通信,进行应用程序的启动、运行、监控和停止,监控申请到的资源使用情况,对所有任务的执行进度、任务状态进行监控,并在任务失败时重新执行;
定时向ResourceManager发送消息,报告资源的使用情况和应用的进度信息;
作业完成时,向ResourceManager注销容器,回收资源。
NodeManager作用:
NodeManager是驻留在YARN集群中每个节点上的代理,主要负责:
容器生命周期管理。
监控每个容器的资源使用情况;
跟踪节点的健康状态
心跳方式与ResourceManager保持通信;
向ResourceManager汇报作业的资源只用情况和每个容器的状态
接收来自ApplicationMaster的启动/停止容器请求。
需要注意的是:NodeManager只处理与容器相关的事情,不具体负责作业的状态管理,ApplicationMaster处理作业相关的管理。
7、YARN工作流程
1)用户编写客户端应用程序,向YARN提交应用程序,提交的内容包括ApplicationMaster程序,启动ApplicationMaster命令,用户程序等;
2)YARN的ResourceManager接收来自客户端的请求,为应用程序分配一个容器,在该容器中启动一个ApplicationMaster。
3)ApplicationMaster被创建后,向ResourceManager注册
4)ApplicationMaster轮询的方式向ResourceManager申请资源
5)ResourceManager以容器的形式分配资源给ApplicationMaster;
6)在容器中启动任务
7)各个任务向ApplicationMaster汇报状态和进度
8)应用程序完成后,ApplicationMaster向ResourceManager的Applications Manager注销并关闭自己。
8、YRAN的目的是一个集群多个框架