2016-12-16 114 views
0

我們的應用程序的hadoop集羣已安裝spark 1.5。但由於具體的要求,我們已經開發了2.0.2版的spark工作。當我將作業提交到yarn時,我使用--jars命令覆蓋集羣中的spark庫。但仍然沒有選擇Scala庫jar。它會拋出一個錯誤,說覆蓋spark中的spark庫提交

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) 

有關如何在火花提交期間覆蓋集羣庫的任何想法?

我用來提交作業的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

做法很簡單 - 紗線不關心你正在運行的星火的版本,它會執行由紗線客戶端是由火花打包提交所提供的罐子。該過程將你的應用程序jar打包在spark libs中。

爲了部署Spark 2.0而不是提供的1.5,您只需要在開始工作的主機上安裝spark 2.0,例如在你的home目錄中,設置YARN_CONF_DIR env vars指向你的hadoop conf,然後使用spark-submit。