大数据应用常用打包方式
一、简介#
在提交大数据作业到集群上运行时,通常需要先将项目打成 JAR 包。这里以 Maven 为例,常用打包方式如下:
- 不加任何插件,直接使用 mvn package 打包;
- 使用 maven-assembly-plugin 插件;
- 使用 maven-shade-plugin 插件;
- 使用 maven-jar-plugin 和 maven-dependency-plugin 插件;
以下分别进行详细的说明。
二、mvn package#
不在 POM 中配置任何插件,直接使用 mvn package
进行项目打包,这对于没有使用外部依赖包的项目是可行的。但如果项目中使用了第三方 JAR 包,就会出现问题,因为 mvn package
打的 JAR 包中是不含有依赖包,会导致作业运行时出现找不到第三方依赖的异常。这种方式局限性比较大,因为实际的项目往往很复杂,通常都会依赖第三方 JAR。
大数据框架的开发者也考虑到这个问题,所以基本所有的框架都支持在提交作业时使用 --jars
指定第三方依赖包,但是这种方式的问题同样很明显,就是你必须保持生产环境与开发环境中的所有 JAR 包版本一致,这是有维护成本的。
基于上面这些原因,最简单的是采用 All In One
的打包方式,把所有依赖都打包到一个 JAR 文件中,此时对环境的依赖性最小。要实现这个目的,可以使用 Maven 提供的 maven-assembly-plugin
或 maven-shade-plugin
插件。
三、maven-assembly-plugin插件#
Assembly
插件支持将项目的所有依赖、文件都打包到同一个输出文件中。目前支持输出以下文件类型:
- zip
- tar
- tar.gz (or tgz)
- tar.bz2 (or tbz2)
- tar.snappy
- tar.xz (or txz)
- jar
- dir
- war
3.1 基本使用#
在 POM.xml 中引入插件,指定打包格式的配置文件 assembly.xml
(名称可自定义),并指定作业的主入口类:
<build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptors> <descriptor>src/main/resources/assembly.xml</descriptor> </descriptors> <archive> <manifest> <mainClass>com.heibaiying.wordcount.ClusterWordCountApp</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build>
assembly.xml 文件内容如下:
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd"> <id>jar-with-dependencies</id> <!--指明打包方式-->