资源管理与调度系统-YARN资源隔离及以YARN为核心的生态系统
资源管理与调度系统-YARN资源隔离及以YARN为核心的生态系统
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.什么是资源隔离
资源隔离是指为不同任务提供可独立使用的计算资源以避免它们互相干扰。当前存在很多资源隔离技术,比如硬件虚拟化,虚拟化,Cgroups,Linux Container等。
YARN对内存资源和CPU资源采用了不同对资源隔离方案。对于内存资源,它是一种限制性资源,它的量的大小直接决定的应用程序的死活,为了能够更灵活地控制内存使用量,YARN提供了两种可选方案:线程监控方案和基于轻量级资源隔离技术Cgroups的方案。
默认情况下,YARN采用了进程监控的方案控制内存使用,即每个NodeManager会启动一个额外的监控线程监控每个Container的内存资源使用量,一旦发现它超过约定的资源量,则会将其杀死。采用这种机制的另一个原因是Java中创建子进程采用了“fork()+exec()”的方案,子进程启动瞬间,它使用的内存量和父进程一致,从外面开来,一个进程使用内存量可能瞬间翻倍,然后有降下来,采用线程监控的方案可防止这种情况下导致swap操作;
另一种可选的方案则基于轻量级资源隔离技术Cgroups,Cgroups是Linux内核提供的弹性资源隔离机制,可以严格限制内存使用上限,一旦进程使用的资源量超过预先定义的上限值,则可见其杀死。对于CPU资源,它是一种弹性资源,它的大小不会直接影响应用程序的死活,因此采用了Cgroups。 博主推荐阅读:Cgroup(https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/resource_management_guide/chap-introduction_to_control_groups#sec-What_are_Control_Groups。)
博主推荐阅读:Linux Container(https://linuxcontainers.org/)
博主推荐阅读:基于轻量级Cgroups的方案(https://issues.apache.org/jira/browse/YARN-3)
博主推荐阅读:https://issues.apache.org/jira/secure/attachment/12536900/MAPREDUCE-4334-v2.patch 博主推荐阅读:https://issues.apache.org/jira/browse/YARN-2.
二.CPU隔离机制
相比于线程监控,Cgroup是一种更加严格和有效的资源限制方法,相比于虚拟机(Virtual Machice,VM),Cgroup是一种轻量级资源隔离方案,且已被越来越广泛的使用。YARN采用了Cgroups对CPU资源进行隔离。
YARN引入了“虚拟CPU”这一术语,它是由物理CPU映射产生的,比如一个物理CPU代表4个虚拟CPU,一台机器可用CPU个数是8,则改值可配成32。YARN不让管理员和用户配置可用物理CPU个数,而是直接配置虚拟CPU个数。虚拟CPU的引入,带来了很多好处,包括:允许用户更细粒度的设置CPU资源量,比如你想让自己的一个任务在最差的情况下使用CPU的50%,可在提交应用程序时设置CPU虚拟个数为2(假设物理CPU和虚拟机CPU映射关系是1:4);从一定成都上解决了CPU异构问题,可以根据物理CPU的性能高低为它们设置不同的虚拟机CPU个数。
默认情况下,NodeManager未启用任何CPU资源隔离机制,如果想启用该机制,需使用LinuxContainerExecutor,它能够以应用程序提交者的身份创建文件,运行Container和销毁Container,相比于DefaultContainerExecutor采用NodeManager启动者的身份执行这些操作,LinuxContainerExecutor的这种方式安全的多。 LinuxContainerExecutor的设计核心思想是,赋予NodeManager启动者以root权限,进而使用它拥有足够的权限以任意身份用户执行一些操作,从而使得NodeManager执行者可以将Container使用的目录和文件的拥有者修改为应用程序提交者,并以应用程序的提交者的身份允许Container,防止所有Container以NodeManager执行者身份运行带来的各种安全风险,比如防止用户在Container中执行一些只有NodeManager用户有权限执行的命令(杀死其他应用程序的命令,关闭,或者萨斯NodeManager进程等。)
三.DockerContainerExecutor
从2.6.0版本开始,YARN引入了一种新的ContainerExecutor:DockerContainerExecutor(DCE)。它的引入,使得NodeManager能够将YARN Container直接运行在Docker Container中。
Docker将易于使用的Linux容器界面与易于构建的容器图像文件相结合。简而言之,Docker推出了非常轻量级的虚拟机。 Docker Container Executor(DCE)允许YARN NodeManager将YARN容器启动到Docker容器中。用户可以为其YARN容器指定所需的Docker镜像。这些容器提供了一个定制的软件环境,用户的代码在该环境中运行,与NodeManager的软件环境隔离。这些容器可以包含应用程序所需的特殊库,它们可以具有与NodeManager上安装的不同版本的Perl,Python甚至Java。实际上,这些容器可以运行与NodeManager上运行的不同的Linux风格 - 虽然YARN容器必须定义运行作业所需的所有环境和库,但不会与NodeManager共享任何内容。 Docker for YARN提供一致性(所有YARN容器将具有相同的软件环境)和隔离(不干扰物理机器上安装的任何内容)。 详情请参考官方文档:http://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/DockerContainerExecutor.html。
四.以YARN为核心的生态系统
YARN发展到今天,已经变成了一个数据操作系统(Data Operation System),很多应用程序或服务不在基于传统的操作系统(比如Linux)开发和部署,而是基于YARN这样的数据操作系统,这意味着,很多新的计算框架或者应用程序脱了YARN将不再能够单独运行,典型的代表是DAG计算框架Tez和Spark(Spark也可以运行在Mesos上)。
为了方便用户将应用程序或者运行到YARN上,Apache Slider和Twill两个项目诞生了,它们的主要定位如下:
(1)Apache Slider:
通过Apache Slider,用户可将现有服务,在不经过任何代码修改的情况下,直接部署到YARN。目前Apache Slider内置了对Storm和Hbase的支持。
官方网站:http://incubator.apache.org/projects/slider.html。
(2)Apache Twill:
提供了一套简化版编程模型,方便用户在YARN之上开发,部署和管理应用程序。
官网网站:http://twill.apache.org/.
总结起来,支持运行在YARN上的计算框架和服务主要有:
1>.MapReduce
MapReduce是一个非常经典的离线计算框架,在MRv1中,MapReduce应用程序需运行在由JobTracker和TaskTracker组成的运行时环境中,而在YARN中,不在有JobTracker和TaskTracker这样的服务组件,取而代之的是ApplicationMaster,它只负责应用程序相关的管理,比如任务切分和调度,任务监控和容错等,而资源相关的调度和管理交给YARN完成。 官方地址:http://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html.
2>.Tez
HortonWorks开源的DAG计算框架,在MapReduce基础上扩展而来的,重用了MapReduce大量代码,仅支持运行在YARN上,不可单独运行,已被广泛应用于Hive,Pig等引擎中。 官方地址:https://tez.apache.org/
3>.Storm
流式实时计算框架,运行时环境由Nimbus和Supervisor等组件构组成,通过Apache Slider。可将Strom直接运行在YARN上。 官方地址:https://storm.apache.org/。
4>.Spark
Spark是一个通过DAG内存计算引擎,尤其适合数据挖掘,机器学习等方面的应用,相比于MapReduce框架,Spark更加高效易用。Spark设计之初,就考虑到如何与其他资源管理系统集成,因此可直接运行在YARN和Mesos等资源管理系统上。 官方地址:https://spark.apache.org/。
5>.HBase
构建在HDFS之上的数据库系统,运行时环境由HMaster和RegionServer等组件构成,通过Apache Slider,可将HBase直接运行在YARN上。
官方地址:https://hbase.apache.org/
6>.Giraph
开源图库算法库,最初版本是基于MRv1实现的,随着Hadoop .0的成熟,正是将所有图算法运行在YARN之上(不在基于MapReduce)。
相关链接:https://issues.apache.org/jira/browse/GIRAPH-13。
官方地址:http://giraph.apache.org/。
7>.OpenMPI
非常经典的高性能并行编程接口,目前正尝试将其运行在YARN上。
官方地址:https://www.open-mpi.org/。

最终,YARN之上可以运行各种应用类型的框架,包括离线计算框架MapReduce,实时计算框架Storm,DAG计算框架Tez等,真正实现一个集群多种用途,这样的集群,我们通常称为轻量级弹性计算平台,说它轻量级,是因为YARN采用了Cgroup轻量级隔离方案,说它弹性,是因为YARN能根据各种计算框架或者应用的负载和需求调整它们各自占用的资源,实现集群资源共享,资源弹性收缩。在不久的将来,普遍采用的部署方案应该如上图所示。
当然,随着YARN服务资源管理系统方向更好的发展,最终Web Server,MySQL Sever这种长服务,均可以部署在YARN之上,这样,YARN讲变为一个服务统一部署和管理平台,最终形成一个以YARN为核心的生态系统。
资源管理与调度系统-YARN资源隔离及以YARN为核心的生态系统的更多相关文章
- 资源管理与调度系统-YARN的基本架构与原理
资源管理与调度系统-YARN的基本架构与原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 为了能够对集群中的资源进行统一管理和调度,Hadoop2.0引入了数据操作系统YARN. ...
- 资源管理与调度系统-资源管理系统Mesos
资源管理与调度系统-资源管理系统Mesos 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Mesos是诞生于UC Berkeley的一个研究项目,它的设计动机是解决编程模型和计算框 ...
- 资源管理与调度系统-YARN的资源调度器
资源管理与调度系统-YARN的资源调度器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 资源调度器是Hadoop YARN中最核心的组件之一,它是ResourceManager中的 ...
- Hadoop YARN资源隔离技术
YARN对内存资源和CPU资源采用了不同的资源隔离方案.对于内存资源,它是一种限制性资源,它的量的大小直接决定应用程序的死活,因为应用程序到达内存限制,会发生OOM,就会被杀死.CPU资源一般用Cgr ...
- Impala源码之资源管理与资源隔离
本文由 网易云发布. 前言 Impala是一个MPP架构的查询系统,为了做到平台化服务,首先需要考虑就是如何做到资源隔离,多个产品之间尽可能小的甚至毫无影响.对于这种需求,最好的隔离方案无疑是物理机 ...
- 利用yarn多队列实现hadoop资源隔离
大数据处理离不开hadoop集群的部署和管理,对于本来硬件资源就不多的创业团队来说,做好资源的共享和隔离是很有必要的,毕竟不像BAT那么豪,那么怎么样能把有限的节点同时分享给多组用户使用而且互不影响呢 ...
- Hadoop Yarn内存资源隔离实现原理——基于线程监控的内存隔离方案
注:本文以hadoop-2.5.0-cdh5.3.2为例进行说明. Hadoop Yarn的资源隔离是指为运行着不同任务的“Container”提供可独立使用的计算资源,以避免它们之间相互干扰.目 ...
- Yarn的资源隔离机制
源调度和资源隔离是YARN作为一个资源管理系统,最重要和最基础的两个功能.资源调度由ResourceManager完成,而资源隔离由各个NodeManager实现,在文章“Hadoop YARN中内存 ...
- 如何提升集群资源利用率? 阿里容器调度系统Sigma 深入解析
阿里妹导读:为了保证系统的在线交易服务顺利运转,最初几年,阿里都是在双11大促来临之前大量采购机器储备计算资源,导致了双11之后资源大量闲置点现象.是否能把计算任务与在线服务进行混合部署,在现有弹性资 ...
随机推荐
- [LeetCode] 231. Power of Two 2的次方数
Given an integer, write a function to determine if it is a power of two. Example 1: Input: 1 Output: ...
- [08]Go设计模式:代理模式(ProxyPattern)
目录 proxy 一.简介 二.代码 三.参考资料 proxy 一.简介 代理设计模式是一种结构设计模式.这种模式建议为控制和访问主要对象提供额外的间接层. 在这种模式下,将创建一个新的代理类,该类实 ...
- Spring中的乱码问题
最近发现一个问题, 中文编码保存到数据库里显示正确, 打印出来却是一串问号, 然后怀疑是平台默认编码的问题, locale命令显示是UTF-8正常, 然后单独编写一个java文件, 编译然后Java命 ...
- Word 中直引号和弯引号的相互替换
直引号替换成弯引号 弯引号替换成直引号 未完 ...... 点击访问原文(进入后根据右侧标签,快速定位到本文)
- Django组件之auth
一.什么是Auth模块 Auth模块是Django自带的用户认证模块,默认使用 auth_user 表来存储用户数据. 二.使用方法 1.创建超级用户 python3 manage.py create ...
- Mybatis @One注解使用
@One注解:一对一关联查询
- 「CTS2019」珍珠
「CTS2019」珍珠 解题思路 看了好多博客才会,问题即要求有多少种方案满足数量为奇数的变量数 \(\leq n-2m\).考虑容斥,令 \(F(k)\) 为恰好有 \(n\) 个变量数量为奇数的方 ...
- easyui的学习总结
大家都知道easy-ui,样式虽然不怎么骚气,但是使用,小表格,很的大家欢喜 大致总结如下 :属性分为CSS片段和JS片段.CSS类定义:1.div easyui-window 生成一个window窗 ...
- Net core 2.x 升级 3.0 使用自带 System.Text.Json 时区 踩坑经历
.Net Core 3.0 更新的东西很多,这里就不多做解释了,官方和博园大佬写得很详细 关于 Net Core 时区问题,在 2.1 版本的时候,因为用的是 Newtonsoft.Json,配置比较 ...
- 报告题目:HAO智能:HI + AI + OI
报告题目:HAO智能:HI + AI + OI 报告摘要:大数据面向异构自治的多源海量数据, 旨在挖掘数据间复杂且演化的关联.大数据知识工程(BigKE)从大数据的 HACE定理开始, 从大知识建模 ...