最新
数据湖-Iceberg-源码学习-云原生-Kubernetes
一、概述
https://www.cnblogs.com/tencent-cloud-native/p/13938298.html
二、设计
数据湖-Hudi-源码学习-Kernel-Table-事务
一、概述传统数据湖在数据写入时的事务性支持不够好,随着越来越多的业务关键处理流程移至数据湖,需要一种机制来原子地发布一批数据,即仅保存有效数据,部分失败必须回滚而不会损坏已有数据集。同时查询的结果必须是可重复的,查询端看不到任何部分提取的数据,任何提交的数据都必须可靠地写入。Hudi 提供了强大的 ACID 能力。高效的回滚机制能够保证数据一致性和避免“孤儿文件”或中间状态数据文件残留和产生。
原子性: 事务整体是一个工作单元,对数据的修改操作,要么全部执行,要么完全不执行,没有第三种状态。
一致性: 在一个事务执行之前和执行之后数据库都必须处于逻辑上的一致性状态,数据在不同的事务中是相同的。
隔离性: 并发执行的事务之间是相互隔离的,一个事务内部的状态,对其他事务是不可见的。
持久性: 当系统发生故障时,持久性确保已提交事务的更新不会丢失,也就是说一旦一个事务提交,保证数据的改变是永久性的。
ACID 四属性的关系可大概表述为:原子性是要求,一致性是目标,隔离性是手段,持久性是结果。如何做到原子性的隔离是实现事务的重中之重。在宏观上,实现事务特性是通过并发控制。在微观上,实现 ...
Hadoop-系列
一、概述Hadoop 是一个由 Apache 基金会所开发的分布式系统基础架构,主要解决,海量数据的存储和海量数据的分析计算问题。
二、核心组件Hadoop 的核心组件是 HDFS,MapReduce 以及 YARN。
2.1. HDFSHDFS 是 Hadoop 分布式文件系统,是指提供对应用程序数据的高吞吐量访问的分布式文件系统。
正在持续施工中ing~~~
引用本站文章
Hadoop-组件-HDFS 系列
Joker
2.2. YarnYarn 是作业调度和集群资源管理的框架。
正在施工中ing~~~
引用本站文章
Hadoop-组件-Yarn 系列
Joker
...
Spark 系列
一、概述Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是 加州大学伯克利分校的 AMP 实验室开源的类 Hadoop MapReduce 的通用并行框架。
二、理论笔记
引用本站文章
Spark-理论笔记系列
Joker
三、源码学习
引用本站文章
Spark-源码学习系列
Joker
四、大厂分享
引用本站文章
Spark-发展-大厂分享系列
...
数据湖-Hudi-源码学习-Kernel-TableFormat-FileLayouts-分区目录-数据层设计
一、概述Hudi 数据文件被组织为三层逻辑架构: File Group -> File Slice -> Base/Log Files,文件首先被组织为文件组(FileGroup),每个文件组包含多个文件切片(File Slice)。每个切片都包含一个在特定提交时生成的基本文件(Base Files),以及在 MOR 表中的一组包含对基本文件的更新的日志文件(Log Files)。
二、设计Hudi 文件布局的顶层结构是数据表对应的 base 目录,下一层是各分区目录,分区目录可根据分区列数量嵌套多层。在最底层分区文件夹上,Hudi不再创建子文件夹,全部都是平铺的数据文件,但是这些文件在逻辑上依然有着清晰的层级关系。顶层的文件集合是 File Group, File Group 下面是 File Slice, File Slice 下面是具体的数据文件。
2.1. 数据文件 Base File / Log file2.1.1. BaseFileBase File 是存储 Hudi 数据集的主体文件, 以 Parquet 等列式格式存储。
2.1.2. LogFi ...
数据湖-Hudi-源码学习-Kernel-Table-marker 机制
一、概述Hudi 支持在写入时自动清理未成功提交的数据。 Apache Hudi 在写入时引入标记 $marker$ 机制来有效跟踪写入存储的数据文件。
ACID 四属性的关系可大概表述为:原子性是要求,一致性是目标,隔离性是手段,持久性是结果。如何做到原子性的隔离是实现事务的重中之重。在宏观上,实现事务特性是通过并发控制。在微观上,实现事务要靠隔离
二、设计Hudi 中的 $marker$ 机制是一个表示存储中存在对应的数据文件的标签,Hudi 使用它在故障和回滚场景中自动清理未提交的数据。
每个标记条目由三部分组成:
数据文件名
标记扩展名 (.marker)
创建文件的 I/O 操作(CREATE: 插入、MERGE: 更新/删除 或 APPEND 两者之一)
例如标记 91245ce3-b682-4f9f-969e-343364159174-0_140-579-0_20210820173605.parquet.marker.CREATE 指示:
相应的数据文件是 91245ce3-b682-4f9f-969e-343364159174-0_140-57 ...
数据湖-Iceberg-源码学习-Kernal-Table-数据操作-删除
一、概述Iceberg 中删除操作通常分为两个步骤: 删除表的数据和元数据。
删除表的数据
Iceberg 删除表的数据文件使用 DeleteFiles 类,它提供了一组方法用于删除表中的数据文件。
删除表的元数据
删除表的元数据通过 Catalog 类实现, Catalog 提供了一组方法用于删除 Iceberg 表和相关元数据
二、设计在 v0.10.0 之后,Iceberg 除了存储数据的文件 DataFile 以外,还引入了一种新的文件 DeleteFile。
DeleteFile 里面保存的是 “哪一条数据被删除” 的记录。当 Iceberg 提交一次写入(也就是创建一个新的 snapshot) 时,如果这次写入操作里删除了过去的某条记录,Iceberg 并不会直接删除 DataFile 里面的数据。
在 HDFS 和对象存储上,无法修改一个已经存在的文件
所以 Iceberg 把这条记录的 id 写入一个 DeleteFile 里面。这个 DeleteFile 也是创建出的 snapshot 的一部分,被记录在 snapshot 的文件列表里面。
Icebe ...
数据湖-Hudi-源码学习-Kernel-Metadata Table 设计
一、概述Hudi 最开始基于 HDFS 构建和设计,没有太多考虑云上存储场景,导致在云上 FileList 非常慢。因此在 0.8 版本,社区引入了 Metadata Table ,Metadata Table 本身也是一张 Hudi表,可以复用 Hudi Table Service。Metadata Table 表文件里会存分区下有的所有文件名以及文件大小,每一列的统计信息做查询优化,以及现在社区正在做的,每条记录对应每个文件 ID 都记录在 Meta table,减少处理 Upsert 时查询待更新文件的开销。
二、设计目前使用 hoodie.metadata.enable 后,会在 .hoodie 目录下生成一张名为 metadata 的 mor 表,利用该表可以显著提升源表的读写性能。
该表目前包含三个分区: files, column_stats, bloom_filters,分区下文件的格式为 hfile,采用该格式的目的主要是为了提高 metadata 表的点查能力。
2.1. filesfiles 分区纪录了源表各个分区内的所有文件列表,这样hudi在生 ...
数据湖-Hudi-源码学习-Kernel-TableFormat-FileLayouts-优化-Metadata Table
一、概述Apache Hudi 索引在数据读和 写 的过程中都有应用,数据读取过程查询引擎利用 MetaData Table 使用索引进行 $Data\ Skipping$ 提高数据查找速度。
二、设计开启参数 hoodie.metadata.enable 后,会在 .hoodie 目录下生成一张名为 metadata 的 mor 表,利用该表可以显著提升源表的读写性能。Metadata Table 目前包含三个分区: files, column_stats, bloom_filters,分区下文件的格式为 HFile。
2.1. filesfiles 分区纪录了源表各个分区内的所有文件列表,在生成源表的文件系统视图时通过 files 分区记录信息可以避免依赖文件系统的 $List\ Files$ 操作,在云存储场景 $List\ Files$ 操作是性能瓶颈。
Timeline Server 和上述设计类似,通过时间线服务器来避免对提交元数据进行 $List\ Files$ 以生成 Hudi Active Timeline
2.2. column_statscolumn ...