Flink SQL Client 安装各类 Connector、组件的方法汇总(持续更新中....)

一般来说,在 Flink SQL Client 中使用各种 Connector 只需要该 Connector 及其依赖 Jar 包部署到 ${FLINK_HOME}/lib 下即可。但是对于某些特定的平台,如果 AWS EMR、Cloudera CDP 等产品会有所不同,主要是它们中的某些 Jar 包可能被改写过,例如和 Hive Metastore 的交互,AWS EMR 就有另外一套 Metatstore:Glue Data Catalog,所以接口也做了相应的,所以,简单的复制开源的 Jar 包可能会有问题,最好做法还是从该平台/产品的集群上拷贝本地的 Jar 包。

以下脚本,以 EMR 6.15 ( Flink 1.17.1)为例,展示了各类常用 Connector 的安装方法,有的是直接下载自开源社区,有的则是从 EMR 集群本地找到相应 Jar 包安装的。脚本在 EMR 6.15 上全部测试通过,如果在其他版本的 EMR 或 Flink 上安装,请注意修改版本号。

FLINK_VERSION="1.17.1"
FLINK_MAJOR_VERSION="1.17"
HUDI_VERSION="0.14.0"
SCALA_MAJOR_VERSION="2.12"

安装大量的 Connector 可能会导致 Jar 包冲突,因此,建议做好如下两项准备工作:

1. 安装新的 Connector 或依赖包时,提前备份一版当前的 lib 库

sudo -u flink cp -r /usr/lib/flink/lib /usr/lib/flink/lib.$(date +'%Y%m%d%H%M').bak

2. 为了解决版本冲突,可以充分 Maven 的依赖解析能力,将需要同时安装的 Connector 的 Maven 依赖整合在一起,去 https://jar-download.com/online-maven-download-tool.php 一次性下载解析好的完整依赖包

3. 安装完毕后,务必重启新的 Yarn Session 方能生效

以下是单独安装各个常用 Connector、组件的方法:

1. Flink SQL Kafka Connector

# install flink kafka connector for flink sql client
# only run on master node is enough, owner of flink home dir is 'flink' user
sudo -u flink wget https://repo.maven.apache.org/maven2/org/apache/flink/flink-sql-connector-kafka/${FLINK_VERSION}/flink-sql-connector-kafka-${FLINK_VERSION}.jar -P /usr/lib/flink/lib/

2. Flink Hudi Connector

# install flink hudi connector for flink sql client
# only run on master node is enough, owner of flink home dir is 'flink' user
sudo -u flink wget https://repo1.maven.org/maven2/org/apache/hudi/hudi-flink${FLINK_MAJOR_VERSION}-bundle/${HUDI_VERSION}/hudi-flink${FLINK_MAJOR_VERSION}-bundle-${HUDI_VERSION}.jar -P /usr/lib/flink/lib/

3. Flink Hive Connector ( on AWS EMR )

如果 EMR 版本不是 6.15, 请注意替换以下 jar 包文件中的版本号,以所用 EMR 集群上的文件版本为准:

# install flink hive connector for flink sql client
# only run on master node is enough, owner of flink home dir is 'flink' user
# refer to this doc: https://docs.aws.amazon.com/emr/latest/ReleaseGuide/flink-configure.html
sudo -u flink cp /usr/lib/hive/lib/antlr-runtime-3.5.2.jar /usr/lib/flink/lib 
sudo -u flink cp /usr/lib/hive/lib/hive-exec-3.1.3*.jar /usr/lib/flink/lib 
sudo -u flink cp /usr/lib/hive/lib/libfb303-0.9.3.jar /usr/lib/flink/lib 
sudo -u flink cp /usr/lib/flink/opt/flink-connector-hive_${SCALA_MAJOR_VERSION}-${FLINK_VERSION}-amzn-1.jar /usr/lib/flink/lib

4. Debezium Confluent Avro 格式 (‘format’ = ‘debezium-avro-confluent’)

前往 https://jar-download.com/online-maven-download-tool.php ,输入如下 Maven 依赖(注意:如有其他同方式获取Jar包的组件,请合并为一份xml配置统一提交,避免出现 Jar 包版本冲突):

<dependency><groupId>org.apache.flink</groupId><artifactId>flink-avro-confluent-registry</artifactId><version>1.18.1</version>
</dependency>

点击 “Submit” 按钮,将 flink-avro-confluent-registry 及其依赖包下载到本地,然后将得到 jar_files.zip 包上传到集群主节点,并执行以下命令将 jar 包部署到 Flink SQL Client 的 lib 目录下:

# install flink 'debezium-avro-confluent' format for flink sql client
# only run on master node is enough, owner of flink home dir is 'flink' user
# refer to this doc: https://blog.csdn.net/bluishglc/article/details/135863249 , section 3.2
sudo -u flink unzip jar_files.zip -d /usr/lib/flink/lib/

更多详细介绍请参考《Flink 集成 Debezium Confluent Avro ( format=debezium-avro-confluent )》 一文的 3.2 节。

5. Flink JDBC Connector for MySQL

需要同时安装 flink-connector-jdbc 的 Jar 包和 MySQL 的 JDBC 驱动 Jar 包。

# install flink jdbc connector for flink sql client, note: flink-connector-jdbc_2.12-1.14.6.jar is wrong jar!!
sudo -u flink wget https://repo.maven.apache.org/maven2/org/apache/flink/flink-connector-jdbc/3.1.1-${FLINK_MAJOR_VERSION}/flink-connector-jdbc-3.1.1-${FLINK_MAJOR_VERSION}.jar -P /usr/lib/flink/lib/# install mysql jdbc driver 8.3.0
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-j-8.3.0.zip -P /tmp/
unzip /tmp/mysql-connector-j-8.3.0.zip -d /tmp/
sudo -u flink cp /tmp/mysql-connector-j-8.3.0/mysql-connector-j-8.3.0.jar /usr/lib/flink/lib
ls /usr/lib/flink/lib/mysql-connector-j-8.3.0.jar# install mysql jdbc driver 5.1.49
# wget https://cdn.mysql.com/archives/mysql-connector-java-5.1/mysql-connector-java-5.1.49.zip -P /tmp/
# unzip /tmp/mysql-connector-java-5.1.49.zip -d /tmp/
# sudo -u flink cp /tmp/mysql-connector-java-5.1.49/mysql-connector-java-5.1.49.jar /usr/lib/flink/lib

6. Flink MySQL CDC Connector (2.3.0)

Flink CDC 2.3.0 在官方Repo: https://github.com/ververica/flink-cdc-connectors/tags 上提供了 Uber Jar 供直接下载使用:

# install flink kafka connector for flink sql client
# only run on master node is enough, owner of flink home dir is 'flink' user
sudo -u flink wget https://repo1.maven.org/maven2/com/ververica/flink-sql-connector-mysql-cdc/2.3.0/flink-sql-connector-mysql-cdc-2.3.0.jar -P /usr/lib/flink/lib/

6. Flink MySQL CDC Connector (2.4+)

注意:目前 Flink CDC 2.4+ 在官方Repo:https://github.com/ververica/flink-cdc-connectors/tags 上尚未提供制作好的 Uber Jar,如果前往 https://jar-download.com/online-maven-download-tool.php 自行制作 Jar 包 + 依赖包,部署后,会报如下错误:

[ERROR] Could not execute SQL statement. Reason:
java.lang.NoSuchMethodError: io.debezium.connector.mysql.MySqlConnection$MySqlConnectionConfiguration.(Lio/debezium/config/Configuration;Ljava/util/Properties;)V

该问题的解释和解决方法参见:https://github.com/ververica/flink-cdc-connectors/issues/2423,鉴于自行重新编译并构建 Uber 包较为繁琐,可先使用 2.3.0 版本,该问题未来会修复。

7. Table Planner 和 Table Planner 加载器

从 Flink 1.15 开始,发行版包含两个 planner: flink-table-planner flink-table-planner-loader。这两个 planner JAR 文件的代码功能相同,但打包方式不同。若使用第一个文件,您必须使用与其相同版本的 Scala;若使用第二个,由于 Scala 已经被打包进该文件里,您不需要考虑 Scala 版本问题。

所以,有时候,我们需要在这两个 Planner 之间进行切换,以下脚本可以完成相互的切换工作:

# install flink-table-planner ( can only choose 1 between flink-table-planner & flink-table-planner-loader )
sudo -u flink mv /usr/lib/flink/lib/flink-table-planner-loader-${FLINK_VERSION}-amzn-1.jar /usr/lib/flink/lib/flink-table-planner-loader-${FLINK_VERSION}-amzn-1.jar.bak
sudo -u flink cp /usr/lib/flink/opt/flink-table-planner_${SCALA_MAJOR_VERSION}-${FLINK_VERSION}-amzn-1.jar /usr/lib/flink/lib# revert to flink-table-planner-loader ( can only choose 1 between flink-table-planner & flink-table-planner-loader ) 
sudo -u flink rm -f /usr/lib/flink/opt/flink-table-planner_${SCALA_MAJOR_VERSION}-${FLINK_VERSION}-amzn-1.jar
sudo -u flink mv /usr/lib/flink/lib/flink-table-planner-loader-${FLINK_VERSION}-amzn-1.jar.bak /usr/lib/flink/lib/flink-table-planner-loader-${FLINK_VERSION}-amzn-1.jar

常见问题

1. [ERROR] Could not execute SQL statement. Reason:
java.lang.NoSuchMethodError: io.debezium.connector.mysql.MySqlConnection$MySqlConnectionConfiguration.(Lio/debezium/config/Configuration;Ljava/util/Properties;)V

该问题的解释和解决方法参见:https://github.com/ververica/flink-cdc-connectors/issues/2423,鉴于自行重新编译并构建 Uber 包较为繁琐,可先使用 2.3.0 版本,该问题未来会修复。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/664842.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Wireshark教程】流量分析,使用Wireshark寻找主机信息

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋 🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步…

力扣labuladong一刷day72天动态规划

力扣labuladong一刷day72天动态规划 文章目录 力扣labuladong一刷day72天动态规划一、343. 整数拆分二、96.不同的二叉搜索树 一、343. 整数拆分 题目链接&#xff1a;https://leetcode.cn/problems/integer-break/description/ 思路&#xff1a;本题为整数拆分&#xff0c;可…

clickhouse如何清除多个分区数据 alter table drop partition操作

官网drop partition操作 官网链接&#xff1a;https://clickhouse.com/docs/zh/sql-reference/statements/alter/partition#drop-partitionpart 官网上之有清除单个分区的例子&#xff0c;并没有对清除多个分区的场景进行描述&#xff0c;之前清除分区时也是按照官网例子进行…

MySQL系统配置

MySQL系统配置 内存相关 sort_buffer_size 定义了每个线程排序缓存区的大小&#xff0c;当索引无法满足需要的顺序信息时会用到&#xff0c;执行计划中出现using filesort&#xff0c;MySQL在有查询、需要做排序操作时才会为每个缓冲区分配内存&#xff08;直接分配该参数的全部…

在 PyTorch 中动态构建和更新模型

1. PyTorch 中动态构建和更新模型 在 PyTorch 中&#xff0c;动态构建和更新模型是其核心特性之一。这意味着开发者无需预先定义完整的计算图&#xff0c;而是在运行时根据需要构建神经网络结构&#xff0c;并可以随时修改模型参数、添加或删除网络层等。这种动态图机制为研…

【AudioPolicy To AudioHAL笔记(二)】AudioPolicyAudioFliger To AudioHAL

/*****************************************************************************************************************/ 声明: 本博客内容均由https://blog.csdn.net/weixin_47702410原创&#xff0c;转载or引用请注明出处&#xff0c;谢谢! 创作不易&#xff0c;如果文章…

【Python】【完整代码】解析Excel文件内容,按每列首行元素名打印出某个字符串的统计占比(超详细)

目录 1.示例&#xff1a; 1.1 实现代码1&#xff1a;列数为常量 运行结果&#xff1a; 1.2 实现代码2&#xff1a;列数为变量 运行结果&#xff1a; 1.示例&#xff1a; 开发需求&#xff1a;读取Excel文件&#xff0c;统计第3列到第5列中每列的"False"字段占…

【新书推荐】5.1节 16位汇编语言学习环境

第五章 16位汇编学习环境 16位汇编语言的学习环境是建立在8086计算机的基础上的&#xff0c;我将借助于DosBox虚拟机来实现16位汇编语言学习环境的搭建。 5.1节 16位汇编语言学习环境 本节内容&#xff1a;16位汇编学习环境的搭建。 ■汇编语言程序设计编程调试过程&#xff1…

【React】react组件传参

【React】react组件传参 一、props&#xff1a;父组件向子组件传参1、将普通的参数作为props传递2、将jsx作为props传递&#xff08;组件插槽&#xff09; 二、自定义事件&#xff1a;子父组件向父组件传参三、context进行多级组件传参四、redux全局状态管理 一、props&#xf…

MySQL篇----第四篇

系列文章目录 文章目录 系列文章目录前言一、数据库的三范式是什么二、第一范式(1st NF - 列都是不可再分)三、第二范式(2nd NF- 每个表只描述一件事情)四、第三范式(3rd NF- 不存在对非主键列的传递依赖)五、数据库是事务前言 前些天发现了一个巨牛的人工智能学习网站,通…

C++迷宫游戏详解

个人主页&#xff1a;[PingdiGuo_guo] 收录专栏&#xff1a;[C干货专栏] 大家好呀&#xff0c;我是PingdiGuo_guo&#xff0c;今天我们来学习用C实现一个迷宫游戏。 目录 1.迷宫的具体步骤 1.1.迷宫的初始化 1.2.寻路算法 1.DFS算法 2.BFS算法 1.3.移动 2.总结 C迷宫游…

Javascript入门:第三个知识点:javascript里的数据类型、运算符

数字类型 123 //整数 123.1 //浮点数 1.123e3 //科学计数法 -10 //负数 NaN //not a number Infinity //无限大 以上的类型在javascript里都是数字类型 字符串类型 在开始之前&#xff0c;我需要先说明白两个知识点&#xff1a; console.log()是啥&#xff1f; let 与 v…

【C++初阶】C++入门(2)

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 一、函数重载1.1 函数重载的概念1.2 函数重载的种类1.3 C支持函数重载的原理 二…

服务器常遇的响应状态码

服务器常遇的响应状态码 状态码 500 表示服务器内部错误。 这种状态码意味着服务器在尝试执行请求时遇到了意外情况。在处理这种状态码时&#xff0c;我们需要联系服务器管理员或服务提供商以获取更多信息。 处理方法&#xff1a;联系服务器管理员或服务提供商以获取更多信息…

Ubuntu中rosdep update报错的解决办法

1.问题&#xff1a; Ubuntu22.04系统下面&#xff0c;rosdep update总是报错 2.方法 2.1 方法一 a.直接访问raw.githubusercontent.com不可行&#xff0c;按一下网址查询raw.githubusercontent.com的ip地址 多个地点ping[raw.githubusercontent.com]服务器-网站测速-站长工…

计算机网络——链路层(1)

计算机网络——链路层&#xff08;1&#xff09; 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU)前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff0c; [跳转到网站](https://www.captainbed.…

C语言第十七弹---指针(一)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 指针 1、内存和地址 1.1、内存 2、指针变量和地址 2.1、取地址操作符&#xff08;&&#xff09; 2.2、指针变量和解引用操作符&#xff08;*&#xff09;…

Tiktok东南亚商家如何通过直播活动提高直播流量和转化率?

一、什么是直播活动? 直播活动是帮助卖家在直播中有效推广商品和店铺的促销活动。 您报名参加直播活动后&#xff0c;您的直播将以活动品牌的形式突出展示。 您可以同时参与商品活动和直播活动&#xff0c;在直播中给买家提供超值优惠。 如何参加直播活动? 二、如何准备直…

[SWPUCTF 2021 新生赛]include

他让我们传入一个flag值 我们传入即可看到代码部分 传入一个php的伪类即可 得到经过Base64加密的flag&#xff0c;解密即可

Python基础知识:Python注释及print函数、input函数

在Python中&#xff0c;注释是对相应代码的解释&#xff0c;以增加代码的可读性&#xff0c;让用户能够更好地理解相应代码的含义。注释通过在相应代码后面加上“#”号来实现。比如以下代码 data.describe()#对数据集进行描述性分析 其中data.describe()为需要被执行的代码&a…