我们的应用程序的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>
答案 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。