Apache Hadoop YARN 是一种新的 Hadoop 资源管理器,前不久被提升为高层次的 Hadoop 子项目。InfoQ 有幸在 Hortonworks 与 YARN 的创始人和架构师 Arun Murthy 进行了讨论。
Hortonworks 前不久宣布,Apache Hadoop YARN(Yet Another Resource Negotiator,另一种资源协调者)已经成为ASF(Apache 软件基金会)Apache Hadoop 的子项目。
“Apache Hadoop YARN 和Hadoop Common(核心库)、Hadoop HDFS(存储)、Hadoop MapReduce(MapReduce 实现)一样,成为了Apache 软件基金会顶级项目 Apache Hadoop 的子项目。在此之前,YARN 只是 Hadoop MapReduce 项目的一部分。”
YARN 最初是为了修复 MapReduce 实现里的明显不足,并对可伸缩性(支持一万个节点和二十万个内核的集群)、可靠性和集群利用率进行了提升。
YARN 实现这些需求的方式是,把 Job Tracker 的两个主要功能(资源管理和作业调度 / 监控)分成了两个独立的服务程序——全局的资源管理(RM)和针对每个应用的应用 Master(AM),这样,一个应用要么是传统意义上的 MapReduce 任务,要么是任务的有向无环图(DAG)。
和 Hadoop 里的其他内容一样,YARN 的资源管理和执行框架都是按主 / 从范例实现的——节点管理器(NM)运行、监控每个节点,并向资源管理器报告资源的可用性状态,和 HDFS 的架构相比,最终为系统里所有应用分配资源的是资源管理器。
特定应用的执行由应用 Master 控制,AM 负责将一个应用分割成多个任务,并和资源管理器协调执行所需的资源。资源一旦分配好,应用 Master 就和节点管理器一起安排、执行、监控独立的应用任务。
YARN 驱动使用“应用提交客户端(Application Submission Clien)”将一个“应用”提交给 YARN 资源管理器。借助“ClientRMProtocol”,客户端先获取一个新的“应用 ID”,然后提交运行“应用”。应用提交的信息里,包含应用 Master 要启动的 Unix 进程信息。提交信息还描述了应用运行要使用的本地文件 /jar,执行需要的实际命令,以及各种 Unix 环境设置等。可以在这里查看编写YARN 驱动的详情。
需要注意的是,YARN 并不会改变MapReduce 编程模型,它只是应用开发人员使用的API。YARN 提供了一种新的资源管理模型和实现,用来执行MapReduce 任务。因此,在最简单的情况下,现有的MapReduce 应用仍然能照原样运行(需要重新编译),YARN 只不过能让开发人员更精确地指定执行参数。
另外,YARN 可用来创建新的框架和除MapReduce 之外的执行模型,可以同时利用Hadoop 集群的计算能力和丰富的数据存储模型,来解决具体的新问题。这些新的框架还可以利用YARN 的资源管理,提供新的应用管理器实现。此外,这种架构还允许多个应用管理器同时存在,共享同一个Hadoop 集群和驻留在集群上的数据。
InfoQ 有幸在 Hortonworks 和 YARN 的创始人和架构师 Arun Murthy 进行了讨论,谈论了 YARN 及其以后的发展方向:
InfoQ:到目前为止,Hadoop 在层数的限制上很与众不同,尤其和应用服务器相比。正因为“薄”,Hadoop 才执行得非常快。那增加一层(容器)会不会减慢 Hadoop 的执行速度?
Arun:我并不这么认为。YARN 只是把不同的功能移到了不同的服务里(或者是服务程序)……比如全局的集群资源管理现在完全是 ResourceManager 的功能,这个功能和应用的生命周期管理明显不同,应用生命周期管理现在则属于 ApplicationMaster 的范畴。
因此,服务和责任变得更加简单,也更容易伸缩了。
事实上,对运行在 YARN 里的 MapReduce 应用来说,性能已经有了显著提升,而且还能进行更多进一步的优化。在这里可以查看详细信息。
InfoQ:Hadoop 和 MapReduce 最强大的特性之一是它们很简单,分离了应用开发人员和框架支持之间的关注点。我在看 YARN API 的例子时,发现它们非常简单,但要求很好地理解一些系统组件。你担心不担心这种复杂性会让 YARN 不那么吸引人?
Arun:正如你所观察到的,我们非常尽力地让 YARN 系统本身(即资源管理器和节点管理器)保持简单。这显著提升了伸缩性和性能,我们模拟过一万个节点的集群。可以这么说,保持接口原生能让强大的技术社区写出高性能的应用。而且,YARN 本身的目标对象略有不同,尤其是和 MapReduce 应用的目标对象相比。我们期望 YARN 能有更多像 MapReduce 和 MPI 一样的简单 API,以便继续给最终用户提供简单的接口。
YARN 为应用开发人员提供了一套简单、功能齐全的 API,而 MapReduce 则为最终用户提供了简单的 API。
InfoQ:目前,为了更好地利用集群,Hadoop 实现推出了很多自定义的输入格式实现。YARN 对这种灵活性有限制么?
Arun:YARN 不会对 MapReduce 的执行造成任何影响。目前在 MapReduce 里实现的所有内容都能继续工作。
InfoQ:你打算给 C++ Mapper/Reducer 实现提供直接支持么?现在的 API 都以 Java 为中心,对重要的 C++ 计算来说,这迫使每个人都要使用 JNI,而这并不是最方便的方法。
Arun:我团队的路线图上还没明确的计划。反过来说,这倒是挺有趣的,不过早期已经有针对 C++ MR API 的实现了,像百度做的(请看这里和这里)。
我觉得,如果我们能把较多的社区吸引到 YARN 上来,我们就会看到更多的人参与进来,就有希望看到其他的替选方案。这是 YARN 的关键目标之一,即允许基于 YARN 系统的创新,而不用核心的 Hadoop 社区自己去交付各种可能的创新……
InfoQ:我了解到,YARN 还处于测试状态。什么时候能投入生产环境使用呢?
Arun:从我的角度来说,各种迹象都很乐观。我觉得在今年年底或明年年初,YARN 和包含 HDFS HA 的 hadoop-2.x 就能达到生产级别了。时间马上就要临近了,这很令人兴奋!尤其是我自己花了近两年的时间开发,YARN 才成型。
InfoQ:除了内存,你还打算引入哪些资源呢?什么时候引入?
Arun:很高兴你问这个问题!我已经给 YARN 做了一个补丁,添加了多资源的调度(如你所说,目前只是内存这一种资源)。
我很快就会提交!这个补丁允许调度内存和 CPU。之后,我们会添加更多的资源……比如磁盘或网络 I/O、GPU 等。
InfoQ:除了 MapReduce,你还打算把哪些框架加入 YARN?具体来说,有没有为 Apache Hama 添加应用管理器的计划?
Arun:好几个开源项目都要移植到 YARN,它们现在处于不同的阶段。关于 Hama,我相信 Hama 社区已经在主干上完成必要的工作了,能让 Hama 在 YARN 中运行( HAMA-431 ),我们应该很快就能看到一次发布!
前面已经说过,YARN 的目标是鼓励其他社区移植到 YARN 上,而不一定由我们自己去完成这些工作!
我相信,借 YARN 开放 Apache Hadoop 会驱动大数据 Hadoop 生态系统的进一步创新——YARN 会特别有吸引力,因为它具备以下主要优势:
- YARN 是和 HDFS 共同设计、共同开发、发布的。它能为各种应用开放 HDFS 上的所有数据(数百 PB)。
- YARN 是唯一的大规模、目标通用的资源管理框架,特别是它的主要目的是为 MapReduce 等大数据应用解决关键的数据拓扑问题。这能让应用更简单、更高效地处理 TB 和 PB 级别的数据。很高兴能针对这一点再谈谈。
- 由于 YARN 是 Hadoop 进行处理的得力部分(HDFS 负责存储,YARN 负责处理),它会出现在很多数据中心里,无处不在,并吸引着开发人员,成为核心、开源的平台。
- YARN 决定 Hadoop 的规模,也就是在成千上万个节点上高效工作——这是大数据的另一个关键需求。
- YARN 本身处理了非常棘手的问题,有资源管理(集群中的免费资源在哪里、我应该把资源分配给谁)、容错(哪些节点启动了,或者停止了等)和伸缩。这能让应用框架开发人员从细枝末节里解脱出来,只关注框架。本质上讲,这和 MapReduce 一样的,也就是说,MR 是最终用户的简单目标,但对应用框架开发人员来说却是重复的内容。
在开源世界里,使用 YARN 的有:
实时处理:
能替换的 MapReduce 的编程范式里,正在和 YARN 整合的有:
InfoQ:对 Hadoop 生态系统来说,Apache Hadoop YARN 有什么意义呢?
Arun:Hadoop 社区在很多方面都体现出, YARN 对 Hadoop 的开放所起到的作用超越了 MapReduce,我们也有信心为那些想基于 YARN 做项目的其他社区提供支持。
YARN 以前和 MapReduce 很像,完成了资源管理、集群管理、容错、调度等繁重的工作,能让目标社区只专注于应用的细节,包括 MPI、Apache Giraph、Apache Hama、Spark 等在内的这些目标社区都看到了其中的价值,正在与 YARN 进行集成。此外,YARN 会为目标社区开放整个 Hadoop 社区,允许他们访问已经存储在 HDFS 里的数据,对 Hadoop 和其他社区来说,这会是个双赢的局面。
关于受访者
Arun C. Murthy是 Apache 软件基金会 Apache Hadoop 的副总裁,Apache Hadoop PMC 的主席,自 2006 年 Hadoop 项目成立以来,就成为了 Hadoop 的全职贡献者。他也是 MapReduce 项目的领头人,专注于构建新一代的 MapReduce(YARN)。在联合创办 Hortonworks 以前,Arun 曾在 Yahoo! 负责部署在四万两千多台服务器上的所有 MapReduce 代码和配置。实际就是在 Yahoo! 负责将 Apache Hadoop 的 MapReduce 作为一个服务运行。Arun 的 Twitter 是 @acmurthy,你可以 follow 他。
注:文章图片来源于这里。
评论