在spark submit

时间:2016-12-16 12:50:19

标签: 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>

1 个答案:

答案 0 :(得分:1)

这很简单 - Yarn并不关心你正在运行的Spark版本,它将执行由spark提交打包的yarn客户端提供的jar。该过程将应用程序jar打包到spark库中。

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