版本: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 客户端建立外部连接后执行一个简单的查询也是报类似错误,请问是什么原因呢,请大佬指点指定
以下为热心网友提供的参考意见
由于在 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版产品文档