`

Yarn的JVM重用功能——uber

 
阅读更多

 

Yarn的JVM重用功能——uber

在文章开头,我想先做几点说明:

1、本文的内容来自我对Yarn的相应功能的理解和实践。而我对该部分功能的理解主要来自对Hadoop的开发者之前相应言论的分析,并且我也将我的分析发给了Hadoop community, 并得到了Yarn的创始人兼架构师Arun Murthy的肯定回复。

2、本文中uber的配置部分,主要参考之前Hadoop开发者的言论。但是我当初看该言论的时候对一些细节有所疑惑,因此在本文中我对很多地方做了修改:使一些用词的引用前后一致,并加上了很多描述性的过渡语言。

3、本文为研究性质,并非官方文档的翻译。因此,如果读者发现任何纰漏,希望不吝赐教,万分感激!

 

首先,简单回顾一下Hadoop 1.x中的JVM重用功能:用户可以通过更改配置,来指定TaskTracker在同一个JVM里面最多可以累积执行的Task的数量(默认是1)。这样的好处是减少JVM启动、退出的次数,从而达到提高任务执行效率的目的。 配置的方法也很简单:通过设置mapred-site.xml里面参数mapred.job.reuse.jvm.num.tasks的值。该值默认是1,意味着TaskTracker会为每一个Map任务或Reduce任务都启动一个JVM,当任务执行完后再退出该JVM。依次类推,如果该值设置为3,TaskTracker则会在同一个JVM里面最多依次执行3个Task,然后才会退出该JVM。

 

在 Yarn(Hadoop MapReduce v2)里面,不再有参数mapred.job.reuse.jvm.num.tasks,但它也有类似JVM Reuse的功能——uber。据Arun的说法,启用该功能能够让一些任务的执行效率提高2到3倍(“we've observed 2x-3x speedup for some jobs”)。不过,由于Yarn的结构已经大不同于MapReduce v1中JobTracker/TaskTracker的结构,因此uber的原理和配置都和之前的JVM重用机制大不相同。

 

1) uber的原理:

Yarn的默认配置会禁用uber组件,即不允许JVM重用。我们先看看在这种情况下,Yarn是如何执行一个MapReduce job的。首先,Resource Manager里的Application Manager会为每一个application(比如一个用户提交的MapReduce Job)在NodeManager里面申请一个container,然后在该container里面启动一个Application Master。container在Yarn中是分配资源的容器(内存、cpu、硬盘等),它启动时便会相应启动一个JVM。此时,Application Master便陆续为application包含的每一个task(一个Map task或Reduce task)向Resource Manager申请一个container。等每得到一个container后,便要求该container所属的NodeManager将此container启动,然后就在这个container里面执行相应的task。等这个task执行完后,这个container便会被NodeManager收回,而container所拥有的JVM也相应地被退出。在这种情况下,可以看出每一个JVM仅会执行一Task, JVM并未被重用。

 

用户可以通过启用uber组件来允许JVM重用——即在同一个container里面依次执行多个task。在yarn-site.xml文件中,改变一下几个参数的配置即可启用uber的方法:

参数| 默认值 | 描述

- mapreduce.job.ubertask.enable | (false) | 是否启用user功能。如果启用了该功能,则会将一个“小的application”的所有子task在同一个JVM里面执行,达到JVM重用的目的。这个JVM便是负责该application的ApplicationMaster所用的JVM(运行在其container里)。那具体什么样的application算是“小的application"呢?下面几个参数便是用来定义何谓一个“小的application"

- mapreduce.job.ubertask.maxmaps | 9 | map任务数的阀值,如果一个application包含的map数小于该值的定义,那么该application就会被认为是一个小的application

- mapreduce.job.ubertask.maxreduces | 1 | reduce任务数的阀值,如果一个application包含的reduce数小于该值的定义,那么该application就会被认为是一个小的application。不过目前Yarn不支持该值大于1的情况“CURRENTLY THE CODE CANNOT SUPPORT MORE THAN ONE REDUCE”

- mapreduce.job.ubertask.maxbytes | | application的输入大小的阀值。默认为dfs.block.size的值。当实际的输入大小部超过该值的设定,便会认为该application为一个小的application。

 

最后,我们来看当uber功能被启用的时候,Yarn是如何执行一个application的。首先,Resource Manager里的Application Manager会为每一个application在NodeManager里面申请一个container,然后在该container里面启动一个Application Master。containe启动时便会相应启动一个JVM。此时,如果uber功能被启用,并且该application被认为是一个“小的application”,那么Application Master便会将该application包含的每一个task依次在这个container里的JVM里顺序执行,直到所有task被执行完("WIth 'uber' mode enabled, you'll run everything within the container of the AM itself")。这样Application Master便不用再为每一个task向Resource Manager去申请一个单独的container,最终达到了 JVM重用(资源重用)的目的。

 

分享到:
评论

相关推荐

    yarn与npm的命令行小结

     npm install === yarn —— install 安装是默认行为。  npm install taco --save === yarn add taco —— taco 包立即被保存到 package.json 中。  npm uninstall taco --save === yarn remove taco 在 npm 中,...

    Yarn框架代码详细分析

    1. 资源管理器(ResourceManager, RM):它是YARN的核心组件,负责整个系统的资源管理和调度,它管理着两个关键的子系统——调度器(Scheduler)和应用程序管理器(ApplicationsManager)。 2. 节点管理器...

    yarn-1.22.4.msi和yarn-1.22.5.msi

    Yarn 1.22.4和1.22.5是稳定版本,每个版本都可能包含性能优化、bug修复或新功能。1.22.5比1.22.4稍微新一些,因此可能会提供一些额外的改进或解决在1.22.4中发现的问题。如果你的前端工程有特定的Yarn版本要求,例如...

    yarn-v1.19.1.tar.gz

    这个版本可能是在特定日期发布的稳定版,提供了该时期Yarn的功能和修复。 首先,让我们深入了解一下Yarn。Yarn的主要目标是提供更快、更安全、更可靠的依赖包管理和工作流程。它通过引入了一些关键特性来实现这些...

    yarn 1.6 WIN安装文件

    虽然Yarn和npm在功能上有许多相似之处,但Yarn在性能、安全性和一致性方面有所提升。然而,随着npm的不断改进,两者的差距正在逐渐缩小。 8. **升级Yarn** 当有新的Yarn版本发布时,可以使用`yarn upgrade yarn`...

    yarn入门——yarn的架构及作业调度

    影响系统扩展不支持MapReduce之外的计算框架,比如Storm,spark,flink是一种新的Hadoop资源管理器,它是一个通用资源管理系统,YARN的基本思想是将JobTracker的两个主要功能(资源管理和作业调度/监控)分离,主要...

    yarn-1.22.10编译工具

    yarn-1.22.10编译工具yarn-1.22.10编译工具 yarn-1.22.10编译工具yarn-1.22.10编译工具 yarn-1.22.10编译工具yarn-1.22.10编译工具 yarn-1.22.10编译工具yarn-1.22.10编译工具 yarn-1.22.10编译工具yarn-1.22.10编译...

    04.yarn集群的功能和大体机制介绍.mp4

    04.yarn集群的功能和大体机制介绍.mp4

    Yarn获取Application列表编码

    Yarn 获取 Application 列表编码 Yarn 是一个资源管理和调度框架,负责管理 Hadoop 集群中的资源和应用程序。获取 Application 列表编码是 Yarn 中的一种常见操作,本文将对其进行详细的分析和介绍。 Yarn 获取 ...

    yarn-1.22.0.zip

    Yarn的核心特性之一就是其强大的缓存功能。当下载过一个包后,Yarn会将其存储在本地的缓存目录中。下次如果同一个项目或其他项目需要同样的包,Yarn将直接从缓存中提取,避免了网络上的重复下载,极大地提高了工作...

    yarn.lock yarn install 安装失败,使用官方下载的yarn.lock文件

    npm install -g yarn yarn install 安装失败,使用官方下载的yarn.lock文件

    Yarn 内存分配管理机制及相关参数配置.

    YARN(Yet Another Resource Negotiator)是Apache Hadoop的一个核心组件,主要负责集群资源的管理和调度。在YARN中,内存分配管理是一个关键环节,它直接影响到应用性能和集群资源的有效利用。本篇将深入探讨YARN...

    yarn-v1.22.5.tar.gz

    5. **安全性**:Yarn 提供了安全扫描功能,可以检查依赖包的安全漏洞,并提供升级建议,帮助开发者保持项目安全。 6. **插件系统**:Yarn 支持插件扩展,可以通过安装插件来添加新的功能或优化现有流程。 在 Yarn ...

    yarn1.22.4与1.22.5最新安装包windows

    总结来说,Yarn 1.22.4和1.22.5为Windows用户提供了一种高效且可靠的JavaScript包管理方案,通过选择合适的安装方法,并利用其独特的特性和功能,可以优化项目管理和开发流程。确保定期更新Yarn以获取最新的改进和...

    Hadoop的yarn详解

    通过本书的学习,读者可以全面掌握Hadoop YARN的架构设计和实现原理,不仅理解各个组件的功能和工作方式,还能深入到源代码层面,从而在实际工作中更加高效地部署和优化YARN集群。此外,本书还通过对比分析了不同...

    yarn-1.22.0.msi

    Yarn还支持工作区(Workspaces)功能,这允许你在单个项目中管理多个包,共享相同的依赖,减少重复和提高效率。只需在根目录下创建一个`workspaces`字段的`package.json`,列出所有子项目,Yarn就会自动处理这些子...

    Yarn编程ApplicationList

    在分布式计算领域,Apache Hadoop YARN(Yet Another Resource Negotiator)是核心组件之一,它作为资源管理系统,负责调度和管理Hadoop集群上的应用程序。在这个主题中,我们将深入探讨"Yarn编程ApplicationList",...

    yarn 前端打包工具指定配置文件

    在前端开发领域,`Yarn` 是一个非常流行的依赖管理工具,它被广泛用于替代 `npm` 进行包的安装和管理。`Yarn` 提供了更快的速度、更可靠的重复性和更好的安全性。在某些情况下,我们可能需要对前端项目进行特定的...

    最新yarn-1.22.5的windows的msi安装版本

    3. **尝试安装依赖**:为了测试Yarn的功能,可以创建一个新的Node.js项目,然后使用`yarn init`初始化并`yarn add`安装一个依赖包。 **四、Yarn 的使用技巧** 1. **全局安装和局部安装**:Yarn 支持全局和局部...

Global site tag (gtag.js) - Google Analytics