《YARN源码分析一》client 任务提交准备阶段

news2024/11/15 9:00:45

流程

第一步:上传jar 、配置文件、split 文件

提交任务的文件到hdfs 路径:本地配置获取: yarn.app.mapreduce.am.staging-dir (默认:/tmp/hadoop-yarn/staging)
/tmp/hadoop-yarn/staging/$user/.staging

/tmp/hadoop-yarn/staging/hdfs/.staging/job_1722390700850_0001/job.split        
/tmp/hadoop-yarn/staging/hdfs/.staging/job_1722390700850_0001/job.splitmetainfo
/tmp/hadoop-yarn/staging/hdfs/.staging/job_1722390700850_0001/job.xml

第二步:构建ApplicationSubmissionContext

在这里插入图片描述
主要是am启动资源的准备:
在这里插入图片描述

  • 需要下载到本地资源,第一步上传的文件split、job.xml、任务运行的jar
  • token 信息
  • 环境变量classpath
CLASSPATH=%PWD%
...
%HADOOP_CONF_DIR%
%HADOOP_COMMON_HOME%/share/hadoop/common/*
%HADOOP_COMMON_HOME%/share/hadoop/common/lib/*
%HADOOP_HDFS_HOME%/share/hadoop/hdfs/*
%HADOOP_HDFS_HOME%/share/hadoop/hdfs/lib/*
%HADOOP_YARN_HOME%/share/hadoop/yarn/*
%HADOOP_YARN_HOME%/share/hadoop/yarn/lib/*
%HADOOP_MAPRED_HOME%\share\hadoop\mapreduce\*
%HADOOP_MAPRED_HOME%\share\hadoop\mapreduce\lib\*
job.jar/*
job.jar/classes/
job.jar/lib/*
%PWD%/*

可以设置 mapreduce.job.user.classpath.first = true ,在生成classpath ,会把计算框架的jar ,拼接在后面。
%HADOOP_CONF_DIR%
%HADOOP_COMMON_HOME%/share/hadoop/common/*
%HADOOP_COMMON_HOME%/share/hadoop/common/lib/*
%HADOOP_HDFS_HOME%/share/hadoop/hdfs/*
%HADOOP_HDFS_HOME%/share/hadoop/hdfs/lib/*
%HADOOP_YARN_HOME%/share/hadoop/yarn/*
%HADOOP_YARN_HOME%/share/hadoop/yarn/lib/*
%HADOOP_MAPRED_HOME%\share\hadoop\mapreduce*
%HADOOP_MAPRED_HOME%\share\hadoop\mapreduce\lib*

MRApps.java
public static void setClasspath(Map<String, String> environment,
      Configuration conf) throws IOException {
    boolean userClassesTakesPrecedence = 
      conf.getBoolean(MRJobConfig.MAPREDUCE_JOB_USER_CLASSPATH_FIRST, false);

    String classpathEnvVar =
      conf.getBoolean(MRJobConfig.MAPREDUCE_JOB_CLASSLOADER, false)
        ? Environment.APP_CLASSPATH.name() : Environment.CLASSPATH.name();

    MRApps.addToEnvironment(environment,
      classpathEnvVar, crossPlatformifyMREnv(conf, Environment.PWD), conf);
    if (!userClassesTakesPrecedence) {
      MRApps.setMRFrameworkClasspath(environment, conf); // 拼接计算框架的环境变量的jar 
    }
    /*
     * We use "*" for the name of the JOB_JAR instead of MRJobConfig.JOB_JAR for
     * the case where the job jar is not necessarily named "job.jar". This can
     * happen, for example, when the job is leveraging a resource from the YARN
     * shared cache.
     */
    MRApps.addToEnvironment(
        environment,
        classpathEnvVar,
        MRJobConfig.JOB_JAR + Path.SEPARATOR + "*", conf);
    MRApps.addToEnvironment(
        environment,
        classpathEnvVar,
        MRJobConfig.JOB_JAR + Path.SEPARATOR + "classes" + Path.SEPARATOR, conf);
    MRApps.addToEnvironment(
        environment,
        classpathEnvVar,
        MRJobConfig.JOB_JAR + Path.SEPARATOR + "lib" + Path.SEPARATOR + "*", conf);
    MRApps.addToEnvironment(
        environment,
        classpathEnvVar,
        crossPlatformifyMREnv(conf, Environment.PWD) + Path.SEPARATOR + "*", conf);
    // a * in the classpath will only find a .jar, so we need to filter out
    // all .jars and add everything else
    addToClasspathIfNotJar(JobContextImpl.getFileClassPaths(conf),
        JobContextImpl.getCacheFiles(conf),
        conf,
        environment, classpathEnvVar);
    addToClasspathIfNotJar(JobContextImpl.getArchiveClassPaths(conf),
        JobContextImpl.getCacheArchives(conf),
        conf,
        environment, classpathEnvVar);
    if (userClassesTakesPrecedence) {
      MRApps.setMRFrameworkClasspath(environment, conf);
    }
  }
  • 启动AM命令
%JAVA_HOME%/bin/java -Djava.io.tmpdir=%PWD%/tmp -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=<LOG_DIR> -Dyarn.app.container.log.filesize=0 -Dhadoop.root.logger=info,CLA -Dhadoop.root.logfile=syslog   -Dfile.encoding=UTF-8  org.apache.hadoop.mapreduce.v2.app.MRAppMaster 1><LOG_DIR>/stdout 2><LOG_DIR>/stderr 
  • AM 需要的启动资源
{AllocationRequestId: -1, Priority: 0, Capability: <memory:1536, vCores:1>, # Containers: 1, Location: *, Relax Locality: true, Execution Type Request: null, Node Label Expression: null}

第三步、提交RM

远程调用 ClientRMService.submitApplication ,ClientRMService 默认8032 端口RPCServer ,client 端服务接口,实现ApplicationClientProtocol 协议。

ApplicationClientProtocol :
getNewApplication
submitApplication
failApplicationAttempt
forceKillApplication
getClusterMetrics
getClusterNodes
getQueueInfo
getQueueUserAcls
moveApplicationAcrossQueues
getNewReservation
submitReservation
updateReservation
deleteReservation
listReservations
getNodeToLabels
getLabelsToNodes
getClusterNodeLabels
updateApplicationPriority
signalToContainer
updateApplicationTimeouts
getResourceProfiles
getResourceProfile
getResourceTypeInfo
getAttributesToNodes
getClusterNodeAttributes
getNodesToAttributes

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1971144.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA项目基于SSM的移动电商管理系统的设计与实现

目录 一、前言 二、技术介绍 三、项目实现流程 四、论文流程参考 五、核心代码截图 专注于大学生实战开发、讲解和毕业答疑等辅导&#xff0c;获取源码后台 一、前言 系统旨在提高电商管理的效率与安全性&#xff0c;满足现代移动电商的复杂需求。系统采用Java作为主要开…

C语言指针的应用场景

改变局部变量的值 当需要根据某些条件来决定是否改变局部变量的值的时候 #include "stdio.h" void fun(int *pt){if(*pt > 90) {*pt 1000;} } int main(void){int a 100;printf("a:%d",a);fun(&a);printf("a:%d",a); }用于操作访问数…

C语言程序设计之文件篇1

程序设计之文件1 问题1_1代码1_1结果1_1 问题1_2代码1_2结果1_2 问题1_3代码1_3结果1_3 问题1_4代码1_4结果1_4 问题1_1 函数 f u n fun fun 的功能是&#xff1a;从键盘输入若干字符串&#xff08;每行不超过 80 80 80 个字符&#xff09;&#xff0c;写入文件 m y f i l e…

jeecguniapp上传附件/图片及预览

一、上传图片 具体页面显示是 注意事项是传递除文件外的参数需要包在formData里 formData:{UUID:that.state.id,type:bill,}, 二、预览图片及附件 重点是附件预览图片预览即图片更换图片path显示 pdf预览代码 同事写的给的笔记及注意事项

云计算赛项学习————OpenStack 平台搭建

PS: 原创作品&#xff0c;严禁用于商业目的。如有任何技术问题&#xff0c;欢迎和我交流&#xff1a;w104118078 &#xff08;微信号&#xff09; 一、基础环境准备 OpenStack云平台搭建需要两个节点&#xff1a;controller&#xff08;控制节点&#xff09;&#xff0c;comp…

getUnlimitedQRCode获取无限制小程序二维码,如何在前端展示

被坑惨了&#xff0c;搞了我好几个小时 nodejs开发服务端&#xff0c;获取微信小程序无限次二维码 getUnlimitedQRCode怎么用的我就不说了&#xff0c;官方文档 小程序官方文档 刚开始出返回的结果是 正确的返回格式应该是 原因是我在请求getUnlimitedQRCode接口时未设置r…

【Android Studio】UI 布局

文章目录 view布局LinearLayout view 在Android开发中&#xff0c;View是一个非常重要的概念&#xff0c;它是所有用户界面组件的基类。View类及其子类构成了Android应用中的用户界面。每个View都占用屏幕上的一个矩形区域&#xff0c;并可以响应用户输入&#xff08;如触摸、按…

UE5 敌人血条

这样处理就完毕&#xff0c;然后 User Widget 尽可能分成多个进行处理

鸿蒙开发入门指南

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 引言 一、鸿蒙系统概述 1.1 简介 1.2 鸿蒙开发的优势 二、鸿蒙开发环境搭建 2.1 安装鸿蒙DevEco Studi…

机器学习中的关键距离度量及其应用

引言 在当今的数据驱动世界中&#xff0c;机器学习算法扮演着至关重要的角色&#xff0c;它们在图像分类、面部识别、在线内容审核、零售目录优化和推荐系统等多个领域发挥着重要作用。这些算法的核心在于它们能够识别和利用数据之间的相似性。而实现这一点的关键&#xff0c;…

在 Hub 上使用 Presidio 进行自动 PII 检测实验

我们在 Hugging Face Hub 上托管的机器学习 (ML) 数据集中发现了一个引人关注的现象: 包含个人未经记录的私密信息。这一现象为机器学习从业者带来了一些特殊挑战。 在本篇博客中&#xff0c;我们将深入探讨含有一种称为个人识别信息 (PII) 的私密信息的各类数据集&#xff0c;…

965不加班还赚钱,金融科技岗真的绝了!

薪资福利好、稳定有前景、大部分965不加班…… 如果你在观望新机会&#xff0c;金融科技岗的这些特质一定非常吸引人。‍‍‍‍‍‍ 特别是在如今的求职环境中&#xff0c;可观的薪资和稳定的环境已经能够打败90%以上的公司了&#xff0c;更别说金融科技岗的工作强度相比互联…

生产计划问题的不同最优化工具软件求解

一、优化求解软件简介 众所周知&#xff0c;常用的优化工具软件有Lingo、Mathcad和MATLAB。 1. LINGO是Linear Interactive and General Optimizer的缩写&#xff0c;即“交互式的线性和通用优化求解器”&#xff0c;由美国LINDO系统公司&#xff08;Lindo System Inc.&…

Photoshop 滤镜使用详解(全集 · 2024版)

Photoshop 内置了约 120 多个滤镜 Fitler。 Ps菜单&#xff1a;滤镜 Fitler 滤镜&#xff0c;根据一定的规律和运算规则&#xff0c;改变像素的排列、组合、RGB 值与分布等&#xff0c;从而实现图像的各种特殊、奇妙的效果。 可将滤镜作用于选区、图层、通道、蒙版和智能对象&a…

采购在供应链管理中有什么作用?8个步骤拆解供应链采购流程!

在当今全球化和竞争激烈的商业环境中&#xff0c;供应链管理的重要性日益凸显。采购作为供应链中的关键环节&#xff0c;不仅关系到企业成本控制和利润空间&#xff0c;更是企业战略实施和市场竞争力的重要体现。本文将深入探讨供应链采购流程的各个方面&#xff0c;从需求识别…

CreateCustomShape函数怎么在C++调用,参数需要用SAFEARRAY

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

关于去中心化自治组织DAO

DAO&#xff08;Decentralized Autonomous Organizations&#xff09;代表了一种变革性的治理和组织管理方法&#xff0c;利用区块链技术创建透明、民主和自我管理的实体。通过自动化决策过程并减少对传统等级结构的依赖&#xff0c;DAO使各种社区团体能够共同管理资源、项目和…

技术分享 | 自动化测试中如何高效定位元素?

在自动化测试中&#xff0c;元素定位是一项非常重要的工作。良好的元素定位可以帮助测试人员处理大量的测试用例&#xff0c;加快测试进度&#xff0c;降低工作负担。但是在实际的测试工作中&#xff0c;我们常常遇到各种各样的定位问题&#xff0c;比如元素定位失败、元素选择…

【数学建模】评价类模型:优劣解距离法

【数学建模】评价类模型&#xff1a;优劣解距离法 目录 【数学建模】评价类模型&#xff1a;优劣解距离法 1&#xff1a;前言 2&#xff1a;算法 1. 将原始矩阵正向化(统一为极大型) 2. 正向矩阵标准化(消除量纲) 3. 计算得分并归一化 3&#xff1a;例题 4&#xff1a…

【C++】学习笔记——C++的类型转换

文章目录 二十三、C的类型转换1. C语言中的类型转换2. C类型转换static_castreinterpret_castconst_castdynamic_cast 未完待续 二十三、C的类型转换 1. C语言中的类型转换 在C语言中&#xff0c;如果赋值运算符左右两侧类型不同&#xff0c;或者形参与实参类型不匹配&#x…