Hudi(一)基本介绍

1、Hudi介绍

1.1、介绍
Overview | Apache Hudi!Welcome to Apache Hudi! This overview will provide a high level summary of what Apache Hudi is and will orient you onhttps://hudi.apache.org/docs/overview

        Apache Hudi(Hadoop Upserts Delete and Incremental)是下一代流数据湖平台。Apache Hudi将核心仓库和数据库功能直接引入数据湖。Hudi提供了表、事务、高效的upserts/delete、高级索引、流摄取服务、数据集群/压缩优化和并发,同时保持数据的开源文件格式。

        Apache Hudi不仅非常适合于流工作负载,而且还允许创建高效的增量批处理管道。

        Apache Hudi可以轻松地在任何云存储平台上使用。Hudi的高级性能优化,使分析工作负载更快的任何流行的查询引擎,包括Apache Spark、Flink、Presto、Trino、Hive等。

1.2、发展历史

        2015 年:发表了增量处理的核心思想/原则(O'reilly 文章)。
        2016 年:由 Uber 创建并为所有数据库/关键业务提供支持。
        2017 年:由 Uber 开源,并支撑 100PB 数据湖。
        2018 年:吸引大量使用者,并因云计算普及。
        2019 年:成为 ASF 孵化项目,并增加更多平台组件。
        2020 年:毕业成为 Apache 顶级项目,社区、下载量、采用率增长超过 10 倍。
        2021 年:支持 Uber 500PB 数据湖,SQL DML、Flink 集成、索引、元服务器、缓存。

1.3、特性

  1. 可插拔索引机制支持快速Upsert/Delete。
  2. 支持增量拉取表变更以进行处理。
  3. 支持事务提交及回滚,并发控制。
  4. 支持Spark、Presto、Trino、Hive、Flink等引擎的SQL读写。
  5. 自动管理小文件,数据聚簇,压缩,清理。
  6. 流式摄入,内置CDC源和工具。
  7. 内置可扩展存储访问的元数据跟踪。
  8. 向后兼容的方式实现表结构变更的支持。

1.4、使用场景

  1. 近实时写入
    1. 减少碎片化工具的使用。
    2. CDC 增量导入 RDBMS 数据。
    3. 限制小文件的大小和数量。
  2. 近实时分析
    1. 相对于秒级存储(Druid, OpenTSDB),节省资源。
    2. 提供分钟级别时效性,支撑更高效的查询。
    3. Hudi作为lib,非常轻量。
  3. 增量 pipeline
    1. 区分arrivetime和event time处理延迟数据。
    2. 更短的调度interval减少端到端延迟(小时 -> 分钟) => Incremental Processing。
  4. 增量导出
    1. 替代部分Kafka的场景,数据导出到在线服务存储 e.g. ES。

2、概要

2.1、时间轴(Timeline)

        hudi的核心是维护在不同时刻在表上执行的所有操作的时间表,提供表的即时视图,同时还有效地支持按时间顺序检索数据。Hudi的时刻由以下组件组成:

  1. Instant action: 在表上执行的操作类型
    1. commits: 表示将一批数据原子写入表中
    2. cleans: 清除表中不在需要的旧版本文件的后台活动。
    3. delta_commit:增量提交是指将一批数据原子性写入MergeOnRead类型的表中,其中部分或者所有数据可以写入增量日志中。
    4. compaction: 合并Hudi内部差异数据结构的后台活动,例如:将更新操作从基于行的log日志文件合并到列式存储的数据文件。在内部,COMPACTION体现为timeline上的特殊提交。
    5. rollback:表示提交操作不成功且已经回滚,会删除在写入过程中产生的数据
    6. savepoint:将某些文件标记为“已保存”,以便清理程序时不会被清楚。在需要数据恢复的情况下,有助于将数据集还原到时间轴上某个点。
  2. Instant time:即时时间
    1. 通常是一个时间戳(例如:20230422210349),它按照动作开始时间的顺序单调增加。
  3. State: 时刻的当前状态
    1. requested:表示一个动作已被安排,但尚未启。
    2. inflight:表是当前正在执行操作。
    3. completed:表是在时间线上完成了操作。
  4. 两个时间概念

    区分两个重要的时间概念:

    1. Arrival time: 数据到达 Hudi 的时间,commit time。

    2. Event time: record 中记录的时间。

        上图中采用时间(小时)作为分区字段,从 10:00 开始陆续产生各种 commits,10:20 来了一条 9:00 的数据,根据event time该数据仍然可以落到 9:00 对应的分区,通过 timeline 直接消费 10:00 (commit time)之后的增量更新(只消费有新 commits 的 group),那么这条延迟的数据仍然可以被消费到。

2.2、文件布局(File Layout)

        Hudi将一个表映射为如下文件结构

Hudi存储分为两个部分:

  1.         1、元数据:.hoodie目录对应着表的元数据信息,包括表的版本管理(Timeline)、归档目录(存放过时的instant也就是版本),一个instant记录了一次提交(commit)的行为、时间戳和状态,Hudi以时间轴的形式维护了在数据集上执行的所有操作的元数据;
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值