版本:Flink1.18.0
代码:```
public static void main(String[] args) {
//1、创建TableEnvironment
EnvironmentSettings settings = EnvironmentSettings.newInstance().build();
TableEnvironment tEnv = TableEnvironment.create(settings);
//2、创建source table
Schema schema = Schema.newBuilder()
.column("user",DataTypes.STRING())
.column("url",DataTypes.STRING())
.column("cTime", DataTypes.STRING())
.build();
tEnv.createTemporaryTable( "sourceTable", TableDescriptor.forConnector("jdbc")
.schema(schema)
.option("url","jdbc:mysql://xxxxxx:3306/flink")
.option("driver","com.mysql.jdbc.Driver")
.option("table-name","clicklog")
.option("username","xxx")
.option("password","xxxx")
.build()
);
//3、创建sink table
tEnv.createTemporaryTable("sinkTable",
TableDescriptor.forConnector("print").schema(schema).build());
//4、执行sql查询
Table resultTable = tEnv.sqlQuery(" select user,url,cTime from sourceTable ");
//5、输出
resultTable.executeInsert("sinkTable");
}
```
自己的做法:已经将jdbc和mysql连接器对应的jar包传到flink集群下的lib目录,且重启了集群服务,pom文件也引入了依赖,然后运行以上代码报错,错误信息如下:
网上有说是缺少flink-shaded-guava依赖,pom文件尝试添加后又报guava31的类找不到错误,以下是我的尝试:
个人感觉跟pom依赖关系不大,因为我不运行代码而是直接在flink的sql 客户端建立外部连接后执行一个简单的查询也是报类似错误,请问是什么原因呢,请大佬指点指定
jdbc的依赖包问题,参考官方文档或者一些技术网站时,引入的jdbc依赖是
解决方法:将以上jdbc依赖删除,换成如下依赖,并将下载后的依赖传到flink集群的各个节点的lib目录下并重启集群服务
由于在 Flink 集群中的代码依赖 Guava 30 版本所导致的。我们建议您先检查您的代码中是否存在依赖 Guava 30 版本的情况,如果存在,请尝试更新您的代码以使用其他版本的 Guava 库。因为MySQL的JDBC Driver在获取数据时,由于精度问题,会采用不同的数据类型进行承接。具体说来,对于MySQL的INT UNSIGNED类型,在Java中会使用LONG类型来承接数据,对应Flink SQL中为BIGINT。而对于MySQL的BIGINT UNSIGNED类型,Java中会使用BIGINTEGER类型来承接数据,对应Flink SQL中为DECIMAL(20, 0)。https://help.aliyun.com/zh/flink/support/faq-about-upstream-and-downstream-storage
---来自实时计算 Flink版产品文档
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。