您的位置:首页 > 运维架构

【MR】剖析YARN中uber模式

2017-07-04 12:28 302 查看

【MR】剖析YARN中uber模式

在看《Hadoop权威指南》时,看到关于uber模式的介绍

一,什么是uber模式

Uber模式简单地可以理解成JVM重用,该模式是Hadoop2.x开始引入的;以Uber模式运行MR作业,所有的Map任务和Reduce任务将会在Application Master所在的容器(container)中运行,也就是说整个MR作业运行的过程只会启动AM container,因为不需要启动mapper containers和 reducer containers。

这是一种针对MR小作业的优化机制。即如果作业足够小,则所有任务在一个JVM中完成要比为每个任务启动一个JVM更划算。

那什么任务算是小任务?

默认情况下,小任务就是小于10个mapper且只有1个reducer,并且输入分片大小小于一个HDFS块的大小。

二,uber模式原理

Yarn的默认配置会禁用uber组件,即不允许JVM重用。

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

当uber功能被启用时

首先,Resource Manager里的Application Manager会为每一个application在NodeManager里面申请一个container,然后在该container里面启动一个Application Master。containe启动时便会相应启动一个JVM。此时,如果uber功能被启用,并且该application被认为是一个“小的application”,那么Application Master便会将该application包含的每一个任务依次在这个container里的JVM里顺序执行,直到所有任务被执行完。这样Application Master便不用再为每一个任务向Resource Manager去申请一个单独的container,最终达到了JVM重用(资源重用)的目的。

三,uber模式配置

在yarn-site.xml文件中,改变一下几个参数的配置即可启用uber模式。

mapreduce.job.ubertask.enable;默认值false;true启用user功能。

uber的默认配置

mapreduce.job.ubertask.maxmaps 最大map数,默认值:9

mapreduce.job.ubertask.maxreduces 最大reduce数,默认值:1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  yarn hadoop uber模式