当前位置:网站首页>【Flink 问题】Flink 如何提交轻量jar包 依赖该如何存放 会遇到哪些问题
【Flink 问题】Flink 如何提交轻量jar包 依赖该如何存放 会遇到哪些问题
2022-08-02 08:29:00 【T_Antry】
又好长一阵子没写作了,不过接下来会开始定期更新了。
从自己身上找到了一些问题–懒惰
- 懒惰的根源不是懒惰本身
- 而是意识到懒惰,却极难改变这种现状
- 我想还是要以短期目标为导向
- 这或许是改变现状的一种方式
说正事了,不然有人点进来要说,这沙雕是在干啥?虽然我很随缘,但我还是很在乎读者体验。
问题描述
Flink任务的提交,是通过提交jar包,配置方法入口,并行度以及其他必要参数。如果在调试阶段,难免在修改完代码之后需要重新上传jar包。多次重复上传,如果这个包太大了,例如我这个项目的包
尼玛,两百兆。网速快点还好,如果远程部署,每次要传输很久。再者,如果nginx限制了传输大小,直接GG,况且每次传好几百兆,太吃资源了。总之弊端太多了。
解决方法
我们写的代码显然不可能有几百兆,这其中大部分都是项目中引用的依赖,和项目中用到的大文件。因此,可以我们要让依赖导入一次即可。会点进来的哥们,我想都是对flink有一定的熟悉,到了尝试部署的阶段了,本文这边采用的是standalone模式,这部分的内容,道理都一样,不同模式依赖存放位置不同罢了。
standalone模式下,jar的依赖可以放在安装目录的lib目录下
如下图:
可以看到这目录很纯净,都是原始,flink启动用到的相关依赖。既然flink启动用到的是这里的依赖,项目的外部依赖也放这里。机灵的伙伴们一定会想到依赖冲突的问题。这种情况只能依项目情况解决了。主要是scala的包和sl4j的包会冲突。
打包maven配置修改plugin
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- 将项目依赖包复制到<outputDirectory>指定的目录下 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${
project.build.directory}/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<!-- 将项目依赖包的路径(与上一项中的<outputDirectory>对应)添加到classPath中 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.ctbri.echoRisk.ApplicationStart</mainClass>
</manifest>
<manifestEntries>
<Class-Path>./</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
使用这个插件打出来的包

可以看到现在的jar包只有600多k,并且可以看到多了一个lib的文件夹。
可以看到这里面有项目用到的很多依赖。
正常来讲,把这些依赖,全部复制到flink/lib目录下,启动集群,提交这个几百k的jar就可以运行了。
但是会发现,copy到flink/lib下之后,flink直接启动失败了,这就是包冲突的问题。我这边因为冲突的是scala包和sl4j的包,我不用scala,因此scala的包我直接不放进lib,sl4j同理,也不放进lib。然后能够正常启动我就不管了。
解决这种问题,当然还有其他方式,我估计就是项目需要选择和你安装的flink版本要一致。
晚安~
边栏推荐
- BGP solves routing black hole through MPLS
- TiFlash 存储层概览
- MySQL读写分离与主从延迟
- uvm-phase机制
- postman下载安装汉化及使用
- Postman download localization of installation and use
- What is the function of the import command of the page directive in JSP?
- 【C】关于柔性数组.简要的谈谈柔性数组
- 了解下C# 多线程
- RetinaFace: Single-stage Dense Face Localisation in the Wild
猜你喜欢
随机推荐
PyQt5 (a) PyQt5 installation and configuration, read from the folder and display images, simulation to generate the sketch image
Axial Turbine Privacy Policy
BGP solves routing black hole through MPLS
【电子电路】长按键拉低电平,适用在有休眠机制的MCU但是没有看门狗,一个按键多个功能场景下使用
自定义View实现波浪荡漾效果
MySQL Workbench 安装及使用
Wang Xuegang - compiled shipment line file
day_05模块
openpyxl 单元格合并
WebGPU 导入[1] - 入门常见问题与个人分享
轴流式水轮机隐私政策
Pycharm (1) the basic use of tutorial
Ansible 学习总结(11)—— task 并行执行之 forks 与 serial 参数详解
Write a small game in C (three chess)
Jenkins--基础--07--Blue Ocean
二分类和多分类
Application and case analysis of CASA model and CENTURY model
Figure robot software digital twin station oil and gas pipelines, oil and gas transportation control platform
LeetCode_2357_使数组种所有元素都等于零
The custom table form

![[OC学习笔记]Block三种类型](/img/40/edf59e6e68891ea7c9ab0481fe7bfc.png)







