如何配置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