`
qianshangding
  • 浏览: 123902 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Hadoop之MapReduce的两种任务模式

 
阅读更多

MapReduce按照任务大小和设置的不同,提供了两种任务模式:


客户端通过org.apache.hadoop.mapreduce.protocol.ClientProtocol与服务端通信,ClientProtocol的继承关系:

老一些的版本还有一个JobTracker的实现类,即:classic。用于和MapReduce1.X兼容用的,高一些的版本已经没有这个实现类了。

一,本地模式(LocalJobRunner实现)

mapreduce.framework.name设置为local,则不会使用YARN集群来分配资源,在本地节点执行。在本地模式运行的任务,无法发挥集群的优势。注:在web UI是查看不到本地模式运行的任务。


二,Yarn模式(YARNRunner实现)

mapreduce.framework.name设置为yarn,当客户端配置mapreduce.framework.name为yarn时, 客户端会使用YARNRunner与服务端通信, 而YARNRunner真正的实现是通过ClientRMProtocol与RM交互, 包括提交Application, 查询状态等功能。但是根据任务的特性,分为两种方式执行任务:

1,uber mode:

Uber模式是Hadoop2.0针对MR小作业的优化机制。通过mapreduce.job.ubertask.enable来设置是否开启小作业优化,默认为false。

如果用Job足够小,则串行在的一个JVM完成该JOB,即MRAppMaster进程中,这样比为每一个任务分配Container性能更好。

那么什么才是足够小的Job呢?下面我们看看一些的参数(mapred-site.xml):

  • mapreduce.job.ubertask.maxmaps 最大的map数。默认值9
  • mapreduce.job.ubertask.maxreduces 最大的reduce数,默认为1
  • mapreduce.job.ubertask.maxbytes 最大的字节数,如果没有指定,默认和dfs.block.size一样。

应用程序的其他配置也会影响到对“小”的定义,yarn.app.mapreduce.am.resource.mb必须大于mapreduce.map.memory.mb和mapreduce.reduce.memory.mb,还有yarn.app.mapreduce.am.resource.cpu-vcores必须大于mapreduce.map.cpu.vcores 和 mapreduce.reduce.cpu.vcores,以下是这个配置的说明:

  • yarn.app.mapreduce.am.resource.mb MR AppMaster需要的内存数,默认为1536
  • mapreduce.map.memory.mb 从调度器(scheduler)为每个Map Task请求的内存数,默认1024
  • mapreduce.reduce.memory.mb 从调度器(scheduler)为每个Reduce Task请求的内存数,默认1024
  • yarn.app.mapreduce.am.resource.cpu-vcores MR AppMaster需要的虚拟CPU核数,默认为1536
  • mapreduce.map.cpu.vcores 从调度器(scheduler)为每个Map Task请求的虚拟CPU核数,默认1
  • mapreduce.reduce.cpu.vcores 为每个Map Reduce请求的虚拟CPU核数,默认1

链式Job也不能使用Uber模式执行,即使满足了上面的情况也不能。因为链式作业会并发执行不同资源需求的map task和reduce task。链式Job是指集成了org.apache.hadoop.mapreduce.lib.chain.ChainReducer和org.apache.hadoop.mapreduce.lib.chain.ChainMapper类的用户Map或Reduce程序。

yarn.app.mapreduce.am.resource.mb和yarn.app.mapreduce.am.resource.cpu-vcores是在yarn框架的级别,其他四个关于内存和CPU的配置是和具体每个Mapreduce任务有关,如果Mapreduce所需的资源大于Yarn框架定义的资源数量,则不能当成“小”Job使用uber mode执行了。

2,Non-Uber mode:

Uber只能执行一小部门的任务,在大数据环境下,大部分任务仍然运行在Non-Uber模式下,MRAppMaster将一个作业的map task和reduce task分为四种状态:

pending:刚启动但尚未向ResourceManager发送资源请求
scheduled:已经向ResourceManager发送资源请求,但尚未分配到资源
assigned:已经分配到了资源且正在运行
completed:已经运行完成。

MRAppMaster初始化之后,会产生一系列的Map Task和Reduce Task。

Map Task的生命周期是:

scheduled->assigned->completed
Reduce Task的生命周期是:
pending->scheduled->assigned->completed

上面我们可以看到,Reduce Task比Map Task多一个pending的状态,主要是因为Reduce Task需要依赖Map Task的输出,为了防止Reduce Task启动过早造成资源浪费,MRAppMaster让刚启动的Reduce Task处于pending状态,这样可以根据Map Task的运行情况和具体的配置来调整Reduce Task状态(pengding到scheduled中相互转移),以下几个参数是有来配置Reduce Task的启动时机的:
  • mapreduce.job.reduce.slowstart.completedmaps map task完整了多少比率才开始为reduce task生成资源
  • yarn.app.mapreduce.am.job.reduce.rampup.limit 在maps task已经完成,启动reduce task的比率。默认为0.5
  org.apache.hadoop.mapreduce.MRJobConfig:

/**
   * Limit reduces starting until a certain percentage of maps have finished.
   *  Percentage between 0.0 and 1.0
   */
  public static final String MR_AM_JOB_REDUCE_RAMPUP_UP_LIMIT = 
    MR_AM_PREFIX  + "job.reduce.rampup.limit";
 public static final float DEFAULT_MR_AM_JOB_REDUCE_RAMP_UP_LIMIT = 0.5f;
  • yarn.app.mapreduce.am.job.reduce.preemption.limit 当map task不能申请资源时,map task最多可以抢占reduce task资源的比率。默认为0.5
  org.apache.hadoop.mapreduce.MRJobConfig:
 /** 
 * Limit on the number of reducers that can be preempted to ensure that at
 * least one map task can run if it needs to. Percentage between 0.0 and 1.0
 */
 public static final String MR_AM_JOB_REDUCE_PREEMPTION_LIMIT = 
 MR_AM_PREFIX + "job.reduce.preemption.limit";
 public static final float DEFAULT_MR_AM_JOB_REDUCE_PREEMPTION_LIMIT = 0.5f;


分享到:
评论

相关推荐

    Hadoop实战(第2版)

    join 7.3 本章小结8 结合R 和Hadoop 进行数据统计8.1 比较R 和MapReduce 集成的几种方法8.2 R 基础知识 8.3 R 和Streaming 8.3.1 Streaming 和map-only R 技术点57 计算股票日平均值8.3.2 Streaming...

    Hadoop实战(陆嘉恒)译

    Hadoop——一种分布式编程框架第1 章 Hadoop简介1.1 为什么写《Hadoop 实战》1.2 什么是Hadoop1.3 了解分布式系统和Hadoop1.4 比较SQL 数据库和Hadoop1.5 理解MapReduce1.5.1 动手扩展一个简单程序1.5.2 相同程序在...

    Hadoop实战手册

    使用Mysql构建简单数据集市29#Mysql的两种引擎介绍29#创建一个数据表使用Hive cli 进行数据分析29#使用shell 编写Hsql 并使用HiveCli导出数据,使用Mysql命令加载到数据库中。29#使用crontab 新增每日运行任务定时器...

    基于Hadoop的大数据处理系统.pdf

    Hadoop MapReduce MapReduce的名字源于这个模型中的两项核⼼操作:Map和Reduce。这是函数式编程(Functional Programming)中的两个核⼼概 念。 MapReduce是⼀种简化的分布式编程模式,让程序⾃动分布到⼀个由普通...

    大数据技术之Hadoop介绍.pdf

    ⼤数据技术之Hadoop介绍 1.⼤数据概述 ⼤数据概述 ⼤数据是指⽆法利⽤传统计算技术进⾏处理的⼤规模数据集合。⼤数据概念不再只是数据,⼤数据已经成为⼀个全⾯的主题概念,包含各类 ⼯具、技术以及框架。 ⼤数据...

    Hadoop硬实战 [(美)霍姆斯著][电子工业出版社][2015.01]_PDF电子书下载 带书签目录 高清完整版.rar )

    8.1 比较R 和MapReduce 集成的几种方法 8.2 R 基础知识 8.3 R 和Streaming 8.3.1 Streaming 和map-only R 技术点57 计算股票日平均值 8.3.2 Streaming、R 和完整的MapReduce 技术点58 计算股票的...

    五种大数据架构简介.pdf

    批处理模式 批处理模式 Hadoop的处理功能来⾃MapReduce引擎。MapReduce的处理技术符合使⽤键值对的map、shuffle、reduce算法要求。基本处理过程 包括: · 从HDFS⽂件系统读取数据集 · 将数据集拆分成⼩块并分配给...

    大数据定义.doc

    Hadoop的MapReduce包括了两个阶段:向多个服务器和操作系统分发数据,即map阶段, 然后重组并行计算结果,即reduce阶段。 Hadoop利用自身的分布式文件系统(HDFS)来存储数据,这使得多个计算节点能获取数 据。一个...

    Spark的架构概述(章节一)

    Spark在做数据的批处理计算,计算性能大约是Hadoop MapReduce的10~100倍,因为Spark使用比较先进的基于DAG 任务调度(有向无环计算),可以将一个任务拆分成若干个阶段,然后将这些阶段分批次交给集群计算节点处理。...

    云计算读书报告.docx

    云计算相关的主要有虚拟化技术,SaaS服务模式,分布式文件系统,非关系型数据库,MapReduce编程模型,hadoop架构。其主要代表作品有Google的云计算产品和技术,Microsoft云+端技术,以及各种SaaS软件应用实例,下面...

    FusionInsightHD华为大数据平台.pdf

    其基本原理是将HQL语⾔⾃动转 换成MapReduce任务,从⽽完成对Hadoop集群中存储的海量数据进⾏查询和分析。 Hive为单实例的服务进程,提供服务的原理是将HQL编译解析成相应的MapReduce或者HDFS任务,下图为Hive的结构...

    大数据技术概述.pdf

    采⽤分⽽治之思想,并⾮所有任务都可以分⽽治之。 YARN实现⼀个集群多个框架,例如⼀千台机器,同时部署了三个框架(MapReduce、Storm、Impala),会产⽣打架,有三个管家去底 层强CPU资源。如果三个产品只接受⼀个...

    大数据技术-题库.pdf

    ⼤数据技术 ⼤数据技术-题库 题库 ⼤数据技术-题库 1、第⼀次信息... A、 存储被拆分的数据块 B、 协调数据计算任务 C、 负责协调集群中的数据存储 D、 负责执⾏由 JobTracker 指派的任务 24、Hadoop 最初是由谁创建的

Global site tag (gtag.js) - Google Analytics