Spark 项目 jar 包依赖冲突问题总结

Spark 项目 jar 包加载顺序

当我们编写的 Spark 项目的依赖较多时,提交运行任务时便很容易出现因为包冲突导致的 java.lang.NoSuchMethodError 报错。原因是当用户提供 Spark 任务运行时,Spark 需要首先加载自身的依赖库(jars),一般位于 $SPARK_HOME/jars 目录下,然后再加载用户提交的 jar 包,当两者存在同样的 jar 但是版本不同时,如果高低版本不能互相兼容,则会报错。

Spark jar 包加载顺序:

  1. SystemClassPath: $SPARK_HOME/jars 即 Spark 安装时候提供的依赖包
  2. UserClassPath: Spark-submit --jars 用户提交的依赖包
  3. UserClassPath: Spark-submit app.jar 用户的 Spark 任务 jar 包
阅读更多