数据湖-hudi概述

news/2024/5/21 7:59:12/文章来源:https://blog.csdn.net/y3over/article/details/127247807

前言

数据湖是目前比较热的一个概念,许多企业都在构建或者计划构建自己的数据湖。

数据湖是一个集中式存储库,允许您以任意规模存储所有结构化和非结构化数据。您可以按原样存储数据(无需先对数据进行结构化处理),并运行不同类型的分析 – 从控制面板和可视化到大数据处理、实时分析和机器学习,以指导做出更好的决策。

从数据仓库看数据湖

引用一下AWS数据仓库和数据湖官方对比。

  • 数据仓库是一个优化后的数据库,用于分析来自事务系统和业务线应用系统的关系型数据。事先定义好数据结构和Schema,以便提供快速的SQL查询。原始数据经过一些列的ETL转换,为用户提供可信任的“单一数据结果”。
  • 数据湖有所不同,因为它不但存储来自业务线应用系统的关系型数据,还要存储来自移动应用程序、IoT设备和社交媒体的非关系型数据。捕获数据时,不用预先定义好数据结构或Schema。这意味着数据湖可以存储所有类型的数据,而不需要精心设计数据结构。可以对数据使用不同类型的分析方式(如SQL查询、大数据分析、全文搜索、实时分析和机器学习)。

总结: 数据湖对数据包融性更强,数据处理方式更多样化。 反之, 数据湖的数据更乱

请添加图片描述

  1. 湖和仓的元数据无缝打通,互相补充,数据仓库的模型反哺到数据湖(成为原始数据一部分),湖的结构化应用沉淀到数据仓库。
  2. 统一开发湖和仓,存储在不同系统的数据,可以通过平台进行统一管理。
  3. 数据湖与数据仓库的数据,根据业务的发展需要决定哪些数据放在数仓,哪些放在数据湖,进而形成湖仓一体化。
  4. 数据在湖,模型在仓,反复演练转换。

Hudi是什么

Hudi是Uber公司开源的数据湖架构,它是围绕数据库内核构建的流式数据湖,一种新的技术架构。

根据流式的需求,他设计文件存储和管理 实现 “COW vs MOR” 两种数据模型

为了适应这种hudi的数据模型并融入现在的大数环境,他给所有组件写了huid 插件。

Hudi作为一个数据湖方案,他自己本身不产生任何业务数据, 也不用单独布署。完全依附于其它大数据组件

在这里插入图片描述

  • hudi 底层的数据可以存储到hdfs、s3、azure、alluxio 等存储
  • hudi 可以使用spark/flink 计算引擎来消费 kafka、pulsar 等消息队列的数据,而这些数据可能来源于 app 或者微服务的业务数据、日志数据,也可以是 mysql 等数据库的 binlog 日志数据
  • spark/hudi 首先将这些数据处理为 hudi 格式的 row tables (原始表),然后这张原始表可以被 Incremental ETL (增量处理)生成一张 hudi 格式的 derived tables 派生表
  • hudi 支持的查询引擎有:trino、hive、impala、spark、presto 等
    支持 spark、flink、map-reduce 等计算引擎继续对 hudi 的数据进行再次加工处理

数据组织结构

Hudi表的数据文件,可以使用操作系统的文件系统存储,也可以使用HDFS这种分布式的文件系统存储。为了后续分析性能和数据的可靠性,一般使用HDFS进行存储。以HDFS存储来看,一个Hudi表的存储文件分为两类。
请添加图片描述

  1. .hoodie 文件:由于CRUD的零散性,每一次的操作都会生成一个文件,这些小文件越来越多后,会严重影响HDFS的性能,Hudi设计了一套文件合并机制。 .hoodie文件夹中存放了对应的文件合并操作相关的日志文件。
  2. amricas和asia相关的路径是实际的数据文件,按分区存储,分区的路径key是可以指定的。

hoodie文件

Hudi把随着时间流逝,对表的一系列CRUD操作叫做Timeline,Timeline中某一次的操作,叫做Instant。

  • Instant Action,记录本次操作是一次数据提交(COMMITS),还是文件合并(COMPACTION),或者是文件清理(CLEANS);
  • Instant Time,本次操作发生的时间;
  • State,操作的状态,发起(REQUESTED),进行中(INFLIGHT),还是已完成(COMPLETED);

请添加图片描述
hoodie文件夹中存放对应操作的状态记录
请添加图片描述

Timeline来解决因为延迟造成的数据时序问题

数据文件

Hudi真实的数据文件包含一个metadata元数据文件(记录分区)和数据文件parquet列式存储。
请添加图片描述
为了实现数据的CRUD,需要能够唯一标识一条记录,Hudi将把数据集中的唯一字段(record key ) + 数据所在分区 (partitionPath) 联合起来当做数据的唯一键。

请添加图片描述

  1. Hudi数据集的组织目录结构与Hive表示非常相似,一份数据集对应这一个根目录。数据集被打散为多个分区,分区字段以文件夹形式存在,该文件夹包含该分区的所有文件。
  2. 在根目录下,每个分区都有唯一的分区路径,每个分区数据存储在多个文件中。
  3. 每个文件都有惟一的fileId和生成文件的commit所标识。如果发生更新操作时,多个文件共享相同的fileId,但会有不同的commit。

Index 索引

Hudi维护着一个索引,以支持在记录key存在情况下,将新记录的key快速映射到对应的fileId。

  1. Bloom filter:存储于数据文件页脚。默认选项,不依赖外部系统实现。数据和索引始终保持一致。
  2. Apache HBase :可高效查找一小批key。在索引标记期间,此选项可能快几秒钟。

请添加图片描述

Hudi的表格式

Hudi提供两类型表:写时复制(Copy on Write,COW)表和读时合并(Merge On Read,MOR)表。

  • 对于 Copy-On-Write Table,用户的 update 会重写数据所在的文件,所以是一个写放大很高,但是读放大为 0,适合写少读多的场景。
  • 对于 Merge-On-Read Table,整体的结构有点像 LSM-Tree,用户的写入先写入到 delta data 中,这部分数据使用行存,这部分 delta data 可以手动 merge 到存量文件中,整理为 parquet 的列存结构。

Copy on Write

简称COW,顾名思义,它是在数据写入的时候,复制一份原来的拷贝,在其基础上添加新数据。正在读数据的请求,读取的是最近的完整副本,这类似Mysql 的MVCC的思想。
请添加图片描述
COW表主要使用列式文件格式(Parquet)存储数据,在写入数据过程中,执行同步合并,更新数据版本并重写数据文件,类似RDBMS中的B-Tree更新。

  1. 更新update:在更新记录时,Hudi会先找到包含更新数据的文件,然后再使用更新值(最新的数据)重写该文件,包含其他记录的文件保持不变。当突然有大量写操作时会导致重写大量文件,从而导致极大的I/O开销。
  2. 读取read:在读取数据时,通过读取最新的数据文件来获取最新的更新,此存储类型适用于少量写入和大量读取的场景

Merge On Read

简称MOR,新插入的数据存储在delta log 中,定期再将delta log合并进行parquet数据文件。
读取数据时,会将delta log跟老的数据文件做merge,得到完整的数据返回。下图演示了MOR的两种数据读写方式。
请添加图片描述
MOR表是COW表的升级版,它使用列式(parquet)与行式(avro)文件混合的方式存储数据。在更新记录时,类似NoSQL中的LSM-Tree更新。

  1. 更新:在更新记录时,仅更新到增量文件(Avro)中,然后进行异步(或同步)的compaction,最后创建列式文件(parquet)的新版本。此存储类型适合频繁写的工作负载,因为新记录是以追加的模式写入增量文件中。
  2. 读取:在读取数据集时,需要先将增量文件与旧文件进行合并,然后生成列式文件成功后,再进行查询。

在 READ OPTIMIZED 模式下,只会读最近的经过 compaction 的 commit。

查询

Hudi支持三种不同的查询表的方式:

  1. Snapshot Queries(快照查询):
    动态合并最新的基本文件(parquet)和增量文件(Avro)来提供近实时数据集
    • Copy On Write表读parquet文件,
    • Merge On Read表读parquet + log文件。
  2. Incremental Queries(增量查询)
    仅查询新写入数据集的文件,需要指定一个Commit/Compaction的即时时间(位于Timeline上的某个instant)作为条件,来查询此条件之后的新数据
  3. Read Optimized Queries(读优化查询)
    直接查询基本文件(数据集的最新快照),其实就是列式文件(Parquet)。

主要参考

《数据湖技术架构演进》
《数据湖系列文章》
《Hudi官方文档》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_22344.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx80转443

多了一个server,做了一个301的跳转 server { listen 80; server_name www.web1.com web1.com; (这里是可写别名的,第二个是别名) return 301 https://www.web1.com$request_uri; (当别人访问80,让它转到…

智能网联-浅谈基于PKI的车联网应用服务安全

智能网联-浅谈基于PKI的车联网应用服务安全 面对车联网快速发展趋势,信息安全是一项必要的防护措施。车端应用数字证书可认证合法身份,保障数据加密通信,防止信息的泄露与攻击。基于PKI的车联网应用服务安全认证体系框架,从国家层…

Java多线程的创建与Thread类的方法及使用

Java多线程的创建与Thread类的方法及使用🍎一.Thread类的属性与方法🍇1.1什么是线程🍇1.2Thread类的基础常见的构造方法🍇1.3Thread的常见属性🍇1.4Thread类常用的基础方法🍎二.Java线程的创建&#x1f347…

6步搭建一个飞机大战游戏

摘要:本文以华为云软件开发平台DevCloud为例,展示飞机大战游戏开发的DevOps实践流程。DevOps实践 DevOps实践是一种开发、测试运维一体化的模式,其实践的外在表现一般包括了如代码仓库、构建、测试、发布、配置、监控等工具形成的一个完整的…

引擎之旅 Chapter.3 文件系统

文章目录引言在此之前...Unicode和ASCIIC风格字符串的操作函数集合字符串操作字符串类型转换Part1:操作文件名和文件路径Part2:单个文件的读写文件打开的模式TFile的定义Part3:异步文件I/O异步I/O线程文件类中的异步方法引言 为什么会将文件…

数据中台开源解决方案(一)

数据中台商业的解决方案有很多,开源框架种类繁多,每一个模块都有很多开源的套件。以查询引擎为例,可以使用的开源工具有MySQL、Redis、Impala、MongoDB、PgSQL等。可以根据实际业务需要,选择合适的开源套件。 可供选择的解决方案太多,重点推荐开源解决方案,框架图如下图所…

【RCJ-2 AC220V 0.015A静态冲击继电器】

系列型号 RCJ-2/48VDC冲击继电器 RCJ-2/110VDC冲击继电器 RCJ-2/220VDC冲击继电器 RCJ-2/100VAC冲击继电器 RCJ-2/127VAC冲击继电器 RCJ-2/220VAC冲击继电器 RCJ-3/220VAC冲击继电器 RCJ-3/127VAC冲击继电器 RCJ-3/100VAC冲击继电器 RCJ-3/220VDC冲击继电器 RCJ-3/110VDC冲击继…

【论文笔记】CIKM‘22 & Amazon | (Navip) 推荐系统中图神经网络的去偏邻域聚合

目录1. Introduction2. Related Work2.1 基于GNN的推荐2.2 逆倾向评分IPS3. 模型3.1 Navip4. 实验结果本文是亚马逊在CIKM 2022的一篇工作 论文地址:https://arxiv.org/pdf/2208.08847.pdf 问题 图形神经网络(GNN)对于曝光偏差的脆弱性导致模型偏差,产生…

09-Pytorch中的序列化容器

目录 1.梯度消失和梯度爆炸 1.1 梯度消失 1.2 梯度爆炸 1.3 解决梯度消失或梯度爆炸的经验 2.nn.Sequential 3.nn.BatchNorm1d 4.nn.Dropout 1.梯度消失和梯度爆炸 在使用pytorch中的序列化容器之前,我们先来了解一下常见的梯度消失和梯度爆炸的问题。 1.1 …

②、HTML 元素学习

HTML 元素 HTML 文档由 HTML 元素定义。 HTML 元素 *开始标签常被称为起始标签(opening tag),结束标签常称为闭合标签(closing tag)。 HTML 元素语法 HTML 元素以开始标签起始HTML 元素以结束标签终止元素的内容是开始…

Class02

Class02 1.自动类型值转换 隐式类型转换 显式类型转换 隐式类型转换(自动类型转换) 隐式类型转换是小范围向大范围转换 实际上小范围包含在大范围内 整数类型的默认类型为int 浮点数类型的默认类型为double 显式类型转换(强制类型转换&am…

linux 预读机制 (linux4.14)

一、基本概念 设计背景 文件一般是顺序访问的,访问[A, B]范围的数据后,接下来很可能访问[B1, BN]数据。由于访问磁盘、flash等存储器件比较耗时,在访问 [A, B]的时候,如果提前把[B1, BN]数据从存储器件读取到ram中,那…

TTN服务器LoRaWAN网关配置流程

在LoRaWAN物联网网络中,LoRaWAN网关起到了绝对核心的作用,它在整个网络中像是一座桥梁建立起网络服务器与终端节点的通信,下面我们将简单介绍如何使用E890-470LG11网关实现TTN服务器与终端节点的通信。 首先,在LoRaWAN通信中&…

亿佰特LoRaWAN入网TTN并订阅MQTT消息

一、LoRaWAN节点入网 1.注册并登录TTN账号。 2.添加网关。Gateway EUI可自定义。 3.切换到亿百特网关配置网页(http://192.168.10.1/),配置网关。 4.切抱TTN网页,创建app,Application ID可任意取,只要不重复就行&…

MSRN(多尺度超分辨率重建)

目前的研究倾向于使用更深层次的卷积神经网络来提高性能。然而,盲目增加网络深度不能有效改善网络。更糟糕的是,随着网络深度的增加,训练过程中出现了更多的问题,需要更多的训练技巧。在本文中,我们提出了一种新颖的多…

TRC丨艾美捷TRC 1-Hexyl-2-phenyl-4说明书

1-Alkyl-2-aryl-4-(1-naphthoyl)pyrroles 作为大丨麻素 CB1 和 CB2 受体的高亲和力配体。 艾美捷TRC 1-Hexyl-2-phenyl-4化学性质: 目录号H297400 化学名称1-Hexyl-2-phenyl-4-(1-naphthoyl)pyrrole JWH-147 同义词JWH-147;(1-己基-5-苯基-1H-吡咯-3-基…

数据库06-Redis 强化

目录 Redis 强化 缓存使用原则 缓存淘汰策略 缓存穿透 缓存击穿 缓存雪崩 Redis持久化 RDB:(Redis Database Backup) AOF(Append Only File): Redis存储原理 Redis集群 Redis 强化 缓存使用原则 什么时候,什么样的数据能够保存在Redis中? 1.数据量不能太大 2.使…

计算机操作系统:输入输出管理知识点汇总(简化版)

说明 博客作为笔记备份,不定时更新参考内容为王道考研《计算机操作系统考研复习指导2023》简化版仅进行了知识点汇总,详细知识点没有记录,主要用来搭知识体系框架思维导图为文字版导出的,可将文字内容粘贴到思维导图软件自动生成…

DDL-操作表查询和创建

DDL-操作表查询以及创建 操作表 1.C(Create):创建语法:create table 表名(列名1 数据类型1,列名2 数据类型2,......列名n 数据类型n);注意:最后一列不需要加逗号 数据类型:int:整数类型age int,double:小数类型score double(5,2)date:日期类型,只包含年月日,yyyy…

二维数组、可变长数组、多维数组、函数调用

1.二维数组名称也可以代表数组里第一个存储区的地址。 例子: 输出结果:二维数组的名称二维数组第一个数的地址 二维数组的名称也不可以被赋值。 二维数组名称也可以进行sizeof计算,结果是二维数组里所有存储区的总大小。 例子:…