1. 程式人生 > >如何配置sbt的build.sbt使得編譯時將依賴包也打包進去

如何配置sbt的build.sbt使得編譯時將依賴包也打包進去

最近在使用spark on yarn模式提交任務,下面是我測試的案例

--提交命令

spark-submit --master yarn-cluster --class com.htlx.sage.bigdata.spark.etl.Application --driver-memory 1g --num-executors 2 --executor-memory 2g --executor-cores 2  my-spark-etl_2.11-1.0-SNAPSHOT.jar 

--執行後報的錯誤是


--對這個錯誤很是鬱悶,上網查說是配置問題,可是我執行其他程式碼就沒問題,再說我在搭建叢集的時候很是研究了一番,叢集不會出現錯誤,所以我只能去yarn的執行日誌中,在yarn的日誌中也沒有發現什麼只有上面這個錯誤,然後我又去執行該程式的日誌中找




-- 檢視stderr檔案,發現是找不到com/typesafe/scalalogging/Logger


-- 最終發現原因,是因為在執行的jar中沒有將依賴包打進去。

-- 解決方案,因為我用的是sbt來進行構建scala工程的,使用了sbt的外掛,在打包的時候沒有將依賴的外掛打包。

-- ssembly外掛的目的是:

    The goal is simple: Create a fat JAR of your project with all of its dependencies.

-- 即將專案依賴的大檔案也打包到生成的jar中。

-- 外掛的配置取決於sbt的版本 ,我的是sbt 1.1.4,所以在project/plugins.sbt

新增下面內容:

    addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.6")

-- 生成jar包,進入該專案的根目錄操作下面命令

    sbt assembly

    將依賴打包,然後對該專案打包

    sbt package

 --執行命令如下

    spark-submit --master yarn-cluster --class com.htlx.sage.bigdata.spark.etl.Application --driver-memory 1g --num-executors 2 --executor-memory 2g --executor-cores 2 --jars spark-etl-assembly-1.0-SNAPSHOT.jar  spark-etl_2.11-1.0-SNAPSHOT.jar