Flink作业写holo表报错,如何解决?
2024-04-16 10:12:13
java.io.IOException: java.io.IOException: com.alibaba.hologres.client.exception.HoloClientException: [UNKNOW:XX000]ERROR: [HoloFixedExecutorCachedOnFE] internal error: fail to execute query Unknown code(105): Tablet is follower, write is not allowed.
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据报错信息,Flink作业在写入Hologres表时出现以下错误:
java.io.IOException: java.io.IOException: com.alibaba.hologres.client.exception.HoloClientException: [UNKNOW:XX000]ERROR: [HoloFixedExecutorCachedOnFE] internal error: fail to execute query Unknown code(105): Tablet is follower, write is not allowed.
该错误表明当前尝试写入的Hologres表所在的Tablet是Follower角色,而Follower节点不允许写操作。Hologres的写操作只能在Leader节点上执行。
建议操作: - 使用以下SQL语句查看表的分布键: sql SELECT attname FROM pg_attribute WHERE attrelid = 'your_table_name'::regclass AND attnum > 0 AND NOT attisdropped;
- 如果分布键设计不合理,可以通过ALTER TABLE
语句重新设置分布键。
建议操作: - 登录Hologres控制台,检查实例的运行状态和副本分布情况。 - 如果发现Leader节点异常,可以联系阿里云技术支持进行修复。
hologres.client.write.mode
参数设置为INSERT_OR_REPLACE
或INSERT_OR_UPDATE
,以支持高并发写入。示例配置:
config.setString(HologresConfigs.ENDPOINT, "<yourEndpoint>");
config.setString(HologresConfigs.USERNAME, "<yourUserName>");
config.setString(HologresConfigs.PASSWORD, "<yourPassword>");
config.setString(HologresConfigs.DATABASE, "<yourDatabaseName>");
config.setString(HologresConfigs.TABLE, "<yourTableName>");
config.setString("hologres.client.write.mode", "INSERT_OR_REPLACE");
建议操作: - 在Flink作业中配置Hologres连接器的重试参数,例如: java config.setInteger("hologres.client.retry.max.attempts", 3); config.setInteger("hologres.client.retry.interval.ms", 1000);
操作步骤: - 下载最新版本的Hologres连接器JAR包。 - 替换现有连接器,并重新打包Flink作业。
建议操作: - 在Flink控制台的资源配置页面,降低Sink节点的并发度。 - 例如,将holo.tpc_ds.store_sales
Sink节点的并发度从8降低到4。
通过以上步骤,您可以逐步排查并解决Flink作业写入Hologres表时的Tablet is follower, write is not allowed
问题。重点在于: - 优化表结构设计,确保分布键合理。 - 检查Hologres实例状态,确保Leader节点可用。 - 调整Flink作业配置,包括写入模式、重试机制和并发度。
如果问题仍未解决,建议联系阿里云技术支持,提供详细的日志和配置信息以便进一步分析。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。