Spark 依赖包加载方式

1 Spark 依赖包来源

我们知道Spark application运行加载依赖有三个地方:

  • systemClasspath:Spark安装时候提供的依赖包,${SPARK_HOME}/jars下的包。
  • spark-submit --jars 提交的依赖包
  • spark-submit --config "spark.{driver/executor}.extraClassPath=someJar"提交的依赖包Spark 依赖包

2 --jars

提供系统中没有的包,运行时将包分发到worker指定目录例如/var/run/spark/work,不会加载到executor的classPath,多个包用逗号分隔
在提交任务的时候指定–jars,用逗号分开。这样做的缺点是每次都要指定jar包,如果jar包少的话可以这么做,但是如果多的话会很麻烦。

spark-submit --master yarn-client --jars ***.jar,***.jar mysparksubmit.jar

3 spark.{driver|executor}.extraClassPath

提交时在spark-default中设定参数,将所有需要的jar包考到一个文件里,然后在参数中指定该目录就可以了,较上一个方便很多:

spark.executor.extraClassPath=/home/hadoop/wzq_workspace/lib/*

需要在所有可能运行spark任务的机器上保证该目录存在,并且将jar包考到所有机器上。

4 spark.yarn.jars

使用yarn的方式提交spark应用时,在没有配置spark.yarn.archive或者spark.yarn.jars时, 看到输出的日志在输出Neither spark.yarn.jars nor spark.yarn.archive is set;一段指令后,会看到不停地上传本地jar到HDFS上,内容如下,这个过程会非常耗时。可以通过在spark-defaults.conf配置里添加spark.yarn.archive或spark.yarn.jars来缩小spark应用的启动时间。

24/01/23 13:55:09 WARN Client: Neither spark.yarn.jars nor spark.yarn.archive is set, falling back to uploading libraries under SPARK_HOME.

5 加载顺序

  1. spark-submit --config "spark.{driver/executor}.extraClassPath=someJar"提交的依赖包
  2. SystemClasspath – Spark安装时候提供的依赖包
  3. spark-submit --jars 提交的依赖包

6 用途

三者用途:

  • spark.{driver/executor}.extraClassPath 优先级最高,一般有相同jar但是版本不同,需要解决冲突时使用;
  • systemClasspath 系统安装的包,默认优先使用环境的包,这样更加稳定安全。可以配置 spark.yarn.jar参数,缩小spark应用启动时间。
  • spark-submit --jars 在默认spark环境里没有需要的包时,自己上传提供。

7 总结

  • 在我们提交一个spark 程序时,系统没有的包–jars 提交;
  • 在我们需要和系统中已有的包的不同版本时或者第三方jar包比较多时,使用spark.{driver/executor}.extraClassPath来指定。
  • 配置spark.yarn.jars缩小spark应用启动时间。

欢迎关注微信公众号:大数据AI

相关推荐

  1. qinakun实现公共依赖

    2024-02-05 13:40:02       50 阅读
  2. npm下依赖版本号怎么看

    2024-02-05 13:40:02       25 阅读
  3. Python怎么:深入解析Python机制

    2024-02-05 13:40:02       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-05 13:40:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-05 13:40:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-05 13:40:02       87 阅读
  4. Python语言-面向对象

    2024-02-05 13:40:02       96 阅读

热门阅读

  1. 【Golang】自定义logrus日志保存为日志文件

    2024-02-05 13:40:02       51 阅读
  2. Python判断当前运行环境是否是jupyter notebook

    2024-02-05 13:40:02       47 阅读
  3. Linux 常用命令

    2024-02-05 13:40:02       54 阅读
  4. golang 创建unix socket http服务端

    2024-02-05 13:40:02       49 阅读
  5. Pandas 条件 关键字过滤

    2024-02-05 13:40:02       44 阅读
  6. SplashScreen使用

    2024-02-05 13:40:02       51 阅读
  7. 观察者模式(Observer)

    2024-02-05 13:40:02       50 阅读
  8. 过年手机推荐

    2024-02-05 13:40:02       46 阅读
  9. 前端学习之路(2) Vue3响应式模式设计原理

    2024-02-05 13:40:02       35 阅读
  10. Redis:bigkeys内存分析

    2024-02-05 13:40:02       51 阅读
  11. php 函数三

    2024-02-05 13:40:02       41 阅读
  12. 两次NAT

    两次NAT

    2024-02-05 13:40:02      50 阅读
  13. 3.7 GNU ARM汇编语言

    2024-02-05 13:40:02       51 阅读
  14. 华为配置车地通信快速切换实验

    2024-02-05 13:40:02       42 阅读
  15. 系统分析师-23年-上午答案

    2024-02-05 13:40:02       44 阅读
  16. 【使用 Python 进行 NLP】 第 2 部分 NLTK

    2024-02-05 13:40:02       50 阅读