spark on yarn运行时会加载的jar包有如下:

  • spark-submit中指定的--jars
  • $SPARK_HOME/jars下的jar包
  • yarn提供的jar包
  • spark-submit通过参数spark.driver/executor.extraClassPath指定的jar包

spark-submit指定的--jar

当使用如下的脚本提交应用时,会将应用本身的jar以及--jar指定的jar包上传到集群中。

./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--jars a.jar,b.jar,c.jar \
http://path/to/examples.jar \

--jar是以逗号分隔的jar包列表,不支持直接使用目录。

--jar上传的包会包含在Driver和Executor的classpath中

$SPARK_HOME/jars下的jar包

提交应用时,会将$SPARK_HOME/jars下的所有jar包打成一个zip包,上传到集群中。

“打zip上传”这个操作会在每次提交应用时执行,会有一点的性能损耗。

spark提供了spark.yarn.archivespark.yarn.jars两个参数。可以将spark运行时需要的jar包缓存在HDFS上,无需每次运行任务的时候都进行分发。

spark.yarn.archive=hdfs://cdh1/spark-jar.zip,直接从对应路径读取spark运行时需要的包。

yarn提供的jar包

在yarn-site.xml中会配置yarn.application.classpath,包含hadoop相关的一些包

<property>
<name>yarn.application.classpath</name>
<value> $HADOOP_CLIENT_CONF_DIR,$HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*,$HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,$HADOOP_YARN_HOME/*,$HADOOP_YARN_HOME/lib/*
</value>
</property>

这些包也会在应用提交的时候被加载。

通过参数指定的jar包

提供了以下4个相关参数:

spark.executor.extraClassPath显式地将jar包注册到executor的classpath中

spark.driver.extraClassPath与executor配置项同理

spark.driver.userClassPathFirst=true

spark.executor.userClassPathFirst=true

通过extraClassPath指定jar包的方式和之前通过--jars差不多,只不过extraClassPath可以通过指定目录的方式来指定,如/cdh1/jars/*

还有一点重要的是:extraClassPath可以通过配置userClassPathFirst 来保证用户指定的jar包先被加载,这在解决冲突时是作用很大的。

Spark on Yarn运行时加载的jar包的更多相关文章

  1. QT运行时加载UI文件

      写QT程序里运行时加载UI文件,代码如下: 点击(此处)折叠或打开 #include "keyboard.h" #include <QtUiTools> #incl ...

  2. Windows 运行时加载动态库

    下面是一个运行时加载nvcuda.dll,并检测当前驱动版本最大支持的CUDA版本的例子. #include "cuda.h" #include <stdio.h> # ...

  3. commonJs的运行时加载和es6的编译时加载

    参考 : https://www.cnblogs.com/jerrypig/p/8145206.html 1.commonJs的运行时加载 2.ES6编译时加载

  4. 动态链接--运行时加载dlopen

    前面我们在编译可执行文件时,如果可执行文件要依赖某个so.必须要通过-L指定so路径,并且-l指定so名字. 而且在可执行文件运行时,要先加载so的load部分到进程地址空间. 有一种方式可以在编译时 ...

  5. Linux下显示运行时链接(运行时加载)

    目录 介绍 如何加载动态库 dlopen() 第一个参数: 被加载动态库的路径 第二个参数: flag表示函数符号的解析方式 dlopen 返回值 dlsym() 参数: 返回值 符号优先级 dler ...

  6. 自定义ClassLoader,用于加载用户JAR包

    最近在考虑C/S结构程序的软件自动升级的实现方式,比如QQ.飞信等都自动升级的功能. 自动升级模块虽然还没有编码完成,但是思路还是比较清晰的. 自动升级过程中,升级文件的JAR包是专门加载到程序中去的 ...

  7. 加载所有jar包下指定文件

    加载所有jar包下指定文件: 如spring中加载 META-INF/spring.handlers 加载 org.springframework.core.io.support.Properties ...

  8. 服务器程序动态加载自定义jar包的过程

    需求: 用过hive的都知道,可以自定义hive的一个udf jar,然后将这个jar add到hive服务端,就会加载这个jar实现用户自定义逻辑.现在的需求就是实现这么一个服务端所做的事情! 场景 ...

  9. linux 运行时加载不上动态库 解决方法(转)

    1. 连接和运行时库文件搜索路径到设置     库文件在连接(静态库和共享库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的.一般 Linux 系统把 /lib 和 /usr ...

随机推荐

  1. 【IDEA】HTML通过servlet3.0注解名提交表单到servlet类找不到页面的问题

    IDEA一时爽,摸不着头的BUG火葬场 这个问题困扰我整整一天一夜,先是代码检查路径设置找不出问题,后面换tomcat版不行,抱着侥幸心理换IDEA版本意料之中还是没解决问题. 都快想秃了最后终于完美 ...

  2. Pandas 复习2

    import pandas as pd import numpy as np food_info = pd.read_csv('food_info.csv') 1.处理缺失值(可使用平均数,众数填充) ...

  3. Python file() 函数

    描述 file() 函数用于创建一个 file 对象,它有一个别名叫 open(),更形象一些,它们是内置函数.参数是以字符串的形式传递的.每组词 www.cgewang.com 更多文件操作可参考: ...

  4. PHP ftell() 函数

    定义和用法 ftell() 函数返回在打开文件中的当前位置. 返回文件指针的当前位置,如果失败则返回 FALSE. 语法 ftell(file) 参数 描述 file 必需.规定要检查的已打开文件. ...

  5. 5.19 省选模拟赛 小B的图 最小生成树 LCT

    LINK:小B的图 这道题就比较容易了. 容易想到将询问离线 然后 从小到大排序 那么显然是优先放正图(x+k)的边. 考虑随着x的增大 那么负图上的边会逐渐加进来 一条边被加进来当且仅当 其权值小于 ...

  6. RabbitMQ学习总结(2)-API的使用

      1. 引用依赖 <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-clie ...

  7. Docker之Ubuntu上使用Docker的简易教程

    Ubuntu上使用Docker的简易教程 原始文档:https://www.yuque.com/lart/linux/fp6cla 说在开头 在天池的比赛中涉及到了docker的使用.经过多番探究,大 ...

  8. jpa jpql @query 动态查询

    需求/背景 假设有一个用户表, 对应的用户实体: public class User { @Id Long id; //姓名 String name; //性别,男0女1 String sex; // ...

  9. 曲线生成与求交—B样条曲线

    B样条曲线生成 Bezier曲线缺点:改变任一控制点的位置,将影响整条曲线的形状. B样条曲线是对Bezier曲线的改进,可进行局部控制,生成的曲线与控制多边形的外形更接近,将Bezier曲线作为一特 ...

  10. OpenCV常用图像拼接方法(一) :直接拼接

    OpenCV常用图像拼接方法将分为四部分与大家分享,这里是第一种方法,欢迎关注后续. OpenCV常用图像拼接方法(一) :直接拼接,俗称硬拼,就是简单的将两张图片合并成一张大图. 方法比较简单,这里 ...