001 字节码校验错误java.lang.VerifyError: Stack map does not match the one at exception handler 70
通过一通google,大致的意思就是你的jar包版本不对,真tmd头疼 通过日志信息可以查看到是hive的版本不对 我通过修改我flink程序的hive的版本为我本机环境安装的版本,测试一下,发现还是不对 最后是想了想,既然是版本冲突,那我只需要删除多余的hive版本的jar包即可 我还真的从flink的lib目录中找出一个hive的包,不知道是哪天塞进去了 折腾我半天
002 iceberg catalog无法创建 The main method caused an error: Could not find a suitable table factory for ‘org.apache.flink.table.factories.CatalogFactory’ in
代码一通找,真是无语 首先屡一下思路,执行的报错逻辑为
tenv.executeSql("CREATE CATALOG hive_catalog WITH (\n" +
" 'type'='iceberg',\n" +
" 'catalog-type'='hive',\n" +
" 'uri'='thrift://zh:9083',\n" +
" 'clients'='5',\n" +
" 'property-version'='1',\n" +
" 'warehouse'='hdfs:///user/hive/warehouse' " +
")");
从报错来看 是在寻找iceberg对应的catalog时候报错 org.apache.flink.table.factories.CatalogFactory 从日志来看,找到的是GenericInMemoryCatalogFactory这个作为实现类 所以问题就来了,这家伙是怎么地跑到了GenericInMemoryCatalogFactory去的 按照我的理解,这种东西一般都是spi,也就是一个得有iceberg的jar包 这个引起了我的注意,解压之后,查看TableFactory的内容:org.apache.iceberg.flink.FlinkCatalogFactory 换句话说就是,只要有这么这个jar包在classpath中,正常spi,在初始化CatalogFactory的时候,会寻找到jar包中的services,然后寻找到上图中这个文件,最后初始化里面的内容,进而找到了iceberg定义的factory
不过问题又来了,这儿报错的可是CatalogFactory,这个jar包里写的是tableFactory,我寻找了一下,如下图,原来是继承关系 最后解决办法,将icerberg-flink对应的jar包丢flink的lib中,解决
|