–jars:
提供系统中没有的包
运行时将包分发到worker指定目录例如/var/run/spark/work
不会加载到executor的classPath
多个包用逗号分隔
spark.{driver|executor}.extraClassPath
多版本的相同类被加载进ClassLoader,link的时候发生错误时,用于指定版本
只需要指明包名即可,不需要指明路径
该依赖包具有最高优先级,但只能指定一个包
yarn-client模式下,–jars不会把包拷贝到本地,所以需要使用绝对路径
补充: --jars 参数的放置顺序也很重要:
以下测试为spark3.5,–jars指定的两个jar包,一个在当前目录,另一个不论用绝对路径、相对路径,不论是client/cluster,均不影响
# client/cluster模式都运行正常
${SPARK_HOME}/bin/spark-submit \
--master yarn \
--driver-cores 1 --driver-memory 512M --num-executors 2 --executor-cores 2 --executor-memory 2G \
--deploy-mode client \
--jars starrocks-spark-connector-3.5_2.12-1.1.2.jar,../lib/mysql-connector-java-8.0.26.jar \
--class me.demo.MyClass \
me-demo-1.1.jar
# --jars放到最后 报错:【java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver】
${SPARK_HOME}/bin/spark-submit \
--master yarn \
--driver-cores 1 --driver-memory 512M --num-executors 2 --executor-cores 2 --executor-memory 2G \
--deploy-mode client \
--class --class me.demo.MyClass \
me-demo-1.1.jar \
--jars starrocks-spark-connector-3.5_2.12-1.1.2.jar,mysql-connector-java-8.0.26.jar \
参考
https://stackoverflow.com/questions/37132559/add-jars-to-a-spark-job-spark-submit
https://blog.csdn.net/adorechen/article/details/90722933
https://blog.csdn.net/jorondo/article/details/104706395