最近项目需要,在使用spark编写Java应用时,最终编写的程序必须打包成一个jar包才能提交到spark集群运行。由于spark是一个分布式系统,提交的程序最终将分散到许多节点上运行,如果程序依赖其他jar包,那么运行环境的部署将会非常头痛。为此,spark使用文档里建议将应用打包成assembly jar或者uber jar再提交。
经查,assembly jar包似乎比uber jar包更为简单,于是先尝试这个,使用maven assembly plugin打包。打包成功后,运行,提示缺少配置文件错误。在eclipse运行spark应用时并没有提示该类错误。再查,得知该配置文件包含在spark某个jar包里,要把配置文件打包到jar包,只有使用shade plugin打包成uber jar。
maven shade plugin使用也比较简单,文档在http://maven.apache.org/plugins/maven-shade-plugin/中有详细介绍。使用这个打包自己的项目,将会在项目的target中产生两个jar包,一个为。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<phas