内容简明:

一、数据仓库架构晋级的布景

二、根据 Iceberg 的湖仓一体架构实践

三、总结与收益

四、后续规划

GitHub 地址
https://github.com/apache/flink
欢迎咱们给 Flink 点赞送 star~

一、数据仓库架构晋级的布景

1. 根据 Hive 的数据仓库的痛接口crc过错计数

原有的数据仓库完全github根据 Hive 制造而成,首Git要存在gitee三大痛点:

痛点一:不支撑 ACID

1)不支撑 Upsert 场景;

2)不支算法工程师和程序员差异撑 Row-level delete,数据修正本钱高。

痛点二:时效性难以行进

1)数据难以做到准实时可见;

2)无法增量读取,无法完毕存储层面的流批共同;

3)无法支撑分钟级推迟的数据剖析场景。

痛点三:Table Evolution

1)写入型 Schema,对 Schema 改动支撑欠好;

2)Partition Spec 改动支撑不友好。

2. Iceberg 要害特性

Iceberg 首要有四大要害特性:支撑 ACID 语义、增量快照机制、翻开的表格局和流批接口giti轮胎撑。

  • 支撑 ACID 语义

    • 不会读到不完整的 Commit;

    • 根据jsonp达观锁支撑并发 Commit;

    • Row-接口类型level delete,算法的有穷性是指支撑 Upser端到端的时延名词解释t。

  • 增量快照机制

    • Commit 后数据即可见(分钟级);

    • 可回溯前史快照。

  • 翻开的接口crc过错计数json格局格局

    • 数据格局:parquet、orc、avro

    • 核算引擎:Spark、Flink、Hive、Trino/Pr接口自动化esto

  • 流批接json格局转化口支撑

    • 支撑流、批写入;

    • 支撑流、批读取端到端确诊有毛病怎样处理

二、根据 Iceberg 的湖仓一体架构实践

湖仓一体的含义就是说我不需求看见湖和仓,数据有着打通的元json格局数据的格局,它能够安闲的活动,也能够对接上层多样化的核算生态。

——贾扬清(阿里云核算途径高档研究员)

1. Append 流入湖的链路

轿车之家:根据 Flink + Iceberg 的湖仓一体架构实践

上图为日志类数据入湖的链路,日志类数据包含客户git教程端日志、用户端日志以及服务端日志。这些端到端检验不正常日志数据会实时录入到 Kafka,然后经过 Flink 使命写到 Iceberg 里边,终究存储到 HDFS。

2. Flink SQL 入湖链路打通

咱们giti轮胎的 Fli端到端检验不正常nk SQL 入湖链路打通是根据 “Flink 1.11 + Ice端到端确诊有毛病怎样处理berg 0.11” 完毕的,对接 Iceberg Catalog 咱们首要做了以下内容:

1)M端到端服务是哪一层eta Server 添加对 Iceberg Catalog 的支撑;

2)SQL SDK 添加 Icebgithub是干什么的erg Catalog 支撑。

然后在这基础上,途径翻开 Iceberg 表的处理json格局功用,使端到端加密得用户能够自己在途径上建 SQL 的表。

3. 入湖 – 支撑署理用户

第二步是内部的实接口自动化践,对接现有预算算法是什么系统、权限系统。

由于之前途径做实时作业的时分,途径都是默以为 Flink 用户去作业的,之前存储不触及 HDFS 存储,因而或许没有什么问题,也算法剖析的意图是就没有考虑预算划分方面的问题。

可是现在写 Iceberg 的话,或许就会触及一些问题。比如数仓团队有自己JSON的集市,数据就应该写到他们的目录下面,预算也是划到他们的预算下,一端到端是什么意思同权限和离线团队账号的系统打通接口的作用

轿车之家:根据 Flink + Iceberg 的湖仓一体架构实践

如上所示,这块首要是在途径上做了署理用户的功用,用户能够去指定用哪个账号去把这个数据写到 Iceberg 里边,完毕进程首要有端到端时延计算公式以下三个。

  • 添加 T端到端是什么意思able 等级装备:’iceberg.use算法的五个特性r.proxy’ = ‘targetUser’

    1)启用 Superuser

    2)团队账号鉴权

    轿车之家:根据 Flink + Iceberg 的湖仓一体架构实践

  • 拜访 HDFS 时启用接口crc过错计数署理用户:

    轿车之家:根据 Flink + Iceberg 的湖仓一体架构实践

  • 拜访 Hive Metastore 时指定署理用户

    1github是干什么的)参阅 Spark 的gitlab相关完毕:

    org.apache.spark.deploy.github是干什么的security.Hi接口自动化veDelegationTokenProvider

    2)动态署理 HiveMJSONetaStoreClient,运用署理用户拜访 Hive metastore

4. Fljson文件是干什么的ink SQL 入湖示例

DDL + DML

轿车之家:根据 Flink + Iceberg 的湖仓一体架构实践

5. CDC 数据入湖链路

轿车之家:根据 Flink + Iceberg 的湖仓一体架构实践

如上所示,咱们有一个 AutoDTS 途径,担任业务库数据的实时接入。咱们会把这沃端到端些业务库的数据接入到 Kafka 里边,一起它还支撑在途径上装备分发使命,适当于把进 Kafka 的数据分发到不同的存储引擎里,在这个场景下是分发到 Iceberg 里。

6. Flink SQL CDC 入湖链路打通

下面是咱们根据 “Flink1.11 + Iceberg 0.11” 支撑 CDC 入湖所做的改动:

  • 改进 Iceberg Si端到端检验不正常什么意思nk:

    Flink 1.11 版别为 AppendStreamTableSink,无法处理 CDC 流,修改并适配。

  • 表处理

    1)支撑 Primary key(PR1978)

    2)敞开 V2 版别:’iceberg.format.version’ = ‘2’

7. CDC 数据入湖

1. 支撑 Bucket

Upsert 场景下,需求保证同一条数据写入到同一 Bucket 下,这又怎样完毕?

现在 Flink SQL 语法不支撑声明 bucket端到端服务是哪一层 分区,经过装备的办法声明 Bucket:

‘partition.bucket.github是干什么的source’=’id’, // 指定 bucket 字段

‘partiti接口类型on.buckgiti轮胎et.num’=’10’, // 指定 bucket 数量

2. Copy-on-write sink

做 Copy-on-Write 的原因是原本社区的 Merge-ojsonpn-Read 不支撑吞并小文件,所以咱们暂时去做json数据了 Copy-on-write sink 的完毕。现在业务一直在检验运用,效果出色。

轿车之家:根据 Flink + Iceberg 的湖仓一体架构实践

上方为 Copy-on-Write 的完毕,其实跟原本的 Merge-on-Read 比较相似,也是有 StreamWriter 多并行度写入FileCommgiteeitter 单并行度次第提交

在 Copy-on-Write 里边,需求根据表的数据量合理设置 Bucket 数,无需额定做小文件吞并。

  • StreamWriter 在 snapshotState端到端加密 阶段多并行度写入

    1)添加 Buffer;

    2)写入前需求判别前次 checkpoint 现已 commit 成功;

    3)按 bucket 分组、吞并,逐个 Bucket 写入。

  • FileCommitter 单并行度次第提交

    1)table.newOverw端到端检验不正常rite()

    2)Flink.last.committed.checkpoint.id

    轿车之家:根据 Flink + Iceberg 的湖仓一体架构实践

8. 示例 – CDC 数据装备入湖

轿车之家:根据 Flink + Iceberg 的湖仓一体架构实践

如上图所示,接口类型在实际运用中,业务方能够在 DTS 途径上创立或装备分发使命即可。

实例类型挑选 Iceberg 表,然后挑选方针库,标明要把接口卡哪个表的数据同步到 Iceberg 里,然后能够选原表和方针表的字段的映射联络是什算法的五个特性么样的,装备之后就能够建议分发使命。建议之后,会在实时核算途径 Flink 里边提交一个实时使命,接着用 Copy-on-write sink 去实时地把数据写到 Iceberg 表里边。

轿车之家:根据 Flink + Iceberg 的湖仓一体架构实践

9. 入湖其他实践

实践一:削减 emptygit教程 commit

  • 问题描算法的时刻复杂度是指什么绘:

    在上游 Kafka 长时刻没有数据的状况下,每次 Checkpoint 依旧会生成新的 Snapshot,导致许多的空文件和不必要的 Snapgit教程shot。

  • 处理方案(PR – 2042):

    添加装备 Flink.max-continuousempty-commits,在接连指定次数 Checkpoint 都没有数据后才真实触发 Commit,生成 Snapshot。

实践二:记载 watermark

  • 问题描绘:

    现在 Iceberg 表自身无法直接接口卡反映数据写入的发算法的五个特性展,离线调度难以精准触发下游使命。

  • 处理方案( PR – 2109 ):

    在 Commit 阶段将 Flink 的 Watermark端到端确诊有毛病怎样处理 记载到 Iceberg 表的 Properties 中,可直观的反映端到端的推迟状况,一起能够用来json是什么意思判别分区数据完整性,用于调度触发下游使命。

实践三:删表优化

  • 问题描绘:

    删去 Icebgithuberg 或许会很慢,导致途径接口相应超时算法工程师和程序员差异。由算法是什么于 Iceberg 是面向对象存储来笼统 IO 层的,没有快速根除目录的办法。

  • 处理方案:

    扩展 FileIO,添加 deleteDir 办法,在 HDFS 上快速删去表数据。

10. 小文件吞并端到端确诊有毛病怎样处理及数据拾掇

守时为每个表执行批处理使命(spark 3),分为以下三个过程:

1. 守时吞并新增分区的小文件:

​ rewriteDataFilesAction.execute(); 仅吞并小文件,不会删去旧文件。

2. 删去过期的 snapshot,接口是什么拾掇元数据及数据文件:

​ table.expireSnapshots().expiregiti轮胎Old erThan(timestamp).commit();

3. 拾掇 orphan 文件,默许拾掇 3 天前,且无法触json格局及的文件:

​ removeOrphanFilesAction.older T接口是什么han(timestamp).execute();

1算法剖析的意图是1. 核算引擎 – Flink

Flink 是实时途径的中心核算端到端的时延名词解释引擎接口文档,现在首要支撑数据入json格局转化湖场景,首要有以下几个方面的特色。

  • 数据准实时入湖:

    F接口检验link 和 Iceberg 在数据入湖方giti轮胎面集成度最高,Flink 社区自动拥抱数据湖技术。

  • 途径集成:

    AutoStream 引进 IcebergCatalog,支撑经过 SQL 建表、入湖 AutoDTS 支撑将 MySQL、SQLServer、json是什么意思TiDB 表装备入湖git命令

  • 流批一体:

    在流批一接口自动化体的理念下,Flink 的优势会逐步表现出来。

12. 核算引擎 – Higithubve

Hive 在 S端到端是什么意思QL 批处理层面 Iceberg 和 Spark 3 集成度更高,首要供应以下三个方面的功用。

  • 守时小文件吞并及 met端到端检验不正常什么意思a 信息查询:

    SELECT * FRO接口英文M prod.db.table.history 还可检查 sna接口是什么pshots, files, manifests。

  • 离线数据写入:

    1)Insert into 2)Insert算法导论 overwrite 3)Merge into

  • 剖析查询:

    首要支撑日常的准实时剖析查询场景。

1算法工程师3. 核算引擎 – Trino/Pres算法工程师和程序员差异to

AutoBI 现已和 Presto 集成,用于报表、剖析型查询场景。

  • Trino

    1)直接将 Iceberg 作为报端到端表数据源

    2)需求添加元数据缓存机制:github.com/trinodb/tri…

  • Presto

    社区集成中:github.接口英文com/prestodb/pr…

14. 踩过的坑

1. 拜访json解析 Hive Metastore 异常

**问题描绘:**HiveConf 的结构办法的json误用,导致 Hive 客户端中声明的装备被掩盖,导致拜访 Hive metastore 时异常

**处理方案(PR-2075):**修复 HiveConf 的结构,闪现调用 addResource 办法,保证接口和抽象类的差异装备不会被掩盖:hiveConf.addResource(conf);

2.Hive接口 metast端到端检验不正常什么意思ore 锁未开释

问题描绘:“CommitFailedException: Timed out after 181138 ms waiting for lock xxx.” 原因是 higit命令veMetastoreClient.lock 方接口是什么法,在未获得锁的状况下,也需求闪现 unlock,否则json文件是干什么的会导致上面异常。

**处理方案(PR-2263):**优化 HiveTabl接口和抽象类的差异eOperation端到端加密s#acquireLock 办法,在获取锁失利的状况下闪现调用 unlock 来开释锁。

3. 元数据文件丢掉

**问题描绘:**Iceberg 表无法拜访,报算法的时刻复杂度取决于 “NotFoundException Failed t接口文档o open input stream for file : xxx.metadata.json”

**处理方案(PR-2328):**当调用 Hive metastore 更新 iceberg 表的 metadata_location 超时后,添加检查机制,承认元数据未保存成功后再删去元数据文件。

三、收益与总结

1. 总结

​ 经过对湖仓一体、流批融合github中文官网网页的根究,咱们别离做了总结。

  • 湖仓一体

    1)Iceberg 支撑 Hive Metastore;

    2)全体运用上与 Hive 表相似:相同数据格局、相同的核算引擎。

  • 流批融合

    准实时场景下完毕流批共同:同源jsonp、同核算、同存储。

2. 业务收益

  • 数据时效性行进:

    入仓推迟从 2 小时以上降低到 10 分钟以内;算法中心使命 SLA 提早 2 小时完毕。

  • 准实时的剖析查询:

    结合 Spark 3 和 Trino,支撑准实时的多维剖析查询。

  • 特征工程提效:

    供应准实时的样本数据,行进模型练习时效性。

  • CD接口C 数据准实时入仓:

    能够在数仓针对业务表做准实时剖析查询。

3. 架构收益 – 准实时数仓

轿车之家:根据 Flink + Iceberg 的湖仓一体架构实践

上方也提到了,咱们支撑准实时的入仓和剖析,适giti轮胎当所以为后续的准实时数仓制造供应了基础的架构验证。准实时数仓的优势是端到端是什么意思一次开发、口json解析径共同、共同存储,是真实的批流一体。劣势是实时性较差,原本或许是秒级、毫秒级的推迟,现在是分钟级的数据可见性。

可是在架构层面上,这个含义还是很大的,后续咱们能看到一些期望,能够接口检验把整个原本 “T + 1” 的数仓,做成准实时的数仓,行进数仓全体的数据时效性,然后更好地支撑上下游的业务。

四、后续规划

1. 跟进 Iceberg 版别json

全面翻开 V2 格局,支撑 CDC 数据的 MOR 入湖giti轮胎

2. 制造准实时数仓

根据 Flink 经过 Data pipeline 方式对数仓各层表全面提速。

3. 流批一体

跟着 upsert 功用的逐步完善,继续根究存储层面流批一体。

4. 多维剖析

json是什么意思据 Presto/Spark3 输出准实时多维剖析。