使用sbt assembly构建Spark项目
来源:互联网 发布:divide into python 编辑:程序博客网 时间:2024/04/28 00:08
sbt-assembly是一个sbt插件,作用类似于Maven,用于创建一个包含依赖的JAR包
场景:我在用sbt构建spark项目,但是在用sbt package打包生成jar包时,这个jar包并不没有包含项目的依赖,导致这个jar包提交到spark集群运行时,worker不能找到相应的类,sbt-assembly这个插件可以解决这个问题,可以将项目的依赖一同打包进jar包里。
我的Spark项目目录为:
MyProject....project........plugins.sbt....src....target....build.sbt
1、增加插件
在文件plugins.sbt里增加以下代码(其中,第一行是自带的):
logLevel := Level.WarnaddSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2")
注意:这里有个版本号,要特别小心,不同版本的sbt,对应到不同的sbt-assembly版本,如果版本不对,插件无效还好受一点,遇到一些莫名奇妙的问题,想哭都找不到地。版本的对应情况可参考官方
我的sbt版本为0.13,所以,对应的sbt-assembly版本为0.11.2。如果你装了sbt,但不知道版本的话,可以用以下命令查看版本:
yang@master:$ sbt sbtVersion[info]......[info] 0.13.0
2、创建assembly.sbt文件
在MyProject根目录下创建assembly.sbt文件,创建之后,文件目录如下:
MyProject....project........plugins.sbt....src....target....build.sbt....assembly.sbt
然后在assembly.sbt文件中加入以下代码:
// put this at the top of the fileimport AssemblyKeys._assemblySettings// 这个是打包之后jar包的名字jarName in assembly := "myproject-assembly-1.0.jar"// 这个作用是在打包的时候,跳过测试test in assembly := {}
3、排除一些不必要的依赖
在我的build.sbt文件里有以下依赖,但是,在Spark集群中,每个worker都有spark-core和spark-sql的依赖,因此,在打包我们的spark应用时,这两个包可以不放进jar包,所以,我们可以使用%”provided”来排除不想放进JAR包的依赖,如下所示:
libraryDependencies ++= Seq( "junit" % "junit" % "4.12" % "test", "com.novocode" % "junit-interface" % "0.11" % "test", "org.apache.spark" %% "spark-core" % "1.6.0" % "provided", "org.apache.spark" % "spark-sql_2.10" % "1.6.0" % "provided", "mysql" % "mysql-connector-java" % "5.1.38")
注意:这里把spark-sql依赖后面也加了%”provided”,可能会导致本地在IDE里运行spark程序找不到类,这个时候,把这个%”provided”去掉就好,等到需要 sbt assembly的时候,再加上。当然,不加%”provided”直接sbt assembly也可以,只是需要处理一些冲突.
4、使用sbt assembly打包
切换到MyProject根目录下,使用以下命令:
yang@master:~$ sbt assembly[info] Loading project definition from......(省略)[info] Packaging /home/yang/IdeaProjects/MyProject/target/scala-2.10/myproject-assembly-1.0.jar ...[info] Done packaging.[success] Total time: 2 s, completed Aug 21, 2016 4:11:54 PM
此时,我们看到,myproject-assembly-1.0.jar已经打包好了,ready to rock! ^_^
参考:
[1] https://github.com/sbt/sbt-assembly
- 使用sbt assembly构建Spark项目
- Spark sbt-assembly 打包
- 使用SBT构建Scala项目
- 使用SBT构建Scala项目
- ./sbt/sbt assembly 编译spark报错
- Sbt assembly使用
- 使用SBT编译Spark子项目
- 使用SBT编译Spark子项目
- 使用SBT编译Spark子项目
- 使用SBT编译Spark子项目
- 使用SBT编译Spark子项目
- 使用SBT编译Spark子项目
- sbt-assembly 发布 Scala 项目
- sbt-assembly 发布 Scala 项目
- 用sbt构建Spark项目——WordCount
- sbt/sbt assembly 编译spark源码出错问题解决方法
- Spark2.1.1<IDEA使用SBT或者Maven构建spark程序>
- sbt 构建scala 项目
- MySQL的安装和使用
- 多线程与多进程编程学习整理
- MATLAB 与 opencv 混编
- HTML表单初识
- 完美网络
- 使用sbt assembly构建Spark项目
- python学习(8)————读取文件
- office2007下载地址
- CodeForces 27E
- 知道两个点,及半径,求圆与直线的交点
- 最小生成树的两个模板
- Android中常用的数据存储方式
- Bug请在此留言。谢谢
- c++对象内存模型【内存布局】