Hadoop源码解析之YARN客户端作业提交流程

Hadoop源码解析YARN服务端作业提交流程 RM接收到客户端作业提交请求时会通过RPC server做回应,其实客户端就是通过ApplicationClientProtocol的RPC客户端提交作业的,客户端提交流程参见Hadoop源码解析YARN客户端作业提交流程,在提交阶段的代码中,客户端在获取新的JobId时,会调用到服务端getNewApplication来获得一个GetNewApplicationResponse,该返回类中包 阅读详情

1. 简介

hadoop在1.x中是向JobTracker提交,而在2.x中换成了ResourceManager,客户端的代理对象也有所变动,换成了YarnRunner,但大致流程和1类似,主要的流程集中在JobSubmitter.submitJobInternal中,包括检测输出目录合法性,设置作业提交信息(主机和用户),获得JobID,向HDFS中拷贝作业所需文件(Job.jar Job.xml split文件等),最后执行作业提交。

2.源码解析

waitForCompletion函数用于提交作业,循环监控作业状态

public boolean waitForCompletion(boolean verbose) throws IOException, InterruptedException,   ClassNotFoundException {  
  if (state == JobState.DEFINE) {  
    submit();//提交  
  }  
  if (verbose) {  
    monitorAndPrintJob();  
  } else {  
    // get the completion poll interval from the client.  
    int completionPollIntervalMillis =   Job.getCompletionPollInterval(cluster.getConf());  
    while (!isComplete()) {  
      try {  
        Thread.sleep(completionPollIntervalMillis);  
      } catch (InterruptedException ie) {  
      }  
    }  
  }  
  return isSuccessful();  
}  
主要分析submit函数,来看作业是如何提交的,主要分为两个阶段

1、连接master 

2、作业提交

public void submit() throws IOException, InterruptedException, ClassNotFoundException {  
  ensureState(JobState.DEFINE);  
  setUseNewAPI();  
  //连接RM  
  connect();  
  final JobSubmitter submitter =  getJobSubmitter(cluster.getFileSystem(), cluster.getClient());  
  status = ugi.doAs(new PrivilegedExceptionAction<JobStatus>() {  
    public JobStatus run() throws IOException, InterruptedException,   ClassNotFoundException {  
        //提交作业  
      return submitter.submitJobInternal(Job.this, cluster);  
    }  
  });  
  state = JobState.RUNNING;  
  LOG.info("The url to track the job: " + getTrackingURL());  
}  
连接master时会建立Cluster实例,下面是Cluster构造函数,其中重点初始化部分

public Cluster(InetSocketAddress jobTrackAddr, Configuration conf)   throws IOException {  
  this.conf = conf;  
  this.ugi = UserGroupInformation.getCurrentUser();  
  initialize(jobTrackAddr, conf);  
}  

创建客户端代理阶段用到了java.util.ServiceLoader,目前2.5.2版本包含两个LocalClientProtocolProvider(本地作业) YarnClientProtocolProvider(Yarn作业),此处会根据mapreduce.framework.name的配置创建相应的客户端

private void initialize(InetSocketAddress jobTrackAddr, Configuration conf)  throws IOException {  
  synchronized (frameworkLoader) {  
    for (ClientProtocolProvider provider : frameworkLoader) {  
      LOG.debug("Trying ClientProtocolProvider : "  + provider.getClass().getName());  
      ClientProtocol clientProtocol = null;   
      try {  
        if (jobTrackAddr == null) {  
            //创建YARNRunner对象  
          clientProtocol = provider.create(conf);  
        } else {  
          clientProtocol = provider.create(jobTrackAddr, conf);  
        }  
        //初始化Cluster内部成员变量  
        if (clientProtocol != null) {  
          clientProtocolProvider = provider;  
          client = clientProtocol;  
          LOG.debug("Picked " + provider.getClass().getName()  + " as the ClientProtocolProvider");  
          break;  
        }  
        else {  
          LOG.debug("Cannot pick " + provider.getClass().getName()   + " as the ClientProtocolProvider - returned null protocol");  
        }  
      }   
      catch (Exception e) {  
        LOG.info("Failed to use " + provider.getClass().getName()  
            + " due to error: " + e.getMessage());  
      }  
    }  
  }  

  if (null == clientProtocolProvider || null == client) {  
    throw new IOException(  
        "Cannot initialize Cluster. Please check your configuration for "  
            + MRConfig.FRAMEWORK_NAME  
            + " and the correspond server 
Flink源码解析之:Flink On Yarn模式任务提交部署过程解析 阅读详情

相关推荐

lenovo联想拯救者Legion Y9000P 2022款2023款2024款笔记本电脑(82RF,82WK,82WQ,83DE,83DF)原装出厂Windows11预装OEM系统镜像下载

联想原装出厂系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、Office办公软件、联想电脑管家、联想浏览器、联想软件商店、legionzone控制中心等预装程序。链接:https://pan.baidu.com/s/1YBji_oh7xOkq-NxnS8Mm8g?链接:https://pan.baidu.com/s/1S7_enXmuoja1a9ASvUT5Fg?拯救者Legion Y9000P IRX9H 2024款【83DE】原厂Win11系统包。

QQ17855069的博客 6378

运行hbase出现mapreduce.Cluster: Failed to use org.apache.hadoop.mapred.YarnClientProtocolProvider due to

mapreduce.Cluster: Failed to use org.apache.hadoop.mapred.YarnClientProtocolProvider due toerror: Error in instantiating YarnClient java.io.IOException: Cannot initialize Cluster. Please check your configuration for mapreduce.framework.name and the corresp

CXA_DMXY的博客 647

Flink on Yarn 远程 debug 应用提交流程源码分析

采用flink 1.13.2版本对flink on yarn per-job 模式进行流程分析及源码调试

逆流而上Mr李 3022

Eclipse 开发Hadoop2.7.1可能会遇到的问题

安装Eclipse插件之类的问题我就不说了,网络上一大堆,基本上可以搞定,现在就说一下经常会遇到的问题。   1. org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security .AccessControlException: Permission denied: user=Administrato...

wypjack的博客 569

Mapreduce执行过程分析(基于Hadoop2.4)——(一)

1 概述 该瞅瞅MapReduce的内部运行原理了,以前只知道个皮毛,再不搞搞,不然怎么死的都不晓得。下文会以2.4版本中的WordCount这个经典例子作为分析的切入点,一步步来看里面到底是个什么情况。 2 为什么要使用MapReduce Map/Reduce,是一种模式,适合解决并行计算的问题,比如TopN、贝叶斯分类等。注意,是并行计算,而非迭代计算,像涉及到层次聚类的问题就不太适合了...

weixin_30420305的博客 410

Hadoop作业提交过程

1.JobClient调用FileInputFormat.getSplits(),如果数据文件是isSplitable()的话,会将大的文件分解成小的FileSplit,记录文件 在HDFS里的路径及偏移量和Split大小。这些信息会统一打包到jobFile的jar中。 2.JobClient然后使用submitJob(job)方法向master提交作业。submitJob(job)内部是通过...

流云 306

【学习笔记】大数据技术之Hadoop源码记录)

源码第0章 RPC通信原理解析第1章 NameNode启动源码解析1.1 启动9870端口服务1.2 加载镜像文件和编辑日志1.3 初始化NN的RPC服务端1.4 NN启动资源检查1.5 NN对心跳超时判断1.6 安全模式第2章 DataNode启动源码解析2.1 初始化DataXceiverServer2.2 初始化HTTP服务2.3 初始化DN的RPC服务端2.4 DN向NN注册2.5 向NN发送心跳第3章 HDFS上传源码解析3.1 create创建过程3.1.1 DN向NN发起创建请求3.1.2 N

prague6695的博客 2602

【Debug跟踪Hadoop3.0.0源码MapReduce Job提交流程】第三节 Job提交前的初始化

【Debug跟踪Hadoop3.0.0源码】第三节 jobSubmitter(提交器对象)的初始化回顾cluster与yarn的交互过程 回顾 上一节中我们对 jobSubmitter(提交器对象)的初始化过程进行了跟踪,查看了相关初始化的内容,下面进入==submitJobInternal(Job job, Cluster cluster)==方法中查看cluster与yarn的一些交互过程。...

Jack_Roy的博客 1万+

yarn作业提交过程源码

Client 端: //最终通过ApplicationClientProtocol协议提交到RM端的ClientRMService内 package org.apache.hadoop.mapred; jobclient包内 YarnRunner public JobStatus submitJob(JobID jobId, String jobSubmitDir, Credentials

数据技术控 2543

HadoopMapReduceYarn内核源码解析

前言:此文章从客户端提交job任务,到对需要处理的数据block进行切片,产生对应的maptask任务,Yarn来管理任务的调度来执行maptask和reducetask进行了详细解读。 一、hadoop的Job 提交流程源码 流程图: 1.从我们编写的mapreduce的代码中进入job提交源码 支线一:进入connect(); 2.支线二:进入submitter.submitJobInternal(Job.this, cluster),向集群提交了job信息,这里是提交job任务的核心代码

weixin_44468025的博客 1271

Spark作业提交流程源码

Spark作业提交流程源码 目录Spark作业提交流程源码一、环境准备及提交流程二、创建Yarn Client客户端提交2.1 程序入口2.2 解析输入参数2.3 选择创建哪种类型的客户端2.4 Yarn客户端参数解析2.5 创建Yarn客户端2.6 Yarn客户端创建并启动ApplicationMaster三、ApplicationMaster任务3.1 解析传递过来的参数3.2 创建RMClient并启动Driver3.3 向RM注册AM3.4 获取RM返回可以资源列表3.5 根据可用资源创建NMCl

weixin_42796403的博客 986

hadoop源码解析-Yarn源码解析

hadoop源码解析-Yarn源码解析0.mr程序提交客户端所在的节点 1.由YarnRunner运行。 2.申请一个Applicaction,交给ResourceManager: 3.提交job运行所需资源 4.资源提交完毕, 申请运行mrAppMaster 5.将用户的请求初始化成一个Task,然后领取到Task任务。 对于NodeManager来说,进行2个操作,创建容器container,下载job资源到本地。 9.申请运行MapTask容器,由NodeManager创建容器, 10.NodeMa

专注Java(全栈)应用开发,求知若渴,虚心若愚,talk is cheap, show me the code. 465

hadoop作业提交过程

1.执行Shell命令:用户编写的MapReduce程序,通过Shell命令来提交作业。 2.作业文件上传:JobClient将作业提交到JobTracker之前,需要进行一些初始化工作,例如前面所提到的调用getSplits方法将文件切分为split文件、创建HDFS目录之类的。 3.产生InputSplit文件:用户提交MapReduce作业后,JobClient会调用InputForma

jyf211314的专栏 1606

Yarn任务提交流程源码分析)

关键词:yarn rm mapreduce 提交 Based on Hadoop 2.7.1 JobSubmitter addMRFrameworkToDistributedCache(Configuration conf) : mapreduce.application.framework.path, 用于指定其他framework的hdfs 路径配置,默认yarn的可以不管 Tok...

weixin_30687587的博客 393

大数据框架hadoop作业提交过程

    作业提交过程比较简单,它主要为后续作业执行准备环境,主要涉及创建目录、上传文件等操作;而一旦用户提交作业后,JobTracker端便会对作业进行初始化。作业初始化的主要工作是根据输入数据量和作业配置参数将作业分解成若干个Map Task以及Reduce Task,并添加到相关数据结构中,以等待后续被高度执行。总之,可将作业提交与初始化过程分为四个步骤,如下所示:     步骤一:用户使...

lingdian23的专栏 400

Hadoop-MapReduce使用说明

MapReduce是一个开源的分布式软件框架,可以让你很容易的编写程序(继承Mapper和Reducer,重写map和reduce方法)去处理大数据。你只需要简单设置下参数提交下,框架会为你的程序安排任务,监视它们并重新执行失败的任务。下面让我们跟着官网来学习下吧。

lu070828的博客 1504

hadoop代码笔记】hadoop作业提交之汇总

一、概述 在本篇博文中,试图通过代码了解hadoop job执行的整个流程。即用户提交mapreduce的jar文件、输入提交hadoop的集群,并在集群中运行。重点在代码的角度描述整个流程,有些细节描述的并不那么详细。 汇总的代码流程图附件:hadoop_mapreduce_jobsubmit 二、主要流程 Jobclient通过RPC方式调用到jobtracker的subm...

weixin_30480651的博客 174

Yarn的工作机制/作业提交流程

作业提交全过程详解 (1)作业提交 第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。 第2步: Client向RM申请一个作业id。 第3步: RM给Client返回该job资源的提交路径和作业id。 第4步: Client提交jar包,切片信息和配置文件到指定的资源提交路径。 第5步: Client提交完资源后,向RM申请运行MrAppMaster。 (2)作业初始化 第6步: 当RM收到Client的请求后,将该job添加到容量调度器中。 第

yandao的博客 473

网络流量异常信息分析方法研究

本课题针对网络安全中网络流量异常的分析方法进行研究,提出一种基于机器学习和深度学习的异常检测算法。该算法采用卷积神经网络(CNN)和长短时记忆神经网络(LSTM)结合的方式,通过训练得到二分类模型,从而实现对网络流量异常的检测。随着互联网的飞速发展,网络攻击事件日益增多,网络安全问题成为了亟待解决的问题之一。常见的网络攻击手段包括 DDoS 攻击、SQL 注入、XSS 攻击等,这些攻击手段可能导致网络系统发生异常,给网络运维、数据安全带来极大的挑战。

肥晨开发的学习之路 1002

采购单excel模版下载

这是一套采购单excel模版下载,喜欢的人都来下载吧。该文档为采购单excel模版下载,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看

上一篇: Hadoop源码解析之修改distributedshell使每个Container运行在不同节点上
下一篇: Hadoop源码解析之如何获取JobId
liushahe2012
博客等级 码龄12年 85粉丝 21原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值