在基于 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

最新文章

  1. AC自动机 HDU 2896
  2. NOIP2012 普及组 T3 摆花——S.B.S.
  3. Java:switch语句例子
  4. Oracle DBA的神器: PRM恢复工具,可脱离Oracle软件运行,直接读取Oracle数据文件中的数据
  5. RCTF Re300 Writeup
  6. vb ——ini 配置文件
  7. win32用GDI+加载png图片作为背景图
  8. Sqlserver2012 评估期已过解决问题
  9. C# lock关键词/lock语句块、线程锁
  10. Spring Boot+maven打war包
  11. python命令行参数解析模块argparse和docopt
  12. setTimeout循环传参数几种方式
  13. 全面理解虚拟DOM(1)
  14. LuoGu P2735 电网 Electric Fences
  15. Maya cmds filterExpand 列出 选择的 uvs vertices faces edges 等 component 类型
  16. AtCoder Grand Contest 011
  17. 微信UnionId 部分开放
  18. linux 自总结常用命令(centos系统)
  19. php实现头像预览上传功能
  20. [na]代理arp导致的问题(路由卷)

热门文章

  1. npm安装hexo报错
  2. 图扑 Web SCADA 零代码组态水泥生产工艺流程 HMI
  3. Springboot 2.3.1配置拦截器遇到的坑
  4. NCTF2022 - pwn 部分 wp
  5. 当我们的执行 java -jar xxx.jar 的时候底层到底做了什么?
  6. Doris安装部署
  7. 使用JavaScript制作一个页面的电子时钟
  8. 《MySQL必知必会》之快速入门存储过程
  9. SQL语句使用
  10. 体验 Gitea Actions