Iceberg问题记录-数据湖问题记录跟进

一、问题追踪

问题
详细描述
提出问题时间
是否完成
计划完成时间
备注
了解Iceberg数据存储方式 了解元数据存储信息、数据组织方式、查询时处理流程等 20231013 20231019

!!!20231124前均为大致的时间

调研报告:调研报告-基于 Iceberg 构建湖仓一体平台调研

测试环境配置iceberg环境 安装iceberg包,配置hive、spark方式管理iceberg表。建表、查询数据等基础操作 20231013 20231019 操作使用文档:使用-数据湖Iceberg和现有hive数仓打通并使用
腾讯数据集成工具 通过腾讯数据集成工具同步mysql数据到iceberg 20231020 20231230

腾讯工具存在缺陷,在改造中,计划12月底交付

1、数仓开启了kerberos,同步工具不支持,在改造中

2、数仓在chdfs存放,同步工具不支持Chdfs,在改造中

3、数据源管理缺少hivemetastore mysql配置项,配置同步任务时,无法自动带出库、表、字段信息。手动一个一个字段添加不方便。

4、数据集成产品不支持角色登录

本地Java FLink代码同步 通过Java项目编写flink sql方式提交任务,方便后面对iceberg表进行管理用 20231020 20231102

因集群带kerberos、chdfs需要额外引入一些jar包。内网和线上环境网络隔离,无法在本地连接hive metastore,任务打包后需要提交到Oceanus运行。

Apache SeaTunnel数据集成工具 因腾讯数据集成缺陷,同步调研开源同步工具。 20231027 20231102

因新版SeaTunnel改造中,目前只支持读iceberg,不支持写入,调研暂停。

注:社区有提交iceberg写入的请求-还未合并

工具依赖spark,配置spark多版本3.2.1、2.4.7版本运行工具。

同步工具安装依赖的jar包及其他配置信息后,可提任务在本地和yarn上运行。

配通如下同步方式:mysql->控制台、iceberg→控制台

同步工具使用文档:同步工具-SeaTunnel使用

Oceanus同步数据打通 使用腾讯Oceanus写flink sql同步mysql数据到iceberg。配置通Oceanus可以访问离线数仓 20231027 20231102 因开启Kerberos、使用了chdfs。需要Oceanus修改集群配置来访问到离线数仓。集群层修改core-site文件,集群vpc后台加入到CHDFS挂载点才可以。文档如下:同步工具-Oceanus打通mysql到Iceberg
腾讯数据集成任务后台打通-落需求 怀疑腾讯数据集成除了kerberos、chdfs外还有其它卡点,协调腾讯伙伴支持后台修改方式打通,方便一次性把所有卡点登记并解决。 20231103 20231109

后台修改三个产品才可以打通一个同步任务。分别为chdfs加Oceanus集群的vpc、Oceanus修改core-site配置、数据集成传kerberos信息给oceanus等。

修改内容:同步工具-腾讯数据集成工具打通mysql到iceberg

测试Iceberg更新数据性能 配置同步任务测试iceberg更新性能 20231103 20231116

10万更新,更新数据一般一分钟多可查,取决于checkpoint间隔。

升级iceberg表版本 因表formatv1只支持增量数据插入,v2版本才支持数据更新,调研并升级表format版本 20231103 20231109 升级表版本,建表时指定'format-version'='2'
腾讯Iceberg表治理工具 腾讯自研的iceberg依赖于iceberg接口开发的表治理工具沟通。目前处于开发中,预计12月中旬可以给测试用。 20231103 20231109 目前处于开发完内部测试中,预计12月中旬给内测。
数据同步工具调研总结 对比多种数据同步工具,数据集成产品全托管,支持数据源较多,且目前已后台打通。打算用数据集成来同步mysql到iceberg,以及后面hive数据到ck也可使用。待上述卡点缺陷修复后开始使用。 20231103 20231109

先使用Oceanus同步,等数据集成缺陷修复后切换到数据集成。

调研总结文档:https://wiki.baijia.com/pages/viewpage.action?pageId=219852976

全量同步到Iceberg测试 使用Oceanus测试iceberg全量阶段性能. 20231110 20231116 使用25CU可以达到30万条/s,2.6亿数据19分钟全量同步完成,8G低性能mysql的cpu使用率57%。
测试Iceberg更新延迟 更新mysql数据后测试多久可以在Iceberg查到。 20231110 20231116 因flink checkpoint时才写入数据,在checkpoint设置一分钟的情况下,新增、更新、删除数据时,一般下一个checkpoint后就可以查到数据。如更新数据量特别低时,两分钟左右可以查到更新后的数据。  最高测试一次更新10万条,下一分钟可查。 
Iceberg表metadata.json治理调研 Iceberg治理方式分很多种,测试metadata治理方式。配置后可自动清理 20231110 20231116

建表时指定保留版本个数:

‘write.metadata.delete-after-commit.enabled’=‘true’,
‘write.metadata.previous-versions-max’=‘5’

详细介绍文档:Iceberg元数据合并-metadata.json文件

分配足够资源后无法提高速度排查 使用6CU*3并发规格,发现cpu使用率上不去,使用25%左右,更新阶段卡在6-8万条/s。 20231117 20231123 和腾讯排查分析:flink mysql-cdc算子是单并发/线程的,增量binlog同步阶段,只能把一个CPU(CU)用满,分配6CU并不能用上。算上写入iceberg和读取mysql的开销,最多3CU即可打到极限。  腾讯评估下binlog阶段并行处理方案。
iceberg更新性能二次测试 更新十万数据量有点低,需要测试更新千万数据场景。 20231117 20231123

因flink消费mysql binlog阶段只能单核,有性能瓶颈。

采用mysql→kafka,kafka→iceberg方式测试更新性能。

目前可以多并行度写入,测试最高30万/s,2千万数据3分钟更新完成,非极端情况下满足更新要求。

checkpoint更新部分数据后就可以查到部分更新数据,不一定全部更新完才可查。剩下数据会每个checkpoint写入一部分。

购买并配置数据入湖Oceanus集群 因Oceanus集群想访问离线数仓,需要Oceanus特殊配置环境才可以。需要修改Oceanus集群core-site文件支持chdfs读写,修改Oceanus集群vpc加入到测试和线上CHDFS。 20231117 20231123 Oceanus集群vpc需要加到Chdfs,本次调接口方式添加。产品化预计12月中旬完成。后续走产品化添加。
Oceanus Iceberg版本升级 因iceberg最新版为1.4.2,测试使用的0.13.1与最新版差距较大,线上使用时期望用合适版本。和腾讯iceberg专家沟通后使用1.3.1较合适,升级iceberg版本测试。 20231117 20231123

Oceanus升级完成

因Oceanus上的flink1.16不支持iceberg,需要手动加几个依赖包解决,去除无效的2个引用包。在升级中遇到包冲突,腾讯修改flink-connector-hive包注释用不到的HiveDynamicTableFactory类解冲突。

更新数据时,有大量告警日志 WARN AbstractFileSystem: delete failed: Path "/gaotu-test-chdfs/user/hive/warehouse/iceberg_test.db/test1/data/00168-373-dd215dd1-378d-4d78-9373-5726d05b5edc-00001.parquet" does not exist. 20231124 20231124 因为goosfs那边delete方法加的日志,提示的文件事实上不存在。受默认值spark.sql.shuffle.partitions=200的影响,每次默认都有200个task执行,更新一条数据时只有一个task在工作。提示的信息都是内存的空文件。可以忽略warn,更新少量数据时也可以设置spark.sql.shuffle.partitions=1 正常。
mysql整库同步任务配置 查看flink cdc整库同步实现方式。配置整库同步任务,支持正则选择部分表同步 20231124 20231127 测试整库同步任务:test_bdg_test_all_table。
iceberg表治理研究和测试 调研小文件合并,垃圾文件清理,元数据清理方法 20231124    
测试环境spark版本的iceberg升级至1.3.1 oceanus升级完成,spark目前引用的0.13.1需要升级到1.3.1 20231124 20231128 验证正常
测试环境hive版本的iceberg升级至1.3.1 hive目前引用0.13.1需要升级到1.3.1 20231128 20231128 验证正常
大航海新建项目用来数据入湖data_lake_ods iceberg表和传统项目分离,方便管理和iceberg表治理 20231124 20231128 新建数据湖ods层,新建完需要调脚本来初始化项目
灰度spark集群配置iceberg环境 灰度节点配置iceberg,并测试使用,为线上前做测试和准备 20231124 20231128

因灰度10.224.196.134服务器spark版本是3.0.1过度版本,改为使用服务器配置了spark访问iceberg环境。建表、查询正常

异常测试-整库同步过程中删除表 在整库同步中,删除iceberg表、mysql表,查看对整库同步任务影响 20231127 20231127

1、删除iceberg表:任务重试几次后失败,失败后需要不从快照启动,这样会自动建iceberg表。默认根据主键做合并。

2、删除mysql表:任务不会失败,iceberg表不会删除。因mysql表删除,iceberg已删表不再更新。未删的表会更新。

整库同步修改表名 默认整库同步创建的iceberg表名和mysql库一致,公司业务库存在不同库下表名一致的情况,需要建iceberg表时指定前缀,后续可按照大航海模型设计中规范去加前缀。 20231127 20231127

默认所有表加wwwww_前缀,测试任务:test_bdg_test_all_table。

指定参数:'catalog-table' = 'wwwww_$tableName',

$tableName是原表的表名

整库同步,数据类型转换 测试mysql常用数据类型,在整库同步时默认转成iceberg表什么类型。是否可以配置转换规则 20231127 20231127 id===========int(11)=======INT
name=========varchar(20)===STRING
sex==========TINYINT ======INT
sex1=========int ==========INT
sex2=========bigint =======BIGINT
weight=======DOUBLE =======DOUBLE
weight1======DECIMAL(5,2)==DECIMAL(5,2)
sql_detail===text =========STRING
create_time==timestamp ====TIMESTAMP
update_time==DATETIME =====TIMESTAMP
整库同步时无损加表 在整库同步过程中,mysql添加表希望iceberg也可以添加。旧表不希望再全量同步。 20231127 20231127

测试任务:test_bdg_test_all_table

1、新任务启动时配置下面参数支持无损加表

SET table.optimizer.deterministic-operator-uid-for-cdas=true;

create databases时指定高级参数: /*+ `OPTIONS`('scan.newly-added-table.enabled' = 'true','scan.lastchunk.optimize.enable' = 'true') */;

2、加上上述参数后,并不是自动添加

只有当作业启动时,才可以感知新增表的存在。因此每当有加表操作,请对作业做一个快照,然后从该快照恢复运行,此时新表才会开始同步。

iceberg删表后数据没清理 执行drop table命令删表成功后,chdfs数据没清理 20231128 20231129 默认drop table 不会清理hdfs数据,升级iceberg到1.3.1后,使用官方 DROP TABLE spark_catalog.db.sample PURGE时会清理数据,但是还留存【表/data】、【表/metadata】文件。腾讯开龙支持和社区请求结合后,建表时需要指定'table.drop.base-path.enabled'='true',删表时加PURGE。详细使用方式请参考文档第三点:优化-iceberg调参优化
Oceanus配置线上同步任务 线上配置同步任务从mysql到hive 20231128 20231130

准备线上的依赖文件打jar包。

测试百万数据量任务20231129完成,查询正常。测试2.6亿数据导入正常,全表扫描时超时。实时写入小文件需要处理

参考文档:同步工具-Oceanus打通mysql到Iceberg

自助取数presto引擎查询iceberg表 联系dlc伙伴打通dlc查询iceberg表 20231128   目前和腾讯dlc同学沟通,dlc为全托管产品内置了iceberg,暂不支持对接外部的iceberg,联系廉墀沟通中。
spark-sql方式查询大表数据报错

查询百万小表正常,查询2.8亿表时限定条件查询正常,count(1) 方式统计数据量时费资源且慢。

报错内容如下:

main at NativeMethodAccessorImpl.java:0

23/11/30 11:51:12 WARN TransportChannelHandler: Exception in connection from /10.224.204.24:35190

20231130 20231130

spark-sql方式count(1)查询时总资源使用400GB,默认分配6core,分配8GB内存情况下单core资源不足,因GC问题超时导致。 spark查询iceberg全表比hive表要多费资源。

           
           

 

posted @ 2024-04-22 10:55  黑水滴  阅读(7)  评论(0编辑  收藏  举报