Hadoop Mapreduce的局限性:JobTracker单点瓶颈;TaskTracker端;作业延迟高;编程框架不够灵活。
Mapreduce2的设计需求:可靠性;可用性;扩展性;向后兼容;演化;可预测延迟;集群利用率;支持除Mapreduce编程框架外的其他框架;支持受限和短期的服务。
Mapreduce2的主要设计思路是将JobTracker承担的两大任务块——集群资源管理和作业管理进行分离,其中分离出来的集群资源管理由全局的资源管理器管理,分离出来的作业管理由针对每个作业的应用主体管理。然偶TaskTracker演化成节点管理器。这样全局的资源管理器和局部的节点管理器就组成了数据计算框架,其中资源管理器将成为整个集群中资源最终分配者。
根据功能不同将资源管理器分为两个组件:调度器和应用管理器。调度器负责资源的分配,而不负责监控各个应用的执行情况和任务失败,应用失败或硬件失败时的重启任务。应用管理器负责接收作业,协商获取第一个资源容器用于执行应用的任务主题并为重启失败的应用主题分配容器。
节点管理器是每个节点的框架代理。它负责启动应用的容器,监控容器的资源使用,并把这些应用信息汇报给调度器。应用对应的应用主体负责通过协商从调度器处获取资源容器,并跟踪这些容器的状态和应用执行的情况。
集群的每个节点上都有一个节点管理器主要负责:
为应用启用调度器已分配给应用的容器;保证已启用的容器不会使用超过分配的资源量;
为task构建容器环境,包括二进制可执行文件,jars等;
为所在的节点提供一个管理本地存储资源的简单服务。
应用主体和应用一一对应的,主要职责有:
与调度器协商资源;
与节点管理器合作,在核实的容器中运行对应的组件task,并监控这些task执行;如果container出现故障,应用主体会重新向调度器申请其他资源;
计算应用程序所需的资源量,并转化成调度器可识别的协议信息包;
在应用主体出现故障后,应用管理器会负责重启它,但由应用主体自己从之前保存的应用程序执行状态中回复应用程序。
应用主体的组件:事件调度组件;容器分配组件;用户服务组件;任务监听组件;任务组件;容器启动组件;作业历史事件处理组件;作业组件。
系统资源的组织形式是将节点上的可用资源分割,每一份通过封装组织成系统的一个资源单元,即Container。资源容器的主要职责就是运行、保存或传输应用主体提交的作业或需要存储和传输数据。
应用主体通过适当的资源需求描述来申请资源容器;所有的资源请求应用程序容量和队列容量等的限制。为了高效的分配集群的资源容器,应用主体需要计算应用的资源需求,并且把这些需求封装到调度器能够识别的协议信息包中。Mapreduce2的资源来自同一的资源容器,应用主体可以申请所需数量的资源,它会根据应用限制,用户限制,队列限制和资源限制等来控制应用主体申请到的资源规模,从而保证集群资源不被浪费。
调度器收集所有正在运行应用程序的资源请求构建一个全局的资源分配计划。调度器会根据应用程序相关的约束和全局约束分配资源。调度器使用与容量调度类似的概念,采用容量保证作为基本的策略在多个竞争关系的应用程序间分配资源。调度器调度步骤:选择系统中“最低服务”的队列;从队列中选择拥有最高优先级的作业;满足被选出的作业的资源请求。
Mapreduce2只有一个接口用于应用主体向调度器请求资源。
调度器定期从节点管理器处收集已分配资源的使用信息。同事,调度器还会将已完成任务容器的状态设置为可用,以便有需求的应用申请使用。
应用提交步骤:用户提交作业到应用管理器;应用管理器接受应用提交;应用管理器同调度器协商获取运行应用主体所需的第一个资源容器,并执行应用主体;应用管理器将启动应用主体细节信息发还给用户,以便其监督应用的进度。
应用管理器负责启动系统中所有应用的应用主体并管理其生命周期。在启动应用主体之后,应用管理器通过应用主体定期发送的“心跳”来监督应用主体,保证其可用性,如果应用主体失败,就需要将其重启。
资源管理器中的应用管理器负责监控Mapreduce应用主体的执行情况。在应用主体发生失败之后,应用管理器仅重启应用主体,再由应用主体回复某个特定的Mapreduce作业。应用主体在恢复Mapreduce作业时,有三种方式可供选择:完成重启Mapreduce作业;重启未完成的Map和Reduce任务;向应用主体标明失败时正在运行的Map和Reduce任务,然后恢复作业执行。第一种方式的代价比较大,会重复工作;第二种方式效果较好,但仍可能重复Reduce任务的部分工作;第三种方式最为理想,从失败点直接重新开始,没有任何重复工作,但这种方式对系统的要求过高。在Mapreduce2中选择的了第二种恢复方式,具体实现方式是:应用管理器在监督MapReduce任务执行的同时记录日志,标明已完成的Map和Reduce任务;再恢复作业时,分析日志后重启未完成的任务即可。资源管理器在运行服务过程中,使用ZooKeeper保资源管理的状态,包括应用管理器进程情况、队列定义、资源分配情况、节点管理情况等信息。在资源管理器失败之后,由资源管理器根据自己的状态进行自我恢复。
Mapreduce2的优势:
分散了JobTracker的任务。
在Mapreduce2中应用主体是一个用户可自定制的部分,因此用户可以针对编程模型编写自己的应用主体程序。这样大大扩展了Mapreduce2的适用范围。
在资源管理器上适用ZooKeeper实现故障转移。当资源管理器故障时,备用资源管理器将根据保存在ZooKeeper中的集群状态快速启动。
集群资源同一组织成资源容器,无关资源类型,这样大大提高了集群资源的利用率。