Hadoop源码分析——JobClient

2023-05-16

1. MapReduce作业处理过程概述

当用户使用Hadoop的Mapreduce计算模型来进行处理问题时,用户只需要定义所需的Mapper和Reduce处理函数,还有可能包括的Combiner、Comparator、Partition等函数;之后,新建一个Job对象,并Job的运行环境进行相应的配置,最后调用Job的waitForCompletion或者submit方法提交作业。具体代码结构如下:

//新建默认的Job配置对象
Configuration conf = new Configuration(true);
conf.set("fs.defaultFS", "hdfs://node02:8020");//远程提交设置HDFS主机域名及端口号
conf.set("yarn.resourcemanager.hostname", "node02:8088");//远程提交设置yarn主机域名及端口号
//根据配置对象创建一个Job对象
Job job = Job.getInstance(conf);
//hadoop通过指定类名找到包含该类的jar
job.setJarByClass(主类名.class);
job.setMapperClass(Mapper实现类.class);
job.setCombinerClass(作为Combiner的Reducer实现类.class);//如果需要才会设置
job.setReducerClass(Reducer实现类.class);
job.setOutputKeyClass(输出key的数据类型.class);
job.setOutputValueClass(输出value的数据类型.class);
//input,output
Path input = new Path("设置作业的输入路径");
FileInputFormat.addInputPath(job, input);
Path output = new Path("设置作业的输出路径");
FileOutputFormat.setOutputPath(job, output );
//将作业交给集群处理
job.waitForCompletion(true);

job的waitForCompletion方法内部实际上是依靠JobClient来向JobTracker来提交作业的。当JobTracker接收到JobClient的提交作业的请求后,将会作业加入到作业队列中,之后会返回给JobClient一个用于唯一标识该作业的JobID对象。JobTracker作业队列中的作业任务会由TaskTracker来执行。TaskTracker会定期向JobTracker发送心跳,查询JobTracker是否有作业需要执行。当TaskTracker接收到任务之后,会在本地启动一个Task来执行任务。

2. MapReduce作业的配置信息——JobConf

JobConf所在的包位于org.apache.hadoop.mapred。该类集成自Configuration,它在原有的Hadoop的Configuration基本信息的基础上加入了与MapReduce作业相关的配置信息。Job继承自JobContext类,而JobContext中有个protected final org.apache.hadoop.mapred.JobConf conf的成员变量,所以Job内部会调用JobConf的方法来完成该MapReduce作业的配置,比如Job中setInputFormatClass设置作业输入格式的方法:

  public void setInputFormatClass(Class<? extends InputFormat> cls
                                  ) throws IllegalStateException {
    ensureState(JobState.DEFINE);
    conf.setClass(INPUT_FORMAT_CLASS_ATTR, cls, 
                  InputFormat.class);
  }

2.1 静态代码块

  static{
    ConfigUtil.loadResources();
  }

2.2 成员变量

//标识用于运行Mapper或Reducer任务的内存是否受限制,默认-1不受限制
public static final long DISABLED_MEMORY_LIMIT = -1L;
//与mapred.local.dir配置项对于的常量字符串
public static final String MAPRED_LOCAL_DIR_PROPERTY = MRConfig.LOCAL_DIR;
//用于设置Job将被默认提交到的队列的名称,默认default
public static final String DEFAULT_QUEUE_NAME = "default";
//用于设置运行Mapper任务的内存大小配置项
static final String MAPREDUCE_JOB_MAP_MEMORY_MB_PROPERTY = JobContext.MAP_MEMORY_MB;
//用于设置运行Reducer任务的内存大小配置项
static final String MAPREDUCE_JOB_REDUCE_MEMORY_MB_PROPERTY = JobContext.REDUCE_MEMORY_MB;
//运行Mapper和Reducer的默认选项,默认只会设置堆内存的最大值为200MB
public static final String DEFAULT_MAPRED_TASK_JAVA_OPTS = "-Xmx200m";
.....

2.3 成员方法

该类的大部分方法都是用于设置和获取与该作业相关的配置项的set和get方法,此外还有几个工具方法:

public static String findContainingJar(Class my_class) {
    //调用工具类的方法  
    return ClassUtil.findContainingJar(my_class);
}
/*
 * ClassUtil工具类
 */
public class ClassUtil {
  public static String findContainingJar(Class<?> clazz) {
      //取得加载该Class类的ClassLoader类加载器
    ClassLoader loader = clazz.getClassLoader();
      //取得该Class所对应的类文件的名称
    String classFile = clazz.getName().replaceAll("\\.", "/") + ".class";
    try {
        //循环遍历ClassLoader所加载的包含于该Class所对应的class文件的资源
      for(final Enumeration<URL> itr = loader.getResources(classFile);
          itr.hasMoreElements();) {
          //将加载的资源转换为URL格式
        final URL url = itr.nextElement();
          //如果资源的URL所使用的协议接口为jar,则表明该资源是个jar包,然后取得该jar所对应的路径信息
        if ("jar".equals(url.getProtocol())) {
          String toReturn = url.getPath();
          if (toReturn.startsWith("file:")) {
            toReturn = toReturn.substring("file:".length());
          }
          toReturn = URLDecoder.decode(toReturn, "UTF-8");
          return toReturn.replaceAll("!.*$", "");
        }
      }
    } catch (IOException e) {
      throw new RuntimeException(e);
    }
    return null;
  }
}

3. JobSubmissionProtoco接口

4. RunningJob接口

5. JobStatus、JobProfile、JobSubmissionFiles

5. 提交Job的客户端——JobClient

JobClient是用户作业和JobTracker进行交互的接口。JobClient为用户提供了用户提交作业、跟踪作业的处理进度、访问组成作业的工作日志、取得MapReduce集群的状态信息等方法。

5.1 静态代码块

  static{
    ConfigUtil.loadResources();
  }

5.2 成员变量

5.3 内部类

static class NetworkedJob implements RunningJob {
    ......
}

5.4 成员方法

//JobClient的构造方法会首先调用init()方法来完成初始化操作
public void init(JobConf conf) throws IOException {
    ......
}
//job的提交过程
 public RunningJob submitJobInternal(final JobConf conf)
      throws FileNotFoundException, IOException {
          ......
  }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hadoop源码分析——JobClient 的相关文章

随机推荐

  • Android模拟器检测常用方法

    在Android开发过程中 xff0c 防作弊一直是老生常谈的问题 xff0c 而模拟器的检测往往是防作弊中的重要一环 xff0c 接下来有关于模拟器的检测方法 xff0c 和大家进行一个简单的分享 1 传统的检测方法 传统的检测方法主要是
  • RecyclerView 隐藏部分分割线

    在项目中遇到复杂点的RecyclerView xff0c 可能会有隐藏部分分割线的需求 xff0c 例如item1和item3之间的分割线隐藏 xff0c item4和item5之间的分割线隐藏等 在看了文档里的ItemDecoration
  • 浅谈去中心化应用

    1 中心化应用 现在我们所使用的应用基本上都是中心化的应用 xff0c 什么是中心化应用呢 xff0c 举个栗子 xff0c 我们在天猫买东西的时候 xff0c 需要先付款给支付宝 xff0c 然后卖家发货 xff0c 我们确认收货之后 x
  • Java二分搜索树及其添加删除遍历

    对于树这种结构 xff0c 相信大家一定耳熟能详 xff0c 二叉树 二分搜索树 AVL树 红黑树 线段树 Trie等等 xff0c 但是对于树的应用以及编写一棵解决特定问题的树 xff0c 不少同学都会觉得不是一件简单的事情 xff0c
  • 游戏平台SDK设计和开发之旅——XSDK功能点梳理

    做游戏开发或者相关工作的同学 xff0c 可能都知道 xff0c 在游戏上线之前 xff0c 需要将游戏分发到各大渠道平台 xff0c 比如九游 xff0c 百度 xff0c 360 xff0c 华为等等 其中和技术相关的事情 xff0c
  • 谈谈 GitHub 开放私有仓库一事的影响

    GitHub 此次宣布免费开放私有仓库 xff0c 在我看来有以下几点影响 xff1a 缓和与同类产品间的竞争压力小部分个人项目由开源转闭源微软在技术社区中的企业形象进一步强化为未来的企业服务预热 下面根据以上几点 xff0c 我来简单谈下
  • 每天坚持刷 LeetCode 的人,究竟会变得有多强... 学习技巧都藏在这几个公众号里面了......

    信息爆炸时代 xff0c 与其每天被各种看过就忘的内容占据时间 xff0c 不如看点真正对你有价值的信息 xff0c 下面小编为你推荐几个高价值的公众号 xff0c 它们提供的信息能真正提高你生活的质量 人工智能爱好者社区 专注人工智能 机
  • 超酷炫!智能无人机中文教程重磅上线!

    前 言 对于大多数无人机爱好者来说 xff0c 能自己从头开始组装一台无人机 xff0c 之后加入 AI 算法 xff0c 能够航拍 xff0c 可以目标跟踪 xff0c 是心中的梦想 并且 xff0c 亲自从零开始完成复杂系统 xff0c
  • B 站硬件大佬又在 GitHub 上开源了一款神器...

    公众号关注 GitHubDaily 设为 星标 xff0c 每天带你逛 GitHub xff01 转自量子位 这次 xff0c 野生钢铁侠稚晖君带着他的硬核项目又来了 上次自制纯手工打造 AI 小电视 xff0c 播放量就超过 300 万
  • 用 C 语言来刷 LeetCode,网友直呼:那是真的牛批...

    公众号关注 GitHubDaily 设为 星标 xff0c 每天带你逛 GitHub xff01 大家好 xff0c 我是小 G 如果你是计算机科班出身 xff0c 那么 C 语言 xff0c 估计是你在初入编程时 xff0c 最早接触的编
  • 【pytorch torchvision源码解读系列—3】Inception V3

    框架中有一个非常重要且好用的包 xff1a torchvision xff0c 顾名思义这个包主要是关于计算机视觉cv的 这个包主要由3个子包组成 xff0c 分别是 xff1a torchvision datasets torchvisi
  • 【pytorch torchvision源码解读系列—5】DenseNet

    pytorch框架中有一个非常重要且好用的包 xff1a torchvision xff0c 顾名思义这个包主要是关于计算机视觉cv的 这个包主要由3个子包组成 xff0c 分别是 xff1a torchvision datasets to
  • Eclipse使用JDBC方式连接SQLServer2016

    Eclipse使用JDBC方式连接SQLServer2016 今天下午在查找很多JDBC连接SQL时发现大多数都是2012甚至更久以前的版本 xff0c 所以就此把步骤记录下来 xff0c 以免自己下次使用又忘记了 在连接的时候 xff0c
  • 魔改《自动化学报》Latex模板

    想用latex写一个中文文档 xff0c 看上了 自动化学报 的模板 xff0c 感觉不错 xff0c 下载下来在本地的tex live上编译 xff0c 报了一大串错 xff1b 上传到overleaf xff0c 还是报错 xff1b
  • TX2安装jetpack

    目前官网支持的下载为JetPack L4T 3 2 1 linux x64 b23和JetPack L4T 3 3 linux x64 b39 首先使用具有Ubuntu16 04的host主机 xff08 我使用的是个人笔记本 xff0c
  • TF-IDF算法

    TF IDF算法 TF IDF term frequency inverse document frequency 是一种用于信息检索与数据挖掘的常用加权技术 xff0c 常用于挖掘文章中的关键词 xff0c 而且算法简单高效 xff0c
  • 大数据009——MapReduce

    分布式离线计算框架MapReduce MapReduce是一种编程模型 Hadoop MapReduce采用Master slave 结构 只要按照其编程规范 xff0c 只需要编写少量的业务逻辑代码即可实现一个强大的海量数据并发处理程序
  • MapReduce实例——wordcount(单词统计)

    1 MR实例开发整体流程 最简单的MapReduce应用程序至少包含 3 个部分 xff1a 一个 Map 函数 一个 Reduce 函数和一个 main 函数 在运行一个mapreduce计算任务时候 xff0c 任务过程被分为两个阶段
  • MapReduce实例——好友推荐

    1 实例介绍 好友推荐算法在实际的社交环境中应用较多 xff0c 比如qq软件中的 你可能认识的好友 或者是Facebook中的好友推介 好友推荐功能简单的说是这样一个需求 xff0c 预测某两个人是否认识 xff0c 并推荐为好友 xff
  • Hadoop源码分析——JobClient

    1 MapReduce作业处理过程概述 当用户使用Hadoop的Mapreduce计算模型来进行处理问题时 xff0c 用户只需要定义所需的Mapper和Reduce处理函数 xff0c 还有可能包括的Combiner Comparator