Flink 1.14.4对接HBase 2.2.0创建Sink表失败求助
错误原因分析
核心问题是Flink版本与HBase连接器版本不兼容:
你使用的HBase 2.2连接器依赖了org.apache.flink.table.factories.DynamicTableFactory$Context.getPhysicalRowDataType()方法,但该方法是Flink 1.15及更高版本才引入的API,Flink 1.14.4中不存在这个方法,因此抛出NoSuchMethodError。
解决方案
1. 匹配对应版本的HBase连接器
下载与Flink 1.14.4严格匹配的HBase 2.2连接器Jar包:
- 确保Jar包命名格式为
flink-connector-hbase-2.2_{Scala版本}-1.14.4.jar(比如你的Flink基于Scala 2.12,就选flink-connector-hbase-2.2_2.12-1.14.4.jar) - 不要使用针对Flink 1.15+版本的连接器,避免API不兼容
2. 清理依赖冲突
- 检查运行环境中是否混入了其他版本的Flink或HBase相关Jar包,删除多余的冲突依赖
- 集群环境:将正确的连接器Jar包放入Flink安装目录的
lib文件夹,重启Flink集群 - 本地开发:确保IDE或运行脚本的依赖路径中只有对应版本的Jar包
3. 验证HBase表结构
确认HBase中已创建test表,且包含family2、family3两个列族,可通过HBase Shell执行:
create 'test', 'family2', 'family3'
4. 确认数据写入逻辑
检查table_api_table中的字段datemin、datemax、channel_title、channel_id:
- 字段类型需与Sink表定义的
STRING类型匹配 - 确保所有字段都存在,避免查询时出现字段缺失错误
内容的提问来源于stack exchange,提问作者Zak_Stack
相关产品推荐
相关产品推荐

