`
qianshangding
  • 浏览: 129175 次
  • 性别: 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 eclipse mapreduce下开发所有需要用到的JAR包

    它将复杂的分布式计算任务分解为两个主要阶段:Map阶段和Reduce阶段。Eclipse通过特定的插件与Hadoop相结合,使得开发者可以在本地环境中编写、测试和调试MapReduce作业,然后部署到Hadoop集群上运行。 标题提到的...

    hadoop mapreduce 例子项目,运行了单机wordcount

    Hadoop MapReduce是一种分布式计算框架,它允许在大型数据集上进行并行处理。这个例子项目是关于在单机环境中运行WordCount程序的,这是一个经典的MapReduce示例,用于统计文本文件中每个单词出现的次数。 首先,让...

    Hadoop_MapReduce云计算技术手册

    MapReduce是一种基于数据流模型的编程模型,用于处理大规模数据集的并行计算任务。它主要通过两个阶段来完成数据处理任务:Map阶段和Reduce阶段。 - **Map阶段**: - **功能**:Map函数接受输入数据集中的键值对,...

    windows下配置hadoop和mapreduce.pdf

    其核心思想是将任务分成两部分: 1. **Map 阶段:** - 将输入数据分割成小块,每个小块由不同的处理器(节点)并行处理。 - 每个处理器生成键值对作为中间结果。 2. **Reduce 阶段:** - 将所有处理器产生的...

    大数据-Hadoop-MapReduce介绍

    Hadoop MapReduce 是一种软件框架,用于轻松编写应用程序,这些应用程序在大型硬件集群上处理大规模数据集。MapReduce 框架由两部分组成:一个通常在多台计算机上并行运行的 Map 函数,以及一个通常也在多台计算机上...

    Hadoop技术MapReduce简介共8页.pdf.zi

    MapReduce是Apache Hadoop生态系统中的核心组件之一,它是一种分布式计算模型,用于处理和生成大规模数据集。在本文中,我们将深入探讨MapReduce的工作原理、关键概念以及它在Hadoop框架中的作用。 MapReduce的核心...

    Hadoop中的HDFS和Mapreduce

    MapReduce通过抽象出通用的数据处理模式,简化了这些任务的实现。 - **用户接口**:MapReduce提供了两个主要的函数:`map` 和 `reduce`。用户需要实现这两个函数来定义数据处理的具体逻辑。 ```java map(in_key...

    基于mapreduce的小型电影推荐系统

    MapReduce是大数据处理的一种核心工具,常与Hadoop生态系统一起使用,能高效地处理大规模数据。MySQL作为关系型数据库,用于存储用户信息、电影数据以及用户行为记录。JSP(JavaServer Pages)则用于生成动态网页,...

    hadoop文档, hdfs mapreduce,环境搭建,例子介绍等

    MapReduce通过将任务分解为Map和Reduce两个阶段来简化并行处理过程。Map阶段负责将输入数据切分成小块并进行处理,Reduce阶段负责汇总处理结果。 #### 三、Hadoop环境搭建 Hadoop的环境搭建可以分为三种模式:单机...

    MapReduce 设计模式

    Hadoop是一个开源框架,支持分布式存储和计算,MapReduce是Hadoop的核心组件之一。 3. MapReduce案例分析:通过“Hadoop Example: WordCount”展示了如何使用MapReduce编程模型来实现一个简单的词频统计程序。这是...

    MapReduce设计模式

    在MapReduce编程模式中,程序由两个主要的处理阶段组成:Map阶段和Reduce阶段。Map阶段处理输入数据并产生一系列中间键值对,而Reduce阶段则将这些中间键值对按照键进行合并,以得到最终的输出结果。例如,一个基本...

    基于Apriori算法的频繁项集Hadoop mapreduce.rar

    MapReduce是Google提出的一种分布式计算模型,它将大规模数据处理的任务分解为两个主要步骤:Map(映射)和Reduce(规约)。在Apriori算法的Map阶段,数据通常被切分成多个键值对,其中键可能是商品ID,值则包含该...

    Hadoop技术内幕 深入解析mapreduce架构设计与实现原理

    这两种操作通过将数据分布到多个节点上并行执行来提高数据处理效率。 **2.1 Map阶段** 在Map阶段,输入的数据被拆分成一系列键值对的形式。每个Map任务负责处理一部分输入数据,并将其转换为新的键值对。这些键值...

    Hadoop MapReduce Cookbook

    从提供的文件信息中,我们可以提取以下关于《Hadoop MapReduce Cookbook》这本书的知识点: 1. Hadoop MapReduce和HDFS的安装:本书将指导读者如何安装Hadoop MapReduce和Hadoop分布式文件系统(HDFS),以便开始...

    Hadoop-MapReduce-Distributed-Grep:使用 Hadoop MapReduce 实现分布式 grep

    在大数据处理领域,Hadoop MapReduce 是一种广泛使用的计算框架,它允许我们处理海量数据集。本项目“Hadoop-MapReduce-Distributed-Grep”旨在实现一个分布式 grep 操作,这是对传统 grep 命令的扩展,适用于大规模...

    HadoopMapReduce:数据集链接的Hadoop MapReduce实践问题

    标题中的“Hadoop MapReduce:数据集链接的Hadoop MapReduce实践问题”表明我们将探讨如何在Hadoop MapReduce框架中处理数据集之间的连接操作。在大数据处理领域,数据集链接是常见的任务,例如用于合并来自不同来源...

    Hadoop+HDFS和MapReduce架构浅析

    本文旨在深入剖析Hadoop中的两大核心组件——HDFS(Hadoop Distributed File System)和MapReduce的工作原理及其实现机制。首先,我们将介绍Hadoop NameNode与DataNode的基本运行模式;随后,将重点分析MapReduce的...

Global site tag (gtag.js) - Google Analytics