Flink报错问题之写入Hive报错如何解决

本文涉及的产品
实时计算 Flink 版,1000CU*H 3个月
简介: Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。

问题一:flink sql消费kafka join普通表为何会性能爬坡?

大家好,

flink sql消费kafka join普通表是会性能爬坡吗?

背景是flink 1.12.0 使用flink sql在yarn per-job发布,消费kafka topic=trades,然后join 数据库里的维表 shop_meta 现在发现每次重启flink sql job,或上游突然增加大量写入时,flink sql的消费速度总是慢慢增加上来,这样就会造成上游积压,等flink sql消费速度上来之后才能慢慢把积压消费完毕。

更多的信息: trades是avro格式,大概有10个字段,但其中有一个字段full_info是一个大json,我这边写了处理json的UDF,就为每个字段都需要处理那个大json。最后生成将近25个字段写下游kafka shop_meta是普通表,没有时间字段,总共有12个字段,30000行左右。整个表数据和索引加起来是16MB;更新频率非常低。现在读jdbc的配置为lookup.cache.max-rows = 20000;lookup.cache.ttl = 2h;scan.fetch-size = 1000 SQL示例如下

SELECT
t.shop_id, s.shop_name,
...
CAST(json_path_to_str(full_info, '$.response.trade.price', '0.0') AS DOUBLE) price, "
CAST(json_path_to_str(full_info, '$.response.trade.payment', '0.0') AS DOUBLE) payment, "
CAST(json_path_to_str(full_info, '$.response.trade.total_fee', '0.0') AS DOUBLE) total_fee, "
CAST(json_path_to_str(full_info, '$.response.trade.discount_fee', '0.0') AS DOUBLE) discount_fee, "
CAST(json_path_to_str(full_info, '$.response.trade.adjust_fee', '0.0') AS DOUBLE) adjust_fee, "
CAST(json_path_to_str(full_info, '$.response.trade.received_payment', '0.0') AS DOUBLE) received_payment, "
CAST(json_path_to_str(full_info, '$.response.trade.post_fee', '0.0') AS DOUBLE) post_fee, "
json_path_to_str(full_info, '$.response.trade.receiver_name', '') receiver_name, "
json_path_to_str(full_info, '$.response.trade.receiver_country', '') receiver_country, "
json_path_to_str(full_info, '$.response.trade.receiver_state', '') receiver_state, "
json_path_to_str(full_info, '$.response.trade.receiver_city', '') receiver_city, "
FROM trades t LEFT JOIN shop_meta FOR SYSTEM_TIME AS OF t.proc_time AS s
ON t.shop_id=s.shop_id

考虑到整个job里只有简单的ETL,不涉及中间状态,flink对task_manager的配置为 taskmanager.memory.managed.fraction = 0.1 taskmanager.memory.network.fraction = 0.05 实际运行中,task_manager总内存为6G,6 slots,最大并行度为6,所以只有一个task manager。 在监控页面看到task heap=4.13 GB,实际使用heap_used指标比较稳定。 在监控页面中可以看到随着消费速度越来越快,task manager CPU利用率越来越高,KafkaConsumer_topic_partition_currentOffsets - KafkaConsumer_topic_partition_committedOffsets 也在随着消费速度上涨,新生代GC次数和时间也在上涨 当消费完积压后,前两个指标降低,新生代GC趋于平稳

请问有什么调查或解决的方向吗?*来自志愿者整理的flink邮件归档



参考答案:

为了测试到底是因为SQL里的parse json导致性能瓶颈,还是因为join维表 我在SQL中去掉join维表之后重启,发现只需要70s即可达到消费速度=3.8k,整个因为重启导致的积压被压缩到3分钟

所以应该是维表JOIN的问题 现在连的数据库是TiDB,连接串属性为 useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true来自志愿者整理的flink邮件归档



关于本问题的更多回答可点击进行查看:

https://developer.aliyun.com/ask/370040?spm=a2c6h.13066369.question.8.33bf585fyxGC7d



问题二:flink mysql cdc疑问

大佬们,有几个问题想问下,关于flink mysql cdc 1.flink mysql cdc一个任务同步同一个mysql实例的多个表时,会不会创建多个同步管道,读取全部的binlog数据在客户端过滤,可能造成mysql 流量过大呢?*来自志愿者整理的flink邮件归档



参考答案:

其实我不是和别建议直接用CDC,一般用分布式存储的消息去解决,或者你做多个从库,从从库拉取binlog来自志愿者整理的flink邮件归档



关于本问题的更多回答可点击进行查看:

https://developer.aliyun.com/ask/370041?spm=a2c6h.13066369.question.7.33bf585fn7Im55



问题三:flink 1.12.2 sql-cli 写入Hive报错 is_generic

当配置好HiveCatalog后, SQL-Cli 也可以查到hive库表信息 创建kafka表:

create table test.test_kafka( word VARCHAR ) WITH ( 'connector' = 'kafka', 'topic' = 'xx', 'scan.startup.mode' = 'latest-offset', 'properties.bootstrap.servers' = 'xx', 'properties.group.id' = 'test', 'format' = 'json', 'json.ignore-parse-errors' = 'true' ); 在 Hive里面可以查到改表 hive > DESCRIBE FORMATTED test_kafka ........... is_generic true .........

但是我在 Flink SQL > select * from test.test_kafka; 报错: org.apache.flink.table.api.ValidationException: Unsupported options found for connector 'kafka'. Unsupported options: is_generic Supported options: connector format json.fail-on-missing-field json.ignore-parse-errors*来自志愿者整理的flink邮件归档



关于本问题的更多回答可点击进行查看:

https://developer.aliyun.com/ask/370042?spm=a2c6h.13066369.question.10.33bf585f0c3xAA



问题四:設置look up table source

hi all,

flink在使用temporal join只支持look up table source。我在做單元測試的時候, 下載了hive 表裡面的數據,嘗試了用filesystem註冊temporal table。可是後來發現file system不支持lookup。查詢了文檔( https://ci.apache.org/projects/flink/flink-docs-stable/dev/table/legacySourceSinks.html),用戶可以自定義look up table source。可是我找不到類似用csv設置look up table source的方法。所以想請問有什麼例子我可以參考嗎?

Regards,*来自志愿者整理的flink邮件归档



参考答案:

你可以参考 JdbcDynamicTableSource [1] 这个 table source 实现了 LookupTableSource 接口,你需要写一个类似 JdbcRowDataLookupFunction 即可 的函数即可。

祝好, Leonard [1] https://github.com/apache/flink/blob/4be9aff3eccb3808df1f10ef7c30480ec11a9cb0/flink-connectors/flink-connector-jdbc/src/main/java/org/apache/flink/connector/jdbc/table/JdbcDynamicTableSource.java#L70 来自志愿者整理的flink邮件归档



关于本问题的更多回答可点击进行查看:

https://developer.aliyun.com/ask/370043?spm=a2c6h.13066369.question.11.33bf585fTOAPCU



问题五:flink1.11版本 -C 指令并未上传udf jar包

执行指令:flink run

-m yarn-cluster

-C file:///xxxx/flink-demo-1.0.jar

xxxxx

在Client端能够构建成功jobgraph,但是在yarn上会报UDF类找不到。我看Classpath中并未上传该JAR包*来自志愿者整理的flink邮件归档



参考答案:

-C 不会上传对应路径下的 jar,最终会被添加到集群的 classpath 中,需要运行的机器对应的路径下要有同样的Jar包才可以。 可以放在私服或者oss的服务,通过 http 的方式加载的 udf jar -C "http://host:port/xxx.jar" 来自志愿者整理的flink邮件归档



关于本问题的更多回答可点击进行查看:

https://developer.aliyun.com/ask/370044?spm=a2c6h.13066369.question.12.33bf585fcrDQUh

相关实践学习
基于Hologres+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
相关文章
|
SQL DataWorks 关系型数据库
DataWorks操作报错合集之如何处理数据同步时(mysql->hive)报:Render instance failed
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
202 0
|
6月前
|
SQL 分布式计算 数据库
【YashanDB 知识库】Hive 命令工具 insert 崖山数据库报错
【YashanDB 知识库】Hive 命令工具 insert 崖山数据库报错
|
6月前
|
SQL 分布式计算 关系型数据库
【YashanDB知识库】hive初始化崖山报错YAS-04209
【YashanDB知识库】hive初始化崖山报错YAS-04209
|
6月前
|
SQL 分布式计算 数据库
【YashanDB知识库】Hive 命令工具insert崖山数据库报错
【YashanDB知识库】Hive 命令工具insert崖山数据库报错
|
6月前
|
SQL 分布式计算 关系型数据库
【YashanDB知识库】hive初始化崖山报错YAS-04209
【YashanDB知识库】hive初始化崖山报错YAS-04209
|
SQL Java 关系型数据库
Hive常见的报错信息
文章列举了Hive常见的几种报错信息,并提供了错误复现、原因分析以及相应的解决方案。
1334 1
|
SQL 关系型数据库 HIVE
实时计算 Flink版产品使用问题之如何将PostgreSQL数据实时入库Hive并实现断点续传
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
SQL 分布式计算 数据处理
实时计算 Flink版产品使用问题之怎么将数据从Hive表中读取并写入到另一个Hive表中
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
SQL 数据采集 数据挖掘
大数据行业应用之Hive数据分析航班线路相关的各项指标
大数据行业应用之Hive数据分析航班线路相关的各项指标
340 1

相关产品

  • 实时计算 Flink版