Hadoop 2.0 中的资源管理框架 - YARN(Yet Another Resource Negotiator)

1. Hadoop 2.0 中的资源管理

http://dongxicheng.org/mapreduce-nextgen/hadoop-1-and-2-resource-manage/

Hadoop 2.0指的是版本为Apache Hadoop 0.23.x、2.x或者CDH4系列的Hadoop,内核主要由HDFS、MapReduce和YARN三个系统组成,其中,YARN是一个资源管理系统,负责集群资源管理和调度,MapReduce则是运行在YARN上离线处理框架,它与Hadoop 1.0中的MapReduce在编程模型(新旧API)和数据处理引擎(MapTask和ReduceTask)两个方面是相同的。

让我们回归到资源分配的本质,即根据任务资源需求为其分配系统中的各类资源。在实际系统中,资源本身是多维度的,包括CPU、内存、网络I/O和磁盘I/O等,因此,如果想精确控制资源分配,不能再有slot的概念,最直接的方法是让任务直接向调度器申请自己需要的资源(比如某个任务可申请1.5GB 内存和1个CPU),而调度器则按照任务实际需求为其精细地分配对应的资源量,不再简单的将一个Slot分配给它,Hadoop 2.0正式采用了这种基于真实资源量的资源分配方案。

Hadoop 2.0(YARN)允许每个节点(NodeManager)配置可用的CPU和内存资源总量,而中央调度器则会根据这些资源总量分配给应用程序。节点(NodeManager)配置参数如下:

(1)yarn.nodemanager.resource.memory-mb

可分配的物理内存总量,默认是8*1024,即8GB。

(2)yarn.nodemanager.vmem-pmem-ratio

任务使用单位物理内存量对应最多可使用的虚拟内存量,默认值是2.1,表示每使用1MB的物理内存,最多可以使用2.1MB的虚拟内存总量。

(3)yarn.nodemanager.resource.cpu-vcore

可分配的虚拟CPU个数,默认是8。为了更细粒度的划分CPU资源和考虑到CPU性能异构性,YARN允许管理员根据实际需要和CPU性能将每个物理CPU划分成若干个虚拟CPU,而每管理员可为每个节点单独配置可用的虚拟CPU个数,且用户提交应用程序时,也可指定每个任务需要的虚拟CPU个数。比如node1节点上有8个CPU,node2上有16个CPU,且node1 CPU性能是node2的2倍,那么可为这两个节点配置相同数目的虚拟CPU个数,比如均为32,由于用户设置虚拟CPU个数必须是整数,每个任务至少使用node2 的半个CPU(不能更少了)。

此外,Hadoop 2.0还引入了基于cgroups的轻量级资源隔离方案,这大大降低了同节点上任务间的相互干扰,而Hadoop 1.0仅采用了基于JVM的资源隔离,粒度非常粗糙。

尽管Hadoop 2.中的资源管理方案看似比较完美,但仍存在以下几个问题:

(1) 资源总量仍是静态配置的,不可以动态修改。这个已在完善中,具体可参考:

https://issues.apache.org/jira/browse/YARN-291

(2)CPU是通过引入的“虚拟CPU”设置的,而虚拟CPU的概念是模糊的,有歧义的,而社区正在尝试借鉴amazon EC2中的ECU概念对其进行规整化,具体参考:

https://issues.apache.org/jira/browse/YARN-1024

https://issues.apache.org/jira/browse/YARN-972

(3)无法支持以组为单位的资源申请,比如申请一组符合某种要求的资源,目前社区也在添加,具体参考:

https://issues.apache.org/jira/browse/YARN-624

(4)调度语义不完善,比如目前应用程序只能申请的同一个节点上相同优先级的资源种类必须唯一,比如来自节点node1上优先级为3的资源大小是<1 vcore 2048 mb>,则不能再有自他大小,否则将会被覆盖掉。目前社区正在完善,具体参考:

https://issues.apache.org/jira/browse/YARN-314

因此,在资源管理方面,Hadoop 2.0比1.0先进的多,它摒弃了基于slot的资源管理方案,采用了基于真实资源的管理方案,这将在资源利用率、资源控制、资源隔离等方面有明显改善,随着Hadoop 2.0调度语义的丰富和完善,它必将发挥越来越大的作用。

2. Yarn 框架原理及运行机制

2.1 Yarn 框架

 

(1) ResourceManager:以下简称RM。YARN的中控模块,负责统一规划资源的使用。它接收来自NM的汇报,建立AM,并将资源派送给AM。 
(2) NodeManager:以下简称MM。YARN中的资源结点模块,负责启动管理container。
(3) ApplicationMaster:以下简称AM。YARN中每个应用都会启动一个AM,负责向RM申请资源,请求NM启动container,并告诉container做什么事情。 
(4) Container:对任务运行环境的抽象。它描述一系列信息:任务运行资源(包括节点、内存、CPU)、任务启动命令、任务运行环境 
Hadoop 2.0 中重构根本的思想是将 MR JobTracker 两个主要的功能分离成单独的组件,这两个功能是 资源管理任务调度 / 监控。新的资源管理器全局管理所有应用程序计算资源的分配,每一个应用的 ApplicationMaster 负责相应的调度和协调。一个应用程序无非是一个单独的传统的 MapReduce 任务或者是一个 DAG( 有向无环图 ) 任务。ResourceManager 和每一台机器的节点管理服务器能够管理用户在那台机器上的进程并能对计算进行组织。
事实上,每一个应用的 ApplicationMaster 是一个详细的框架库,它结合从 ResourceManager 获得的资源和 NodeManager 协同工作来运行和监控任务。
上图中 ResourceManager 支持分层级的应用队列,这些队列享有集群一定比例的资源。从某种意义上讲它就是一个纯粹的调度器,它在执行过程中不对应用进行监控和状态跟踪。同样,它也不能重启因应用失败或者硬件错误而运行失败的任务。
ResourceManager 是基于应用程序对资源的需求进行调度的 ; 每一个应用程序需要不同类型的资源,因此就需要不同的容器。资源包括:内存,CPU,磁盘,网络等等。可以看出,这同现 Mapreduce 固定类型的资源使用模型有显著区别,它给集群的使用带来负面的影响。资源管理器提供一个调度策略的插件,它负责将集群资源分配给多个队列和应用程序。调度插件可以基于现有的能力调度和公平调度模型。
上图中 NodeManager 是每一台机器框架的代理,是执行应用程序的容器,监控应用程序的资源使用情况 (CPU,内存,硬盘,网络 ) 并且向调度器汇报。
每一个应用的 ApplicationMaster 的职责有:向调度器索要适当的资源容器,运行任务,跟踪应用程序的状态和监控它们的进程,处理任务的失败原因。

2.2 Yarn 框架相对于老的 MapReduce 框架的优势呢

1. 这个设计大大减小了 JobTracker(也就是现在的 ResourceManager)的资源消耗,并且让监测每一个 Job 子任务 (tasks) 状态的程序分布式化了,更安全、更优美。
     2. 在新的 Yarn 中,ApplicationMaster 是一个可变更的部分,用户可以对不同的编程模型写自己的 AppMst,让更多类型的编程模型能够跑在 Hadoop 集群中,可以参考 hadoop Yarn 官方配置模板中的 mapred-site.xml 配置。
     3. 对于资源的表示以内存为单位 ( 在目前版本的 Yarn 中,没有考虑 cpu 的占用 ),比之前以剩余 slot 数目更合理。
     4. 老的框架中,JobTracker 一个很大的负担就是监控 job 下的 tasks 的运行状况,现在,这个部分就扔给 ApplicationMaster 做了,而 ResourceManager 中有一个模块叫做 ApplicationsMasters( 注意不是 ApplicationMaster),它是监测 ApplicationMaster 的运行状况,如果出问题,会将其在其他机器上重启。
     5. Container 是 Yarn 为了将来作资源隔离而提出的一个框架。这一点应该借鉴了 Mesos 的工作,目前是一个框架,仅仅提供 java 虚拟机内存的隔离 ,hadoop 团队的设计思路应该后续能支持更多的资源调度和控制 , 既然资源表示成内存量,那就没有了之前的 map slot/reduce slot 分开造成集群资源闲置的尴尬情况。

2.3 以 Yarn 为基础的 Hadoop 2.0 生态系统

新一代的 YARN 容器框架,是传统的MR Hadoop容器框架的升级版本,之前的MR部署架构依赖于JobTracker和TaskTracker的交互模式,而新一代的YARN容器框架,则采用了ResourceManager和NodeManager的交互模式,更高层次的抽象和架构设计,是的YARN容器框架能够支撑多种计算引擎运行,包括传统的Hadoop MR和现在的比较新的SPARK。 Hadoop 2.0 中的资源管理框架,它是一个框架管理器,为各种框架进行资源分配和提供运行时环境。而 MRv2 则是运行在YARN之上的第一个计算框架,其他计算框架,比如Spark、Storm等,都正在往YARN上移植。
(1)离线计算框架:MapReduce 
(2)DAG计算框架:Tez 
(3)流式计算框架:Storm 
(4)内存计算框架:Spark 
(5)图计算框架:Giraph,Graphlib
注:以上内容皆来自于互联网。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289279.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React Native实现js调用安卓原生代码

1 问题 实现js调用安卓原始代码,直接上代码,简单粗暴 2 代码实现 1) 实现一个继承ReactContextBaseJavaModule的类,MyToastModule.java文件如下 public class MyToastModule extends ReactContextBaseJavaModule {public MyToastModule(ReactApplicationContext reactContext)…

发布nuget包的正确姿势---cicd自动打包发布

最轻便的发布nuget包方式&#xff0c;方便cicd自动打包发布nuget包首先新建项目项目名随便取&#xff0c;这里就叫它GuiH.ClassLibrary默认即可&#xff0c;需要改目标版本时&#xff0c;等创建好再改项目创建好了随便写个接口方法namespace GuiH.ClassLibrary {public class C…

我的世界服务器物品属性,属性 - Minecraft Wiki,最详细的官方我的世界百科

属性(Attributes)是生物和玩家身上的增益/减益特性系统。属性也存在修饰符(Modifiers)中&#xff0c;用于调整属性的强度。属性应用[]当应用到一个物品&#xff0c;一个物品的修饰符将增加或减少以修正相应的属性下面的命令将给最近的玩家一把增加20( 10)点额外伤害的钻石剑&a…

分布式和微服务区别_深度解析spring cloud分布式微服务的实现

分布式系统微服务就是原来臃肿的项目拆分为多个模块互不关联。如&#xff1a;按照子服务拆分、数据库、接口&#xff0c;依次往下就更加细粒度&#xff0c;当然运维也就越来越难受了。分布式则是偏向与机器将诺大的系统划分为多个模块部署在不同服务器上。微服务和分布式就是作…

通过Shell开发企业级专业服务启动脚本案例(MySQL)

老男孩教育Linux高端运维班Shell课后必会考试题:企业Shell面试题10&#xff1a;开发企业级MySQL启动脚本说明:MySQL启动命令为&#xff1a;/bin/sh mysqld_safe --pid-file$mysqld_pid_file_path 2>&1 >/dev/null &停止命令逻辑脚本为&#xff1a;mysqld_pidcat …

React Native之js调用Android原生使用Callback传递结果给js

如果不清楚js如何调用Android原生,可以先参考我的这篇博客React Native实现js调用安卓原生代码 1 问题 上面的文章只是调用安卓原生显示Toast,但是我们一般会需要调用安卓的代码然后去拿回结果给js,但是我们知道在android层js调用的这个函数返回值必须的void,所以我们需要用到…

ENVI帮助研究人员发现金矿

本文转自&#xff1a;http://www.esrichina-bj.cn/2012/0319/1663.html 遥感影像能让我们实时的获取地理区域的准确信息&#xff0c;这些为很多石油、天然气和矿产的开采提供关键的信息&#xff0c;节约实地测量的成本&#xff0c;提高工作效率。 美国圣路易斯大学的研究人员希…

C# 使用TCP创建HTTP客户程序

首先&#xff0c;创建一个控制台应用程序(包)&#xff0c;向 Web 服务器发送一个 HTTP 请求。以前用 HttpClient 类实现了这个功能&#xff0c;但使用 TcpClient 类需要深入 HTTP 协议。HttpClientUsingTcp 示例代码使用了以下名称空间:System System.IO System.Net.Sockets …

迅捷路由器 服务器无响应,如果路由器重启还是上不了网 几招搞定

如果网速很慢重启了路由器之后结果还是慢&#xff0c;而且甚至上不了网了那该怎么办。如果有这种情况原因其实有很多很多的可能&#xff0c;需要逐个排查&#xff0c;首先需要进入192.168.1.1路由器的管理设置界面&#xff0c;查看路由器的运行状态。路由器设置、路由器没有成功…

Azure DevOps 中 Dapr项目自动部署流程实践

注&#xff1a;本文中主要讨论 .NET6.0项目在 k8s 中运行的 Dapr 的持续集成流程, 但实际上不是Dapr的项目部署到K8s也是相同流程&#xff0c;只是k8s的yaml配置文件有所不同流程选择基于 Dapr 的项目持续集成包含以下流程编译并打包项目构建 Dockerfile,并推送镜像push image至…

React Native之js同步调用安卓原生方法@ReactMethod(isBlockingSynchronousMethod = true)

1 问题 之前的代码js调用安卓原生都是用的异步方法,比如callback, promiss,异步的话,我们一般是在安卓原生有耗时操作,才用异步,如果我要离开返回,就需要js调用安卓同步方法 利用callback实现js调用原生可以参考我的这篇博客 React Native实现js调用安卓原生代码 React Nat…

用POP动画引擎实现弹簧动画(POPSpringAnimation)

效果图: #import "ViewController.h" #import <POP.h>interface ViewController ()property (nonatomic, weak) UIView *testView;endimplementation ViewController- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor [UIColor blackColor…

地理知识归纳:影响降水的九大因素

降水指大气中水汽凝结降落的过程,包括降雨、下雪、冰雹等形式,降水的多少要受很多因素的影响,但主要条件是三个:充足的水汽供应,气流上升达到过饱和状态,足够的凝结核。通常情况下,我们不需要考虑凝结核的问题,只是考虑有没有充足的水汽和促使气流上升的机制就可以,归…

linux 查看cpu_作为高级Java,你应该了解的Linux知识

作为一个javaer&#xff0c;我以前写过很多关于Linux的文章。但经过多年的观察&#xff0c;发现其实对于大部分人&#xff0c;有些东西压根就用不着。用的最多的&#xff0c;就是到线上排查个问题而已&#xff0c;这让人很是苦恼。那么&#xff0c;我们就将范围再缩小一下。最有…

layer和3D仿射变换

1、视图的显示基于图层&#xff0c;通过控制图层同样能控制显示效果&#xff0c;获取当前的视图的layer,并为其增加圆角边框。 //设置layer边框的宽度为2view.layer.borderWidth2;//如果需要为layer添加颜色需要转换为CGColor对象view.layer.borderColor[UIColor greenColor].C…

React Native之Android原生通过DeviceEventEmitter发送消息给js

1 问题 Android原生向js发消息,并且可以携带数据 2 实现原理 Android原生可以使用RCTEventEmitter来注册事件,然后这里需要指定事件的名字,然后在js那端进行监听同样事件的名字监听,就可以收到消息得到数据 Android注册关键代码 reactContext.getJSModule(DeviceEventManag…

CentOS安装JAVA JDK

普通情况下&#xff0c;我们都要将linux自带的OPENJDK卸载掉。然后安装SUN的JDK。首先查看Linux自带的JDK是否已安装。 输入例如以下命令&#xff0c;查看已经安装的JAVA版本号信息。 Linux代码 java -version 输入例如以下命令。查看JDK的信息。Linux代码 rpm -qa|grep j…

安装bigdesk后es无法启动_安装天正后,探索者无法双击启动?

用户经常会出现&#xff0c;安装天正后&#xff0c;探索者无法双击启动&#xff0c;或者是图纸无法拖拽入CAD中&#xff0c;如何解决&#xff1f;答&#xff1a;天正安装完成后&#xff0c;默认将CAD的acad.exe程序&#xff0c;添加了“以管理员身份运行此程序”而导致的&#…

服务器安全维护包含,服务器安全维护包含

服务器安全维护包含 内容精选换一换本章节介绍如何使用管理控制台向导创建裸金属服务器。创建裸金属服务器时&#xff0c;您需要配置规格、镜像、存储、网络、安全组等必备信息。同时&#xff0c;向导也提供了丰富的扩展配置功能&#xff0c;方便您进行个性化部署和管理。在创建…

C# 发出异步的Get请求

下列的下载代码示例是 HttpClientSample。它以不同的方式异步调用Web 服务。为了演示本例使用的不同方法&#xff0c;使用了命令行参数。示例代码使用了以下名称空间&#xff1a;System System.Linq System.Net System.Net.Http System.Net.Http.Headers System.Threading Sy…