`
brandNewUser
  • 浏览: 457083 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MapReduce启动的Map/Reduce子任务简要分析

阅读更多
 
对于Hadoop来说,是通过在DataNode中启动Map/Reduce java进程的方式来实现分布式计算处理的,那么就从源码层简要分析一下hadoop中启动Map/Reduce任务的过程。
 
首先,对于Map/Reduce端启动的任务,都是通过一些参数来控制java opts的,mapreduce.map.java.opts,mapreduce.reduce.java.opts,这些参数都在MRJobConfig类中,拿map.java.opts举例来说,org.apache.hadoop.mapred.MapReduceChildJVM类中使用了这个参数,用来构造Map或Reduce端的JVM,在下面方法中拿到了ChildJavaOpts:
 
private static String getChildJavaOpts(JobConf jobConf, boolean isMapTask)
 
 
如果是MapTask,JavaOpts的获得具体方法内容如下(Reduce端逻辑基本一致):
 
if (isMapTask) {
      userClasspath =
          jobConf.get(
              JobConf.MAPRED_MAP_TASK_JAVA_OPTS,
              jobConf.get(
                  JobConf.MAPRED_TASK_JAVA_OPTS,
                  JobConf.DEFAULT_MAPRED_TASK_JAVA_OPTS)
          );
      adminClasspath =
          jobConf.get(
              MRJobConfig.MAPRED_MAP_ADMIN_JAVA_OPTS,
              MRJobConfig.DEFAULT_MAPRED_ADMIN_JAVA_OPTS);

    // Add admin classpath first so it can be overridden by user.
    return adminClasspath + " " + userClasspath;
 
 
userClassPath按照下面的参数顺序获得:
mapreduce.map.java.opts, 
mapred.child.java.opts, 
DEFAULT_MAPRED_TASK_JAVA_OPTS = "-Xmx200m”;
 
 
adminClassPath要获得的参数的基本顺序:
mapreduce.admin.map.child.java.opts,
DEFAULT_MAPRED_ADMIN_JAVA_OPTS ="-Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN ";
 
 
最后,由于在JVM启动的参数中,后面能够覆盖掉前面的,因此userClassPath的同个选项的设置是可以覆盖adminClassPath,adminClassPath是不能保证所有参数不能被覆盖。
 
从源码端向上走,跳转到方法:
 
public static List<String> getVMCommand(InetSocketAddress taskAttemptListenerAddr, Task task, ID jvmID)
 
 
从这个方法中可以看到一个隐藏的设置,如果在选项中使用了@taskid@,是可以被替换成具体的attemptID的。
 
String javaOpts = getChildJavaOpts(conf, task.isMapTask());
javaOpts = javaOpts.replace("@taskid@", attemptID.toString());
 
 
代码中也以GC为例子,在注释中举例说明用法:
 
   
 // Add child (task) java-vm options.
    //
    // The following symbols if present in mapred.{map|reduce}.child.java.opts
    // value are replaced:
    // + @taskid@ is interpolated with value of TaskID.
    // Other occurrences of @ will not be altered.
    //
    // Example with multiple arguments and substitutions, showing
    // jvm GC logging, and start of a passwordless JVM JMX agent so can
    // connect with jconsole and the likes to watch child memory, threads
    // and get thread dumps.
    //
    //  <property>
    //    <name>mapred.map.child.java.opts</name>
    //    <value>-Xmx 512M -verbose:gc -Xloggc:/tmp/@taskid@.gc \
    //           -Dcom.sun.management.jmxremote.authenticate=false \
    //           -Dcom.sun.management.jmxremote.ssl=false \
    //    </value>
    //  </property>
    //
    //  <property>
    //    <name>mapred.reduce.child.java.opts</name>
    //    <value>-Xmx 1024M -verbose:gc -Xloggc:/tmp/@taskid@.gc \
    //           -Dcom.sun.management.jmxremote.authenticate=false \
    //           -Dcom.sun.management.jmxremote.ssl=false \
    //    </value>
    //  </property>
    //
 
一般情况下,我们在打印gc日志时,需要用-Xloggc:指定具体的目录,但是在MapReduce任务中你无法指定,因为可能两个Map会在同一台机器上执行,那样就肯定会发生gc文件覆盖,而实用@taskid@就可以避免这个问题。同样适用于OOM导致的堆栈打印避免文件意外被覆盖。
 
还会默认增加一个参数,用来设置java的临时文件夹(所有临时文件的建立都在这个文件夹,比如File.createTempFile):
 
    vargs.add("-Djava.io.tmpdir=" + childTmpDir);
 
 
主类为:
 
org.apache.hadoop.mapred.YarnChild
 
 
一个YarnChild进程的最终完整命令为:
/usr/java/jdk1.7.0_11//bin/java -Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN -Xmx2048M -Djava.io.tmpdir=/home/data5/hdfsdir/nm-local-dir/usercache/xxx/appcache/application_1413206225298_36914/container_1413206225298_36914_01_000098/tmp -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=/home/workspace/hadoop/logs/userlogs/application_1413206225298_36914/container_1413206225298_36914_01_000098 -Dyarn.app.container.log.filesize=209715200 -Dhadoop.root.logger=INFO,CLA org.apache.hadoop.mapred.YarnChild 192.168.7.26 21298 attempt_1413206225298_36914_r_000001_0 98
 
 
从源码端来分析该命令是如何生成的:
 
  • $JAVA_HOME: /usr/java/jdk1.7.0_11/
  • 源码中写死: /bin/java
  • mapreduce.admin.map.child.java.opts:如果不设置,使用-Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN;
  • mapreduce.map.java.opts: Xmx2048M;
  • 源码中添加:-Djava.io.tmpdir=/home/data5/hdfsdir/nm-local-dir/usercache/tong/appcache/application_1413206225298_36914/container_1413206225298_36914_01_000098/tmp;
  • org.apache.hadoop.mapred.MapReduceChildJVM.setLog4jProperties中设置log4j,包括日志级别,日志大小等:-Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=/home/workspace/hadoop/logs/userlogs/application_1413206225298_36914/container_1413206225298_36914_01_000098 -Dyarn.app.container.log.filesize=209715200 -Dhadoop.root.logger=INFO,CLA;
  • 主类:org.apache.hadoop.mapred.YarnChild;
  • TaskAttempt的主机地址:192.168.7.xx;
  • TaskAttempt的主机端口:212xx;
  • TaskAttempt ID:attempt_1413206225298_36914_r_000001_0;
  • JVMID:98(这是干啥的不太清楚);
 
最后将进程的正常和异常输出重定向:
 
// Finally add the jvmID
    vargs.add("1>" + getTaskLogFile(TaskLog.LogName.STDOUT));
    vargs.add("2>" + getTaskLogFile(TaskLog.LogName.STDERR));
 
 
 
 
 
 
 
 
分享到:
评论

相关推荐

    hadoop 2.9.0 mapred-default.xml 属性集

    定义Reduce任务中可用于拉取Map输出数据的输入缓冲区大小的百分比。 41. mapreduce.reduce.shuffle.memory.limit.percent 定义用于Shuffle的内存限制的百分比。 42. mapreduce.shuffle.ssl.enabled 指示是否使用...

    Hadoop源代码分析(类TaskStatus)

    Hadoop是一款能够高效处理大规模数据集的分布式计算框架,其核心组成部分之一就是MapReduce引擎,它通过Map和Reduce两个基本步骤来实现数据的并行处理。在这一过程中,任务的状态管理至关重要,而`TaskStatus`类正是...

    Hadoop命令大全

    7. **启动Map/Reduce** ``` $bin/start-mapred.sh ``` 类似于启动HDFS的脚本,该命令启动MapReduce服务,包括JobTracker和所有由`slaves`配置文件列出的TaskTracker。 8. **停止HDFS** ``` $bin/stop-dfs.sh ...

    2020最新-02_第二阶段 hadoop体系之离线计算.txt

    - **Shuffle过程**:Map任务完成后,将中间结果按照键值进行分区和排序,然后传递给Reduce任务。 - **Reduce任务**:每个Reduce任务将接收到相同键的所有值,并对其进行汇总处理,最终生成输出结果。 #### 3. ...

    mrsub:基于 MapReduce 的频繁子图发现

    MapReduce由Google提出,其核心思想是将复杂的分布式计算过程分为两个主要阶段:Map阶段和Reduce阶段。Map阶段负责数据的预处理,将原始输入数据分割成一系列键值对;Reduce阶段则将Map阶段生成的中间结果进行聚合,...

    Hadoop权威指南(原版).pdf

    - **Map和Reduce**:MapReduce将大数据处理过程分为两个阶段:Map阶段负责将原始数据拆分成多个子任务进行处理;Reduce阶段则负责汇总各个子任务的结果,生成最终输出。 - **Java MapReduce**:提供了详细的Java API...

    hadoop-mapreduce-examples

    使用eclipse和maven的Hadoop Mapreduce示例:日志文件分析:本文简要概述了如何使用Eclipse和maven应用map reduce来计算每天发生的日志消息类型的数量。 先决条件: • 虚拟机上的Hadoop 设置。 • Java 版本 6 ...

    Hadoop学习网址

    - **性能调优**: 分析了影响MapReduce任务性能的因素,并提出了一些有效的优化策略。 #### 七、Hadoop Hive SQL 语法解释 - **网址**: [Hadoop Hive SQL 语法解释](http://jeffxie.blog.51cto.com/1365360/317524)...

    mapretuce的WordCount例子

    它将大型任务分解为小规模的Map任务和Reduce任务,这些任务在多台节点上并行执行,以提高处理效率。 在WordCount案例中,Mapper负责读取输入数据(通常是文本文件),对每一行进行切分,生成键值对&lt;单词,1&gt;。这个...

    Google_三大论文中文版

    - **核心算法**:MapReduce通过两个主要阶段——Map阶段和Reduce阶段——来处理数据。 - **Map阶段**:将输入数据分割成小块,每个小块被单独处理,并输出一系列中间键值对。 - **Reduce阶段**:将来自Map阶段的...

    hadoop学习笔记

    本学习笔记主要涵盖了Hadoop的基本概念、MapReduce计算模型以及HDFS分布式文件系统的深入解析,并对比了Hadoop与其他数据分析方式的区别,同时还涉及到了Hive作为数据仓库工具的简要介绍。 一、背景 随着互联网的...

    Hadoop二次开发必懂

    MapTask和ReduceTask是Hadoop MapReduce框架中的核心类,负责执行Map和Reduce任务。MapTask接收InputSplit,通过反射机制创建InputSplit实例,然后运行Mapper。ReduceTask则负责接收和处理来自多个Map任务的中间结果...

    阴影:在MapReduce中利用有效改组的选择能力

    在了解“阴影:在MapReduce中利用有效改组的选择能力”这一研究课题之前,我们首先需要对MapReduce框架进行简要介绍。MapReduce是一个由Google开发的编程模型和处理大规模数据集的相关实现,它允许开发者在不了解...

    大数据云计算利器:Hadoop The Definitive Guide,2Ed.pdf

    它允许开发者编写Map(映射)函数和Reduce(归约)函数来处理数据集。这种模型特别适合于处理大数据集,因为其工作原理是将复杂计算分解为多个可并行处理的小任务。 6. Hadoop实践应用 本书强调实践应用,从基础的...

    大数据基础-题库带答案.pdf

    9. **MapReduce**:MapReduce是处理大规模数据的编程模型,包括Map阶段(数据切分和映射)和Reduce阶段(数据聚合和总结)。它可以并行处理任务,提高计算效率。 10. **ZooKeeper**:ZooKeeper是一个分布式的协调...

    基于云计算的智能图书馆数据管理研究.pdf

    Map的工作原理是将复杂的任务分解为多个小任务,保证这些小任务能在单个计算机上运行,从而提高数据存储和分析的效率。Reduce的工作原理是将Map阶段得到的中间结果进行汇总和合并,最终得到最终的计算结果。...

    Hadoop Yarn - Apache - Cloudera - APIs

    - **并发度调整**:根据任务特点调整map和reduce的并发数量。 - **缓存机制**:优化缓存策略,减少磁盘I/O操作。 #### 九、配置检查 - **Cloudera Manager中的属性设置**:利用Cloudera Manager界面配置相关属性。...

    Hadoop大数据开发基础_教案.rar

    第四章《MapReduce入门编程》深入MapReduce编程模型,解析Map和Reduce阶段的工作原理。这一章通过实例演示如何编写Java MapReduce程序,讲解输入输出格式、分区器、Combiner等相关概念,帮助理解MapReduce的执行流程...

    Hadoop权威指南[第三版:英文版]

    - **优化技巧**:书中还介绍了多种优化MapReduce作业性能的方法,例如使用Combiner减少网络传输的数据量、合理设置map和reduce任务的数量等。 #### 四、Hadoop生态系统扩展组件 - **HBase**:基于Hadoop的一个...

    Hadoop 大数据入门必备资料

    MapReduce将处理过程分为两个阶段:Map(映射)阶段和Reduce(归约)阶段。在Map阶段,系统将输入数据分割为独立的块,然后由Map函数处理,生成一系列中间的键值对。在Reduce阶段,系统会将具有相同键的所有中间值...

Global site tag (gtag.js) - Google Analytics