使用必读-使用Iceberg数据湖需要注意的点

发布时间 2024-01-02 09:36:56作者: 黑水滴

一、开发注意事项

1、Iceberg选择合适的表版本

简述:Iceberg目前有两个表版本(V1和V2),根据数据选择合适的表版本。

    V1表只支持增量数据插入,适合做纯增量写入场景,如埋点数据。

    V2表才支持行级更新,适合做状态变化的更新,如订单表同步。

使用方式:建表语句时指定版本'format-version'='2',默认使用V1

 

2、Oceanus自动建表

简述:使用Oceanus时编写建表语句,Oceanus在第一次运行任务时会自动建表。不需要登录数据库手动建表。

 

3、建表类型转换问题

简述:mysql表create_time大多为timestamp类型,同步到iceberg后使用spark查询会报timezone错误。

原因:源表没有timezone, 下游表需要设置local timezone

使用方式:建iceberg表时指定字段类型为TIMESTAMP_LTZ类型

 

4、任务全量同步和增量同步

简述:全量同步阶段需要速度快,可以把flink checkpoint设置为1分钟,并发可以调高(比如1CU*10)这样可以快速同步数据。同时要考虑你的数据源能支持多快抽取,否则dba会找你。

增量阶段一般数据量比较低了,全量同步完后可以先把任务停止一下(注意保存checkpoint),然后调小资源和并发(比如0.5CU*1)可以节省资源。mysql增量阶段只能单线程跑,设置并发多也没用。

 

5、删表(spark方式删表)

简述:和hive删表不一样,iceberg默认只删除元数据不清理hdfs文件,删表语句后面需要加purge关键字。原本路径不会删除,腾讯特殊改造过包

使用方式:drop table data_lake_ods.test1 purge;

 

二、任务运维注意事项

1、小文件合并

简述:全量同步后因为每分钟一次checkpoint会生成大量的小文件,全量同步结束后需要做一下小文件合并,提高查询速度。

使用方式参考:Iceberg小文件合并测试

2、过期快照清理

简述:全量同步后因为每分钟一次checkpoint会产生大量快照,全量同步结束后需要做一下快照清理,提高查询速度。

使用方式参考:Iceberg过期快照清理

 

 

三、查询注意事项

1、presto查询iceberg表

简述:腾讯DLC那边做了改造支持查询V2表。自建emr的presto(旧集群)已支持查询v1版本表,因版本问题不支持v2表。