0°

Flink1.18.0版本连接外部mysql本地执行测试代码报错[阿里云]

版本: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版产品文档

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====