一、YuniKorn 横空出世


2019 年 7 月 17 日,Cloudera 官方博客发文开源了一个内部研发使用很久的大数据存储和通用计算平台交叉的新项目YuniKorn。据介绍,YuniKorn 是一种轻量级的通用资源调度程序,适用于容器编排系统,负责为大数据工作负载分配 / 管理资源,包括批处理作业和常驻运行的服务。

二、YuniKorn 与 YARN


Apache Hadoop YARN (Yet Another Resource Negotiator,译为:另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。

YARN的基本思想是将JobTracker的两个主要功能(资源管理和作业调度/监控)分离,主要方法是创建一个全局的ResourceManager(RM)和若干个针对应用程序的ApplicationMaster(AM)。这里的应用程序是指传统的MapReduce作业。

YARN 分层结构的本质是 ResourceManager。这个实体控制整个集群并管理应用程序向基础计算资源的分配。ResourceManager 将各个资源部分(计算、内存、带宽等)精心安排给基础 NodeManager(YARN 的每节点代理)。ResourceManager 还与 ApplicationMaster 一起分配资源,与 NodeManager 一起启动和监视它们的基础应用程序。在此上下文中,ApplicationMaster 承担了以前的 TaskTracker 的一些角色,ResourceManager 承担了 JobTracker 的角色。

ApplicationMaster 管理一个在 YARN 内运行的应用程序的每个实例。ApplicationMaster 负责协调来自 ResourceManager 的资源,并通过 NodeManager 监视容器的执行和资源使用(CPU、内存等的资源分配)。请注意,尽管目前的资源更加传统(CPU 核心、内存),但未来会带来基于手头任务的新资源类型(比如图形处理单元或专用处理设备)。从 YARN 角度讲,ApplicationMaster 是用户代码,因此存在潜在的安全问题。YARN 假设 ApplicationMaster 存在错误或者甚至是恶意的,因此将它们当作无特权的代码对待。

NodeManager 管理一个 YARN 集群中的每个节点。NodeManager 提供针对集群中每个节点的服务,从监督对一个容器的终生管理到监视资源和跟踪节点健康。MRv1 通过插槽管理 Map 和 Reduce 任务的执行,而 NodeManager 管理抽象容器,这些容器代表着可供一个特定应用程序使用的针对每个节点的资源。YARN 继续使用 HDFS 层。它的主要 NameNode 用于元数据服务,而 DataNode 用于分散在一个集群中的复制存储服务。

要使用一个 YARN 集群,首先需要来自包含一个应用程序的客户的请求。ResourceManager 协商一个容器的必要资源,启动一个 ApplicationMaster 来表示已提交的应用程序。通过使用一个资源请求协议,ApplicationMaster 协商每个节点上供应用程序使用的资源容器。执行应用程序时,ApplicationMaster 监视容器直到完成。当应用程序完成时,ApplicationMaster 从 ResourceManager 注销其容器,执行周期就完成了。

三、YuniKorn 与 K8s


k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈,例如一个服务器挂了,可以自动将这个服务器上的服务调度到另外一个主机上进行运行,无需进行人工干涉。k8s可以更快的更新新版本,打包应用,更新的时候可以做到不用中断服务,服务器故障不用停机,从开发环境到测试环境到生产环境的迁移极其方便,一个配置文件搞定,一次生成image,到处运行。。。

四、YuniKorn 与 大数据技术栈


大数据的技术栈我们通常认为分为:资源调度层、分布式存储层、统一计算引擎层和统一接口层。

资源调度层:为了更好的对资源进行管理,解决上层应用的问题,现在出现了很多新的技术,很多企业都开始利用容器编排技术来代替YARN进行资源管理。Hadoop3之后Yarn也支持调度Docker应用了,算是Hadoop的一个改进。

分布式存储层:HDFS是一个通用的存储服务,但是它原生的痛点就是不支持小文件存储,而且由于存储特性无法实现高性能的随机读写。

统一计算引擎:现在MapReduce已经基本要被Spark和Flink所取代了,虽然Spark和Flink也算Hadoop生态中的一员,但是,当Spark底层存储基于S3,调度基于K8S就可以完全抛开Hadoop了。

统一接口层:通过统一的SQL接口层来降低大数据技术的使用门槛是我们的共识,目前SQL on Hadoop技术也在蓬勃发展,SQL的支持度也在不断的提升,但是如果不依赖HDFS存储可就不见得SQL On Hadoop了。

五、YuniKorn 未来展望


据介绍,YuniKorn 是一种轻量级的通用资源调度程序,适用于容器编排系统,负责为大数据工作负载分配 / 管理资源,包括批处理作业和常驻运行的服务。

YuniKorn是为了最初支持Yarn和K8s两个系统,但最终目的是创建一个可以支持任何容器协调器系统的统一调度程序。一方面在大规模,多租户环境中有效地实现各种工作负载的细粒度资源共享,另一方面可以动态地创建云原生环境。YuniKorn 为混合工作负载提供统一的跨平台调度体验,包括无状态批处理工作负载和状态服务,支持但不限于 YARN 和 Kubernetes。

六、YuniKorn Github 地址


有兴趣的可以关注一下Github地址:https://github.com/cloudera/yunikorn-core