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


猜你喜欢

转载自blog.csdn.net/ZMC921/article/details/80063978
sbt