文档章节

hive MapRedTask 调度分析

政委007
 政委007
发布于 2017/04/28 10:20
字数 588
阅读 20
收藏 1

承接上一篇博客:hive Derver类源码解析 本文介绍最常用的mapred任务调度过程。作为个人的学习笔记,没有很好的描述博客,大家将就着看吧,如果有什么问题欢迎留言交流。 上篇博客中 driver 的execute方法中调度了TaskRunner的 run方法或者runQuential方法,下边来看看这两个方法具体干了什么

TaskRunner.run()

@Override
  public void run() {
 
      runSequential();
     }
  }
  public void runSequential() {
    //调用抽象类Task 的 executeTask()方法
      exitVal = tsk.executeTask();
       result.setExitVal(exitVal, tsk.getException());
  }

抽象类Task 的executeTask() 方法

public int executeTask() {
        //调用抽象方法execute
      int retval = execute(driverContext);     
  }

这里特殊关照了一下Task的子类MapRedTask,下边具体解析MapRedTask的execute方法

MapRedTask 的execute方法

 public int execute(DriverContext driverContext) {

      //判断是否是本地mapred模式
      if (!ctx.isLocalOnlyExecutionMode() &&
          conf.getBoolVar(HiveConf.ConfVars.LOCALMODEAUTO)) {
      }
    //判断是否允许子类提交任务,,如果允许,继续向下执行,
//否则会调用父类ExecDriver的execute方法。在这里我被可耻的截胡了。😭。
// 父类方法是通过构建一个jobclient来提交任务,就像我们写其他mapreduce一样,,
//而下边的代码是通过hadoop -jar <jar包> <主类>的方法来提交任务,本质上和父类提交的过程类似。
      runningViaChild = conf.getBoolVar(HiveConf.ConfVars.SUBMITVIACHILD);
      if (!runningViaChild) {
        return super.execute(driverContext);
      }
       //简单关照一下这种方法提交mapreduce的方式,
      String jarCmd = hiveJar + " " + ExecDriver.class.getName() + libJarsOption;

      String cmdLine = hadoopExec + " jar " + jarCmd + " -plan "
          + planPath.toString() + " " + isSilent + " " + hiveConfArgs;

      executor = Runtime.getRuntime().exec(cmdLine, env, new File(workDir));
      //报告任务执行进度
    int exitVal = jobExecHelper.progressLocal(executor, getId());

    }
  

而ExecDriver中提交任务的方式

 JobClient jc = new JobClient(job);
    
      // Finally SUBMIT the JOB! 根据jobconf 生成RunningJob对象,
// 这是jobid已经存在
        //在底层调度到hadoop 的代码了,提交任务,到hadoop 
//,调用usergroupinfomation的doAs方法,生成job对象,提交任务,这里不会等到
      rj = jc.submitJob(job);
      // replace it back
      if (pwd != null) {
        HiveConf.setVar(job, HiveConf.ConfVars.METASTOREPWD, pwd);
      }
       //循环获取任务执行进度
      returnVal = jobExecHelper.progress(rj, jc, ctx.getHiveTxnManager());

简单显示一下mapred方法中对任务处理

public RunningJob submitJob(final JobConf conf) throws FileNotFoundException,
                                                  IOException {
    return submitJobInternal(conf);
  }

  @InterfaceAudience.Private
  public RunningJob submitJobInternal(final JobConf conf)
      throws FileNotFoundException, IOException {
    try {
      conf.setBooleanIfUnset("mapred.mapper.new-api", false);
      conf.setBooleanIfUnset("mapred.reducer.new-api", false);
      Job job = clientUgi.doAs(new PrivilegedExceptionAction<Job> () {
        @Override
        public Job run() throws IOException, ClassNotFoundException, 
          InterruptedException {
          Job job = Job.getInstance(conf);
          job.submit();
          return job;
        }
      });
      // update our Cluster instance with the one created by Job for submission
      // (we can't pass our Cluster instance to Job, since Job wraps the config
      // instance, and the two configs would then diverge)
      cluster = job.getCluster();
      return new NetworkedJob(job);
    } catch (InterruptedException ie) {
      throw new IOException("interrupted", ie);
    }
  }

© 著作权归作者所有

政委007
粉丝 10
博文 15
码字总数 15843
作品 0
洛阳
程序员
私信 提问
基于论坛的apachecommon日志分析项目开发步骤

项目描述 通过对技术论坛的apache common日志进行分析,计算论坛关键指标,供运营者决策。 项目设计 MapReduce程序计算KPI HBASE详单查询 HIVE数据仓库多维分析 开发步骤: 使用flume把日志数...

On the Way
2017/12/13
0
0
大数据平台网站日志分析系统

1:大数据平台网站日志分析系统,项目技术架构图: 2:大数据平台网站日志分析系统,流程图解析,整体流程如下:   ETL即hive查询的sql;   但是,由于本案例的前提是处理海量数据,因而,...

别叫小伙
2017/12/09
0
0
Hadoop概括——学习笔记转

前言 第一章主要讲的是hadoop基础知识。老师讲的还是比较全面简单的,起码作为一个非专业码农以及数据库管理人员,也能狗大致了解其特点 首先是概括图(以hadoop2.0为例) 一、Hadoop基础架构...

长征2号
2017/10/31
0
0
Hadoop生态系统

首先我们先了解一下Hadoop的起源。然后介绍一些关于Hadoop生态系统中的具体工具的使用方法。如:HDFS、MapReduce、Yarn、Zookeeper、Hive、HBase、Oozie、Mahout、Pig、Flume、Sqoop。 Hadoop...

huojiao2006
2017/03/06
0
0
使用kylin踩过的坑

我的kylin.properties配置: 1. 运行看Hive环境是否配置正确,提示找不到HCAT_HOME路径。 解决方法:export HCATHOME=$HIVEHOME/hcatalog 然后重新运行脚本 2. 在kylin web界面load hive表失...

aibati2008
2016/09/11
3.3K
0

没有更多内容

加载失败,请刷新页面

加载更多

分布式协调服务zookeeper

ps.本文为《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之一 ZooKeeper ZooKeeper曾是Apache Hadoop的一个子项目,是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它...

ls_cherish
今天
4
0
redis 学习2

网站 启动 服务端 启动redis 服务端 在redis 安装目录下 src 里面 ./redis-server & 可以指定 配置文件或者端口 客户端 在 redis 的安装目录里面的 src 里面 ./redis-cli 可以指定 指定 连接...

之渊
昨天
2
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
昨天
4
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
昨天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
昨天
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部