资源管理与调度系统-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为核心的生态系统的更多相关文章

  1. 资源管理与调度系统-YARN的基本架构与原理

    资源管理与调度系统-YARN的基本架构与原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 为了能够对集群中的资源进行统一管理和调度,Hadoop2.0引入了数据操作系统YARN. ...

  2. 资源管理与调度系统-资源管理系统Mesos

    资源管理与调度系统-资源管理系统Mesos 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Mesos是诞生于UC Berkeley的一个研究项目,它的设计动机是解决编程模型和计算框 ...

  3. 资源管理与调度系统-YARN的资源调度器

    资源管理与调度系统-YARN的资源调度器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 资源调度器是Hadoop YARN中最核心的组件之一,它是ResourceManager中的 ...

  4. Hadoop YARN资源隔离技术

    YARN对内存资源和CPU资源采用了不同的资源隔离方案.对于内存资源,它是一种限制性资源,它的量的大小直接决定应用程序的死活,因为应用程序到达内存限制,会发生OOM,就会被杀死.CPU资源一般用Cgr ...

  5. Impala源码之资源管理与资源隔离

    本文由  网易云发布. 前言 Impala是一个MPP架构的查询系统,为了做到平台化服务,首先需要考虑就是如何做到资源隔离,多个产品之间尽可能小的甚至毫无影响.对于这种需求,最好的隔离方案无疑是物理机 ...

  6. 利用yarn多队列实现hadoop资源隔离

    大数据处理离不开hadoop集群的部署和管理,对于本来硬件资源就不多的创业团队来说,做好资源的共享和隔离是很有必要的,毕竟不像BAT那么豪,那么怎么样能把有限的节点同时分享给多组用户使用而且互不影响呢 ...

  7. Hadoop Yarn内存资源隔离实现原理——基于线程监控的内存隔离方案

    注:本文以hadoop-2.5.0-cdh5.3.2为例进行说明.   Hadoop Yarn的资源隔离是指为运行着不同任务的“Container”提供可独立使用的计算资源,以避免它们之间相互干扰.目 ...

  8. Yarn的资源隔离机制

    源调度和资源隔离是YARN作为一个资源管理系统,最重要和最基础的两个功能.资源调度由ResourceManager完成,而资源隔离由各个NodeManager实现,在文章“Hadoop YARN中内存 ...

  9. 如何提升集群资源利用率? 阿里容器调度系统Sigma 深入解析

    阿里妹导读:为了保证系统的在线交易服务顺利运转,最初几年,阿里都是在双11大促来临之前大量采购机器储备计算资源,导致了双11之后资源大量闲置点现象.是否能把计算任务与在线服务进行混合部署,在现有弹性资 ...

随机推荐

  1. Oracle:Pivot 转多列并包含多个名称

    SELECT * FROM (SELECT l.DISTRIBUTOR_ID, d.SKU_CODE, d.WH_CODE, d.ORDER_PACKAGES, d.PRICE, d.YEARLY|| ...

  2. matlab学习笔记8 基本绘图命令-图形窗口简介

    一起来学matlab-matlab学习笔记8 基本绘图命令_1 图形窗口简介 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰等 ...

  3. JavaScript和Jquery个人笔记

    目录 前言 价格 * 数量 = 金额 js计算时间差值 判断敲回车或Shift+回车 js控制textarea换行 $(this)选择当前元素 前端调试禁止其他js js添加a标签href属性和文本 ...

  4. 在使用redis做缓存后,mybatis的延迟加载失效

    原来使用的是EHcache,mybatis延迟加载没有问题,改成redis后,延迟加载获得数据时就会发生错误. 报:Cannot get Configuration as configuration ...

  5. LODOP问答部分链接

    点击链接进入相关简短问答博文: 问答大全 纸张打印机 注册 table表格 clodop测试地址 字体 行间距.字间距 clodop回调函数 SET_PRINT_STYLEA 页眉页脚 超文本 条码 ...

  6. 扩展Redis的Jedis客户端,哨兵模式读请求走Slave集群

    原 扩展Redis的Jedis客户端,哨兵模式读请求走Slave集群 2018年12月06日 14:26:45 温故而知新666 阅读数 897   版权声明:本文为博主原创文章,遵循CC 4.0 b ...

  7. 轮胎魔术公式(Magic Fomula)模型

    魔术公式是用三角函数的组合公式拟合轮胎试验数据,用一套形式相同的公式就可以完整地表达轮胎的纵向力Fx.侧向力Fy.回正力矩Mz.翻转力矩Mx.阻力矩My以及纵向力.侧向力的联合作用工况,故称为“魔术公 ...

  8. Active Objects模式

    实现的思路是,通过代理将方法的调用转变为向阻塞队列中添加一个请求,由一个线程取出请求后执行实际的方法,然后将结果设置到Future中 这里用到了代理模式,Future模式 /************* ...

  9. 转载:MFC之MessageBox、AfxMessageBox用法

    在软件中我们经常会弹出个小窗口,给一点点提示.这就会用到消息对话框. 在Win32 API程序中只有MessageBox这一种用法. 而在MFC中就有三各方法: .调用API中的MessageBox: ...

  10. 爬虫解析库beautifulsoup

    一.介绍 Beautiful Soup是一个可以从HTML或XML文件中提取数据的python库. #安装Beautiful Soup pip install beautifulsoup4 #安装解析 ...