Maven 构建 Flink 应用程序的最佳实践(根除各种类冲突/类加载问题)

embedded/2024/9/22 14:22:36/

作为开发者,在构建 Flink 应用程序时的体验真是一言难尽,想必大家都曾遇到过各种 ClassNotFoundException、NoSuchMethodError 以及 Could not find any factory for identifier kafka/jdbc/hive/hudi that implements org.apache.flink.table.factories.DynamicTableFactory in the classpath 这样的错误。坦率地说,Flink 的应用程序构建体验要比 Spark 差很多,在 Flink 上遇到各种类加载问题和 Jar 包冲突的几率非常高,再加上 Flink 的官方文档也差强人意,给开发者带来了很多困惑和糟糕的用户体验。有些扯远了,回到我们的话题:到底如何才能规避构建 Flink 应用过程中的种种问题,实现平滑顺畅的应用部署呢?本文会根据笔者过去的经验介绍一些重要的最佳实践

mavenshadeplugin__uberjar_3">最佳实践(1): 总是使用 maven-shade-plugin 构建 uber-jar


在我以往的经历中,很少使用 maven-shade-plugin,把若干依赖的 Jar 打成一个超大的 uber-jar 并不一种很优雅的做法,且超大的单体 Jar 包在部署时极其不便(每次都要上传或下载大文件)。那么,为什么还用推荐 maven-shade-plugin 来构建 Flink 应用呢?原因并不是因为 uber-jar 本身有什么好处,而是因为 maven-shade-plugin 提供了对依赖包的重命名以及合并 Jar 包元数据的能力,这些处理让生成的 uber-jar 能规避绝大多数的类冲突类加载问题 ,一个典型的


http://www.ppmy.cn/embedded/25145.html

相关文章

Linux网络抓包工具tcpdump是如何实现抓包的,在哪个位置抓包的?

Linux网络抓包工具tcpdump是如何实现抓包的,在哪个位置抓包的? 1. tcpdump抓包架构2. BPF介绍3. 从内核层面看tcpdump抓包流程3.1. 创建socket套接字3.2. 挂载BPF程序 4. 网络收包抓取5. 网络发包抓取6. 疑问和思考6.1 tcpdump抓包跟网卡、内核之间的顺序…

centOS7.9| 无root安装 openssl 1.1.1

这里写自定义目录标题 0.先安装 gcc121.下载和编译 openssl 1.1.12. 让 pkg-config 能找到.pc文件 0.先安装 gcc12 见之前的博客: 无root编译安装 gcc12 1.下载和编译 openssl 1.1.1 https://www.openssl.org/source/https://github.com/openssl/openssl/releases?page3 (2…

记录一次jar包依赖冲突解决流程

文章目录 一、问题详情二、解决思路三、最终解决方案 一、问题详情 springboot项目在启动时,报错: Application startup failed java.lang.NoClassDefFoundError: org/springframework/boot/web/server/WebServerFactoryCustomizer 二、解决思路 当时…

深度学习论文: MobileNetV4 - Universal Models for the Mobile Ecosystem及其PyTorch实现

深度学习论文: MobileNetV4 - Universal Models for the Mobile Ecosystem及其PyTorch实现 MobileNetV4 - Universal Models for the Mobile Ecosystem PDF: https://arxiv.org/pdf/2404.10518.pdf PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代码: ht…

OpenHarmony实战开发-如何实现自定义绘制 (XComponent)

XComponent组件作为一种绘制组件,通常用于满足开发者较为复杂的自定义绘制需求,例如相机预览流的显示和游戏画面的绘制。 其可通过指定其type字段来实现不同的功能,主要有两个“surface”和“component”字段可供选择。 对于“surface”类型…

设计模式(八):桥接模式

设计模式(八):桥接模式 1. 桥接模式的介绍2. 桥接模式的类图3. 桥接模式的实现3.1 创建实现接口3.2 创建实现了 Cook 接口的实体桥接实现类3.3 使用 Cook 接口创建抽象类 Chef3.4 创建实现了 Chef 抽象类的实体类3.5 测试 1. 桥接模式的介绍 …

SpringMVC架构中Controller层调用的service接口而非实现类serviceImpl的原因及实现原理

为什么Controller层调用的是service接口,而不是其实现类? 在Java的MVC架构中,通常Controller层注入的是服务层的接口,而不是实现类。这样做的原因主要是为了实现面向接口编程和依赖注入,有助于降低各层之间的耦合性&a…

Java基础知识总结(79)

waitStatus属性 每个节点与等待线程关联,每个节点维护一个状态waitStatus,waitStatus的各种值以常量的形式进行定义。 CANCELLED(1):waitStatus值为1时表示该线程节点已释放(超时、中断),已取消的节点不会再阻塞&…