• 【Flink 问题】Flink 如何提交轻量jar包 依赖该如何存放 会遇到哪些问题


    又好长一阵子没写作了,不过接下来会开始定期更新了。

    从自己身上找到了一些问题–懒惰

    • 懒惰的根源不是懒惰本身
    • 而是意识到懒惰,却极难改变这种现状
    • 我想还是要以短期目标为导向
    • 这或许是改变现状的一种方式

    说正事了,不然有人点进来要说,这沙雕是在干啥?虽然我很随缘,但我还是很在乎读者体验。

    问题描述

    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    使用这个插件打出来的包

    在这里插入图片描述
    可以看到现在的jar包只有600多k,并且可以看到多了一个lib的文件夹。
    在这里插入图片描述
    可以看到这里面有项目用到的很多依赖。
    正常来讲,把这些依赖,全部复制到flink/lib目录下,启动集群,提交这个几百k的jar就可以运行了。
    但是会发现,copy到flink/lib下之后,flink直接启动失败了,这就是包冲突的问题。我这边因为冲突的是scala包和sl4j的包,我不用scala,因此scala的包我直接不放进lib,sl4j同理,也不放进lib。然后能够正常启动我就不管了。
    解决这种问题,当然还有其他方式,我估计就是项目需要选择和你安装的flink版本要一致。
    晚安~

  • 相关阅读:
    4-3-网络架构和Netty系列-Netty通讯框架总体架构设计
    第五篇- 抖音的强大对手来了,用Flutter手撸一个抖音国际版,看看有多炫
    从私有Git仓库的搭建到命令的使用再到分支管理,全流程全套服务包您满意
    简单性能测试:springboot-2.x vs actix-web-4.x benchmark
    [MAUI]深入了解.NET MAUI Blazor与Vue的混合开发
    mongodb之shard分片
    计算机毕业设计之java+javaweb的物业管理系统
    objectarx + libcurl下载文件遇到的问题
    iOS基础 自定义转场控制器上的动画 UIPresentationController
    Python之线性数据结构
  • 原文地址:https://blog.csdn.net/qq_39150049/article/details/125903418