HUDI基础

什么是Hudi?

image.png

HUDI(Hadoop Upserts Deletes and Incrementals)是一个开源的数据湖工具,用于管理大规模数据湖中的数据。

HUDI旨在解决数据湖中常见的一些挑战,如数据的增量更新、删除和查询等。它提供了一套API和工具,可以帮助用户在数据湖中进行写入、更新、删除和查询等操作,并提供了高效的数据索引和存储机制,以加速数据的访问和处理。

HUDI的核心理念是将数据分为小的、可修改的单元,称为"写时复制(copy-on-write)"。当数据需要更新或删除时,HUDI会创建一个新的数据文件,而不是直接修改原始数据文件。这种设计可以保证数据的不可变性,同时提供了高效的增量更新和删除操作。

HUDI还提供了用于数据管理的元数据存储和查询功能,可以跟踪数据的版本、变更历史和元数据信息。这使得用户可以轻松地追踪和管理数据的变更,同时支持time-travel查询,即可以查询数据在不同时间点的版本。

Hudi Timeline

Hudi timeline是HUDI用于跟踪和管理数据变更历史的一种机制。它记录了数据湖中各个数据集的不同版本和变更操作,以及它们在时间上的顺序。

Timeline的核心概念是HUDI数据集的不可变性。每当对HUDI数据集进行写入、更新或删除操作时,HUDI会创建一个新的数据文件或目录,而不是直接修改原始数据文件。每个数据文件或目录都被分配一个唯一的时间戳,用于表示它的创建时间。

Timeline维护了所有数据文件和目录的时间戳信息,并按照时间顺序组织它们。这使得HUDI能够追踪数据集的完整变更历史,并支持time-travel query。通过Timeline,用户可以查询数据集在不同时间点的版本,回溯到过去的数据状态。

HUDI Timeline还提供了一些其他功能,如支持增量数据拉取(incremental data pull)和增量数据合并(incremental data merge)。增量数据拉取允许用户只拉取数据集中发生变化的部分,而不必处理整个数据集。增量数据合并则可以将多个HUDI数据集合并为一个数据集,并保持数据的一致性和有序性。

Hudi的Timeline由一系列按时间顺序的Instants组成,Instant有下面三部分:

  • Instant action: 对于Hudi table的操作类型;
  • Instant time:操作发生时间戳(比如20190117010349);
  • Instant state: Instant的当前状态。

Instant Action主要有以下几种:

  • COMMITS:commit表示将一批记录原子的写入到hudi table中;
  • CLEANS:删除表中不再需要的旧版本文件,后台活动。
  • DELTA_COMMIT:delta_commit指的是将一批记录原子写入 MergeOnRead 类型的表中,其中一些/所有数据可以只写入delta logs。
  • COMPACTION: 将delta logs里的数据与parquet data files合并。
  • ROLLBACK:表示commit/delta commit不成功并回滚,删除在此类写入期间产生的任何partial data files。
  • SAVEPOINT:将某些file group标记为“saved”,这样cleaner就不会删除它们。 在发生灾难/数据恢复情况时,它有助于将表恢复到timeline上的某个点。

Instant State主要有以下几种:

  • REQUESTED:表示已经被scheduled,但尚未启动的操作。
  • INFLIGHT:表示操作正在进行。
  • COMPLETED:表示操作已经完成。

Hudi Table/Query Type

在Hudi中,有几种常见的表类型,用于满足不同的数据管理和处理需求。下面是Hudi中常见的表类型:

  • Copy-on-Write (COW)表:COW表是Hudi最基本的表类型。它采用了写时复制的策略,每次更新操作都会创建一个新版本的完整数据集。新版本以一组新的文件形式存储,而原始数据保持不变。COW表适合那些数据写入一次后多次读取的场景。
  • Merge-on-Read (MOR)表:MOR表是Hudi引入的一种改进型表类型。它采用了基于读取时合并的策略。数据被组织成基础文件(base files)和日志文件(log files)。基础文件包含不可变的数据,而日志文件则记录了基础文件的增量更改。在查询执行期间,Hudi会动态地合并基础文件和日志文件,以提供一致的数据视图。MOR表适合那些需要频繁更新和低延迟查询的场景。


    image.png

在Hudi中,有几种常见的查询类型可以用来检索和分析数据。下面是Hudi中常用的查询类型:

  • Snapshot Query:Snapshot查询是一种基于数据快照(Snapshot)的查询方式。它可以获取Hudi表中的某个commit或compaction的数据快照,并以只读方式进行查询和分析。通过指定特定的时间戳或快照ID,可以获取表在该时间点的一致视图。
  • Incremental Query:Hudi支持增量查询,即只查询某个commit或compaction以来有变化的数据。增量查询利用Hudi表的增量存储和索引结构,可以快速检索到最新的变化数据,避免全表扫描,提高查询效率。
  • Read Optimized Queries:查询给定某个commit或compaction的snapshot。仅暴露file group中的base/columnar文件,不暴漏delta log文件,以期获得与非Hudi 列存表相同的查询性能。


    image.png

Hudi File Layout

  • Hudi将数据表组织成分布式文件系统上base path下的目录结构。
  • 表被分割成多个partition。
  • 在每个partition内,文件被组织成file group,由file ID唯一标识。
  • 每个file group包含多个file slices。
  • 每个file slice包含在某个commit/compaction instant生成的base file(.parquet),以及一组delta log(.log.*),这些delta log文件包含了自base file生成以来对base file的插入/更新操作。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容

  • 一、背景 传统数仓分为离线和实时两个部分 离线部分属于业务驱动,固定的计算逻辑,通过定时调度,最后产出报表; 实时...
    TOTower阅读 1,365评论 0 1
  • Hudi架构 一. 时间轴(TimeLine) 1.1 时间轴(TimeLine)概念 Hudi的核心是维护在不同...
    只是甲阅读 471评论 0 0
  • Flink 使用介绍相关文档目录 Flink 使用介绍相关文档目录[https://www.jianshu.com...
    AlienPaul阅读 12,749评论 4 10
  • [TOC] 数据实时处理和实时的数据 实时分为处理的实时和数据的实时即席分析是要求对数据实时的处理,马上要得到对应...
    西北偏北阅读 1,152评论 0 0
  • 背景 本篇为Hudi概念和特性相关介绍。依据于官网和相关博客资料,融入了个人理解。内容可能会有疏漏,欢迎大家指正和...
    AlienPaul阅读 13,247评论 0 10