资源管理与调度系统-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 2.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为核心的生态系统。

转载于:https://www.cnblogs.com/yinzhengjie/p/10810337.html

资源管理与调度系统-YARN资源隔离及以YARN为核心的生态系统相关推荐

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

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

  2. Borg/Mesos/Yarn三大主流资源管理与调度系统对比

    0. 前言 Mesos(Twitter).YARN(apache)和Borg(google)三个资源管理与调度系统可以说是目前资源管理和调度系统的先导者,现有的大多数资源管理和调度系统都从这三个系统中 ...

  3. 任务调度系统-业务线资源隔离

    问题背景 最近注意到自己负责的一个任务调度集群碰到了计算资源业务线分配不均的问题(即业务线资源隔离没有做好): 在任务高峰期,调度系统会将计算资源偏向分配给(执行耗时比较长的)大任务,而(执行耗时比较 ...

  4. 面向大数据与云计算调度挑战的阿里经济体核心调度系统

    编者按 伏羲(Fuxi)是十年前最初创立飞天平台时的三大服务之一(分布式存储 Pangu,分布式计算 MaxCompute,分布式调度 Fuxi),当时的设计初衷是为了解决大规模分布式资源的调度问题( ...

  5. 集群资源管理与调度基础理论综述

    0. 前言 本文总结学习自<大数据日知录-架构与算法> 对于大型互联网公司来说,如何充分挖掘硬件资源潜力以及增加其利用率是至关重要的问题.对于互联网公司来说,无论是内部系统还是对外提供服务 ...

  6. 资源管理框架(mesos/YARN/coraca/Torca/Omega)选型分析

    1 资源调度的目标和价值 1.1 子系统高效调度 任务之间资源隔离,减少争抢. 任务分配调度时结合资源分配,各个任务分配合理的资源,充分利用系统资源,减少资源利用不充分的问题. 资源调度结合优先级,优 ...

  7. Linux调度系统全景指南(中篇)

    点击上方蓝字关注公众号,更多经典内容等着你 | 导语本文主要是讲Linux的调度系统, 由于全部内容太多,分三部分来讲,本篇是中篇(主要讲抢占和时钟),上篇请看(CPU和中断):Linux调度系统全景 ...

  8. 统一资源管理与调度平台(系统)介绍

    背景 随着互联网的高速发展,基于数据密集型应用的计算框架不断出现,从支持离线处理的MapReduce,到支持在线处理的Storm,从迭代式计算框架Spark到流式处理框架S4,-,各种框架诞生于不同的 ...

  9. 四十六、利用yarn多队列实现hadoop资源隔离

    2019独角兽企业重金招聘Python工程师标准>>> 大数据处理离不开Hadoop集群的部署和管理,对于本来硬件资源就不多的创业团队来说,做好资源的共享和隔离是很有必要的,毕竟不像 ...

最新文章

  1. 使用Debug Diagnostic Tool排除内存泄漏故障
  2. caffe中权值初始化方法
  3. scala集合常用方法:foldRight
  4. 【sprinb-boot】排除/不加载某些Bean
  5. [bzoj1412][ZJOI2009]狼和羊的故事
  6. oracle 模糊查询_MySQL Like模糊查询速度太慢如何解决
  7. 汇编语言常见错误(转载)
  8. XML Web services 发现
  9. 原生 JavaScript 实现扫雷
  10. 写代码质量改善java计划151建议——导航开始
  11. fastboot命令大全
  12. Java多线程系列--“JUC集合”05之 ConcurrentSkipListMap
  13. qt linux 下的u盘检测,Qt-detect-Udisk老外写的qt检测U盘
  14. 关于5G通信技术,你了解多少?
  15. HTML5 weui笔记
  16. linux 如何扫描 病毒,linux安装fprot扫描病毒
  17. HTML中Table标签的属性及应用
  18. git配置及常见命令
  19. 求两个文件的交集、并集和差集 sort和uniq
  20. Linux文件目录权限管理

热门文章

  1. LeetCode刷题(18)
  2. python接口自动化(十五)--参数关联接口(详解)
  3. python接口自动化(二)--什么是接口测试、为什么要做接口测试(详解)
  4. 点餐小程序源码_微信小程序餐饮点餐商城前端模版
  5. 电脑如何测网速_测网速小常识
  6. vb连接mysql出现的问题_连接数据库问题用户定义类型未定义【vb6】
  7. python 多帧 超分辨_利用python-opencv生成视频帧数控制,和常见错误总结
  8. python壁纸超清全面屏_iOS 关于全面屏适配的方案及UI在不同尺寸下适配方案
  9. 云计算具有什么平台_如何搭建自己的云计算平台?
  10. linux xwindow 权限,普通用户如何启动XWindow的问题