一、问题追踪
问题 | 详细描述 | 提出问题时间 | 是否完成 | 计划完成时间 | 备注 |
---|---|---|---|---|---|
了解Iceberg数据存储方式 | 了解元数据存储信息、数据组织方式、查询时处理流程等 | 20231013 | 是 | 20231019 |
!!!20231124前均为大致的时间 |
测试环境配置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等。 |
测试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’, 详细介绍文档: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亿数据导入正常,全表扫描时超时。实时写入小文件需要处理 |
自助取数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表要多费资源。 |
标签:同步,iceberg,记录,Oceanus,测试,mysql,跟进,数据 From: https://www.cnblogs.com/robots2/p/18150220