Apache Hadoop 2.1.0-beta将要发布
我在半年前发表的博文“Apache Hadoop 2.0.3-alpha发布了”,介绍了Hadoop 2.0新增的特性。(http://dongxicheng.org/mapreduce-nextgen/apache-hadoop-2-0-3-published/)
今天,Apache Hadoop 2.1.0-beta即将发布了,在Hadoop SVN(http://svn.apache.org/repos/asf/hadoop/common/branches/)上已经出现了该版本的分支,且今生几个未解决的bug尚未修复。2.1.0-beta一旦发布,稳定版的发布则为时不晚了。
本文将介绍2.1.0-beta版本引入的新特性,总结起来,主要有以下几个特性:
- 通信协议规范化
由于alpha版本中的通信协议命名不规范,在beta版本中对所有协议进行了重命名,主要如下:
在alpha版本中,不同服务间的协议名称如下:
- Client与RM之间:ClientRMProtocol
- RM与管理员之间:RMAdminProtocol
- AM与RM之间:AMRMProtocol
- AM与NM之间:ContainerManager
- RM与NM之间:ResourceTracker
在beta版中,协议重命名如下:
- ClientRMProtocol –> ApplicationClientProtocol
- RMAdminProtocol –> ResourceManagerAdministrationProtocol
- AMRMProtocol –> ApplicationMasterProtocol
- ContainerManager –> ContainerManagementProtocol
ResourceTracker未变,这个本来要改为ResourceTrackerProtocol的,不知最后为啥没修改。
相关jira链接:
https://issues.apache.org/jira/browse/YARN-387
- 编程接口稳定。
我们知道,如果将一个应用程序运行在YARN上,需要设计一个clinett和一个applicationMaster,这需要用到ApplicationClientProtocol、ApplicationMasterProtocol和ContainerManagementProtocol三个RPC协议,在alpha版本中,这些协议中的RPC函数定义并不稳定,在beta版中进行了重构和修改,并变得稳定,以后不再修改,这意味着beta版发布后,用户可以在YARN上编写应用程序了。
此外,为了用户编写应用程序方面,yarn提供了三个编程库,用户无需直接使用上述三个RPC协议,而只需使用这三个编程库,分别如下:
在包org.apache.hadoop.yarn.client.api中,
- AMRMClient:AM与RM交互的编程库
- NMClient:AM与NM交互的编程库
- YarnClient:Client与RM交互的编程库,
截至目前,YARN中自带的ApplicationMaster实现,包括两个example(distributedshell和unmanaged AM)和MRAppMaster(MapReduce ApplicationMaster)均已经重构为使用以上编程库实现。
相关jira链接:
- https://issues.apache.org/jira/browse/YARN-422
- https://issues.apache.org/jira/browse/YARN-103
- https://issues.apache.org/jira/browse/YARN-29
- 资源调度器完善。
Beta版对Fair Scheduler和Capacity Scheduler两种调度器的功能进行了完善,包括支持层级队列组织方式、支持资源抢占和支持多类别资源调度等,具体我已经在文章“Hadoop 新特性、改进、优化和Bug分析系列4:YARN-326, YARN-2”、“Hadoop 新特性、改进、优化和Bug分析系列5:YARN-3”和“Hadoop 新特性、改进、优化和Bug分析系列2:YARN-45”中进行了介绍。
相关jira链接:
- https://issues.apache.org/jira/browse/YARN-45
- https://issues.apache.org/jira/browse/YARN-187(让FS支持层级队列组织方式)
- https://issues.apache.org/jira/browse/MAPREDUCE-824(让CS支持层级队列组织方式)
- https://issues.apache.org/jira/browse/YARN-569(让CS支持抢占)
- https://issues.apache.org/jira/browse/YARN-326 (让FS支持多类别资源调度)
- https://issues.apache.org/jira/browse/YARN-2 (让CS支持多类别资源调度)
- https://issues.apache.org/jira/browse/YARN-3
目前beta版本尚未解决的问题主要有两个:
- ResourceManager HA
MRv1的JobTracker HA问题很长时间没有解决,但最近的CDH版本已经给出了解决方法,具体可参考我的这篇文章“CDH中JobTracker HA解决方案”(http://dongxicheng.org/mapreduce/cdh4-jobtracker-ha/),后来CDH将相关的HA基础库共享给了Apache,目前beta版的基本库中已经内嵌了HA基础库,目前正在实现一个基于zookeeper的RMStateStore,基于该实现,ResourceManager的HA方案将为其不远。
相关jira链接:
- https://issues.apache.org/jira/browse/YARN-149
- https://issues.apache.org/jira/browse/YARN-128
- https://issues.apache.org/jira/browse/YARN-353
- 通用JobHistoryServer实现
历史应用程序服务器是一个非常有用的组件,它能独立运行在一台机器上,供用户查询历史应用程序的所有信息。目前只有MapReduce On YARN有自己的jobHistoryServer实现,而没有一套通用的历史应用程序服务器。YARN正在实现该组件。
相关jira链接:https://issues.apache.org/jira/browse/YARN-321
总结
Beta目前尚未发布,但为期不远,beta版本的发布意味着稳定版指日可待,届时很多公司将向下一代Hadoop迁移。下一代Hadoop带来了巨大的好处,包括多样化的框架支持(MR、Tez、Spark、Storm等)、统一的框架管理、更高的资源利用率等。
说点什么