Flink程序打包
2024-10-11 04:35:22
在基于 Flink DataStreamAPI 进行流式数据处理应用时,我们可能希望将依赖和应用程序分别打包,如此便于发布和问题定位。在较新版本的 Flink版本中推出了application模式,这种模式可以通过yarn.provided.lib.dirs
参数将依赖项提前上传到HDFS,如此,客户端每次启动应用时不再需要进行jar文件上传,加快启动速度。由于 HDFS 的高可用,如果客户端服务器宕机,也不用担心jar文件丢失。
如何打包呢?
如下是我项目的build配置
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!-- 将工程依赖的jar包,复制至target/lib目录下进行管理,方便已生成jar的工程进行引用。 -->
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
<!-- 不需要拷贝provided scope -->
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<classesDirectory>target/classes/</classesDirectory>
<archive>
<manifest>
<!-- 主函数的入口 -->
<mainClass>com.aaron.bigdata.stream.flink.Main</mainClass>
<useUniqueVersions>false</useUniqueVersions>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
上述描述中包括两个plugin
- copy-dependencies:拷贝依赖到特定路径
- maven-jar-plugin:构造可执行jar包
需要特别说明的是<includeScope>runtime</includeScope>
配置,指明不需要provided scope依赖有两个原因:
- 减少lib大小,便于发布
- 减少冲突,因为 flink 的核心包不需要用户提供,如果提供了,很可能会提示文件已经存在,尽管是相同版本,依然会提示在两个位置找到了实现,必须删除一个。我在使用flink-json-${VERSION}.jar时,出现了这个问题。
推荐阅读:IDEA本地运行无法找到scope为provided的包
参考资料:
https://maven.apache.org/plugins/maven-dependency-plugin/copy-dependencies-mojo.html
最新文章
- AC自动机 HDU 2896
- NOIP2012 普及组 T3 摆花——S.B.S.
- Java:switch语句例子
- Oracle DBA的神器: PRM恢复工具,可脱离Oracle软件运行,直接读取Oracle数据文件中的数据
- RCTF Re300 Writeup
- vb ——ini 配置文件
- win32用GDI+加载png图片作为背景图
- Sqlserver2012 评估期已过解决问题
- C# lock关键词/lock语句块、线程锁
- Spring Boot+maven打war包
- python命令行参数解析模块argparse和docopt
- setTimeout循环传参数几种方式
- 全面理解虚拟DOM(1)
- LuoGu P2735 电网 Electric Fences
- Maya cmds filterExpand 列出 选择的 uvs vertices faces edges 等 component 类型
- AtCoder Grand Contest 011
- 微信UnionId 部分开放
- linux 自总结常用命令(centos系统)
- php实现头像预览上传功能
- [na]代理arp导致的问题(路由卷)