热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hadoop源码解析6

Hadoop源码解析-6MapReduce源码解析Job提交流程源码和切片源码详解Job提交流程源码详解waitForCompletion()submit(); 1建立连接 con


Hadoop源码解析-6

MapReduce源码解析


Job提交流程源码和切片源码详解




  • Job提交流程源码详解

    waitForCompletion()
    submit();
    // 1建立连接
     connect(); 
      // 1)创建提交Job的代理
      new Cluster(getConfiguration());
       // (1)判断是本地运行环境还是yarn集群运行环境
       initialize(jobTrackAddr, conf); 
    // 2 提交job
    submitter.submitJobInternal(Job.this, cluster)
     // 1)创建给集群提交数据的Stag路径
     Path jobStagingArea = JobSubmissionFiles.getStagingDir(cluster, conf);
     // 2)获取jobid ,并创建Job路径
     JobID jobId = submitClient.getNewJobID();
     // 3)拷贝jar包到集群
    copyAndConfigureFiles(job, submitJobDir); 
     rUploader.uploadFiles(job, jobSubmitDir);
     // 4)计算切片,生成切片规划文件
    writeSplits(job, submitJobDir);
      maps = writeNewSplits(job, jobSubmitDir);
      input.getSplits(job);
     // 5)向Stag路径写XML配置文件
    writeConf(conf, submitJobFile);
     conf.writeXml(out);
     // 6)提交Job,返回提交状态
    status = submitClient.submitJob(jobId, submitJobDir.toString(), job.getCredentials());





  • FileInputFormat切片源码解析(input.getSplits(job))






5.2 MapTask & ReduceTask源码解析




  • MapTask源码解析流程


    =================== MapTask ===================

    context.write(k, NullWritable.get()); //自定义的map方法的写出,进入

    output.write(key, value);

    ​ //MapTask727行,收集方法,进入两次

    collector.collect(key, value,partitioner.getPartition(key, value, partitions));

    ​ HashPartitioner(); //默认分区器

    collect() //MapTask1082行 map端所有的kv全部写出后会走下面的close方法

    ​ close() //MapTask732行

    ​ collector.flush() // 溢出刷写方法,MapTask735行,提前打个断点,进入

    sortAndSpill() //溢写排序,MapTask1505行,进入

    sorter.sort() QuickSort //溢写排序方法,MapTask1625行,进入

    mergeParts(); //合并文件,MapTask1527行,进入


    collector.close(); //MapTask739行,收集器关闭,即将进入ReduceTask






  • ReduceTask源码解析流程

    =================== ReduceTask ===================
    if (isMapOrReduce())  //reduceTask324行,提前打断点
    initialize()   // reduceTask333行,进入
    init(shuffleContext);  // reduceTask375行,走到这需要先给下面的打断点
            totalMaps = job.getNumMapTasks(); // ShuffleSchedulerImpl第120行,提前打断点
             merger = createMergeManager(context); //合并方法,Shuffle第80行
       // MergeManagerImpl第232 235行,提前打断点
       this.inMemoryMerger = createInMemoryMerger(); //内存合并
       this.onDiskMerger = new OnDiskMerger(this); //磁盘合并
    rIter = shuffleConsumerPlugin.run();
      eventFetcher.start();  //开始抓取数据,Shuffle第107行,提前打断点
      eventFetcher.shutDown();  //抓取结束,Shuffle第141行,提前打断点
      copyPhase.complete();   //copy阶段完成,Shuffle第151行
      taskStatus.setPhase(TaskStatus.Phase.SORT);  //开始排序阶段,Shuffle第152行
     sortPhase.complete();   //排序阶段完成,即将进入reduce阶段 reduceTask382行
    reduce();  //reduce阶段调用的就是我们自定义的reduce方法,会被调用多次
     cleanup(context); //reduce完成之前,会最后调用一次Reducer里面的cleanup方法





原文链接:https://www.cnblogs.com/fengxiaolong/p/15822316.html



推荐阅读
  • MapReduce 切片机制源码分析
     总体来说大概有以下2个大的步骤1.连接集群(yarnrunner或者是localjobrunner)2.submitter.submitJobInternal()在该方法中会创建 ... [详细]
  • mapreduce源码分析总结
    这篇文章总结的非常到位,故而转之一MapReduce概述MapReduce是一个用于大规模数据处理的分布式计算模型,它最初是由Google工程师设计并实现的ÿ ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • Nginxgaodaima.comnginx属于七层架构,支持的是http协议,本身对tcp协议没有支持。所以不能代理mysql等实现负载均衡。但是lvs这个东西不熟悉,主要是公司 ... [详细]
  • MapReduce工作流程最详细解释
    MapReduce是我们再进行离线大数据处理的时候经常要使用的计算模型,MapReduce的计算过程被封装的很好,我们只用使用Map和Reduce函数,所以对其整体的计算过程不是太 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • AFNetwork框架(零)使用NSURLSession进行网络请求
    本文介绍了AFNetwork框架中使用NSURLSession进行网络请求的方法,包括NSURLSession的配置、请求的创建和执行等步骤。同时还介绍了NSURLSessionDelegate和NSURLSessionConfiguration的相关内容。通过本文可以了解到AFNetwork框架中使用NSURLSession进行网络请求的基本流程和注意事项。 ... [详细]
  • Jboss的EJB部署描述符standardjaws.xml配置步骤详解
    本文详细介绍了Jboss的EJB部署描述符standardjaws.xml的配置步骤,包括映射CMP实体EJB、数据源连接池的获取以及数据库配置等内容。 ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
  • MR程序的几种提交运行模式本地模型运行1在windows的eclipse里面直接运行main方法,就会将job提交给本地执行器localjobrunner执行-- ... [详细]
  • 《Spark核心技术与高级应用》——1.2节Spark的重要扩展
    本节书摘来自华章社区《Spark核心技术与高级应用》一书中的第1章,第1.2节Spark的重要扩展,作者于俊向海代其锋马海平,更多章节内容可以访问云栖社区“华章社区”公众号查看1. ... [详细]
  • 前言折腾了一段时间hadoop的部署管理,写下此系列博客记录一下。为了避免各位做部署这种重复性的劳动,我已经把部署的步骤写成脚本,各位只需要按着本文把脚本执行完,整个环境基本就部署 ... [详细]
  • Zookeeper为分布式环境提供灵活的协调基础架构。ZooKeeper框架支持许多当今最好的工业应用程序。我们将在本章中讨论ZooKeeper的一些最显着的应用。雅虎ZooKee ... [详细]
  • Azkaban(三)Azkaban的使用
    界面介绍首页有四个菜单projects:最重要的部分,创建一个工程,所有flows将在工程中运行。scheduling:显示定时任务executing:显示当前运行的任务histo ... [详细]
author-avatar
渡船毛_699
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有