Flink SQL 写入 Hive表的性能问题
时间:2022-07-26
本文章向大家介绍Flink SQL 写入 Hive表的性能问题,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Flink 1.11.0
hadoop-3.0.3, hive-2.3.4
现象
写入Hive表的性能,每秒写入记录数,发现性能并不乐观,上有节点背压严重。
写入Hive表.png
Hive Table DDL:
CREATE TABLE dw_db.dw_xxx_rt(
中间几十个字段省略,
`position` string COMMENT '位置'
) PARTITIONED BY (p_dt STRING, p_hours STRING) row format delimited
fields terminated by 't'
collection items terminated by 'n'
stored as orc TBLPROPERTIES (
'sink.partition-commit.trigger'='process-time',
'sink.partition-commit.delay'='0s',
'sink.partition-commit.policy.kind'='metastore,success-file',
'sink.shuffle-by-partition.enable'='true'
);
而写入HDFS文件的性能,每秒写入记录数,性能符合期待。
写入HDFS文件.png
HDFS文件的DDL:
drop table hive_catalog.dw_db.dw_xxx_hdfs;
CREATE TABLE hive_catalog.dw_db.dw_xxx_hdfs (
中间几十个字段省略,
`position` string COMMENT '位置',
`p_dt` string,
`p_hours` string
) PARTITIONED BY (p_dt , p_hours ) with (
'connector' = 'filesystem',
'path' = 'hdfs://ztcluster/tmp/test/xk',
'format' = 'orc',
'sink.partition-commit.trigger'='process-time',
'sink.partition-commit.delay'='0s',
'sink.partition-commit.policy.kind'='success-file',
'sink.shuffle-by-partition.enable'='true'
);
翻阅Flink的PR,十几天前,阿里Flink的开发同学已经注意到了这个问题,我们将之吸收到测试环境,编译替换lib下jar包,重新测试,性能确实up了,单并发升至5W每秒,上游节点才稍微有背压。 [FLINK-19121][hive] Avoid accessing HDFS frequently in HiveBulkWriterFactory
所以,Flink的新特性从发布到应用线上,稳定性与性能上都不能过于乐观、听信于官方宣传, 司内另一教训就是过早在热数据存储层启用了Hadoop的纠删码,导致问题不断,被迫退化到副本机制。 这与前期调研、验证不足,对该特性过于轻信有莫大关系,教训也是深刻。
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- 使用 frp 安全的暴露内网服务
- 在 .NET Core 应用中使用 NHibernate
- 使用 DataX 增量同步数据
- 在虚拟目录中部署 ASP.NET Core 应用
- Docker 容器的健康检查
- 使用 mono 编译 .NET Standard 应用
- 指定 ASP.NET Core 应用监听的端口
- 发布 Angular 应用至生产环境
- 在 NHibernate 中使用 Snow Flake ID
- 在 Angular 应用中创建包含组件
- PostgreSQL 数据库中的窗口函数
- 代码整洁的 JavaScript
- Script 标记的 defer 和 async 属性说明
- 百行代码轻松爬取视频
- WebLogic coherence UniversalExtractor 反序列化 (CVE-2020-14645) 漏洞分析