java - 在 spark 提交中覆盖 spark 的库

标签 java scala hadoop apache-spark

我们应用程序的 hadoop 集群安装了 spark 1.5。但由于特定要求,我们开发了 2.0.2 版的 spark 作业。当我将作业提交到 yarn 时,我使用 --jars 命令覆盖集群中的 spark 库。但它仍然没有选择 scala 库 jar。它抛出一个错误说

ApplicationMaster: User class threw exception: java.lang.NoSuchMethodError: scala.Predef$.ArrowAssoc(Ljava/lang/Object;)Ljava/lang/Object;
java.lang.NoSuchMethodError: scala.Predef$.ArrowAssoc(Ljava/lang/Object;)Ljava/lang/Object;
    at org.apache.spark.sql.SparkSession$Builder.config(SparkSession.scala:713)
    at org.apache.spark.sql.SparkSession$Builder.appName(SparkSession.scala:704)

关于如何在 spark 提交期间覆盖集群库有什么想法吗?

我用来提交作业的 shell 命令如下。

spark-submit \
  --jars test.jar,spark-core_2.11-2.0.2.jar,spark-sql_2.11-2.0.2.jar,spark-catalyst_2.11-2.0.2.jar,scala-library-2.11.0.jar \
  --class Application \
  --master yarn \
  --deploy-mode cluster \
  --queue xxx \
  xxx.jar \
  <params>

最佳答案

这很简单——Yarn 不关心你运行的是哪个版本的 Spark,它会执行 yarn 客户端提供的 jar,这些 jar 由 spark submit 打包。该过程将您的应用程序 jar 与 spark 库一起打包。

为了部署 Spark 2.0 而不是提供的 1.5,您只需在开始工作的主机上安装 spark 2.0,例如在您的主目录中,将 YARN_CONF_DIR env vars 设置为指向您的 hadoop conf,然后使用该 spark-submit。

关于java - 在 spark 提交中覆盖 spark 的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41184821/

相关文章:

java - 嵌套 Do Loop 和 Try Catch

java - 在哪里放置应用程序状态?

hadoop - Hive,分区表的分桶

hadoop - 配置数据类型的配置单元查询失败

json - 如何使用 hadoop map-reduce 和 es-hadoop 将 json 索引到 elasticsearch?

java - 将构造函数隐藏在包之外

Java 泛型 : required capture#67 of?

scala - 如何处理Reader[A, Future[B]]

scala - "abstract over"是什么意思?

scala - "<:"在 Scala 中意味着什么?