赞
踩
本文来自"黑马程序员"hudi课程
1.第一章 Hudi 框架概述
1.1 数据湖Data Lake
1.1.1 仓库和湖泊
1.1.2 什么是数据湖
1.1.3 数据湖的优点
1.1.4 Data Lake vs Data warehouse
1.1.5 数据湖框架
1.1.5.1 Delta Lake
1.1.5.2 Apache Iceberg
1.1.5.3 Apache Hudi
1.1.6 湖仓一体(Data Lakehouse)
1.1.6.1 背景概述
1.1.6.2 概念定义
1.1.6.3 架构原则
1.2 Hudi 介绍
1.2.1 官方定义
1.2.2 Hudi 特性
1.2.3 应用场景
1.3 Hudi 发展及特性
1.3.1 Hudi 发展历史
1.3.2 Hudi 版本特性
1.3.2.1 0.5.x 版本
1.3.2.2 0.6 版本
1.3.2.3 0.7 版本
1.3.2.4 0.8 版本
1.3.2.5 0.9 版本
Apahe Hudi (Hadoop Upserts delete and Incrementals) 是Uber主导开发的开源数据湖框架,为了解决大数据生态系统中需要插入更新及增量消费原语的摄取管道和ETL管道的低效问题,该项目在2016年开始开发,并于2017年开源,2019年1月进入 Apache 孵化器,且2020年6月称为Apache 顶级项目。
官网:https://hudi.apache.org/
先了解什么是数据湖DataLake,及Hudi 数据湖框架功能及各个版本特性。
数据湖是大数据架构的新范式,以原始格式存储数据,可以满足用户的广泛需求,并能提供更快的洞察力,细致的数据编录和管理是成功实施数据湖的关键。
仓库(WareHouse)是人为提前建造好的,有货架,还有过道,并且还可以进一步为放置到货架的物品指定位置。
而湖泊(Lake)是液态的,是不断变化的、没有固定形态的,基本上是没有结构的,湖泊可以是由河流 、小溪和其他未被任何处理的水源维持。湖泊是不需要预先指定结构的。
Data lake这个术语由Pentaho公司的创始人兼首席技术官詹姆斯·狄克逊(James Dixon)提出,他对数据湖的解释是:
把你以前在磁带上拥有的东西倒入到数据湖,然后开始探索该数据。
数据湖(Data Lake)和数据库、数据仓库一样,都是数据存储的设计模式。数据库和数据仓库会以关系型的方式来设计存储、处理数据。但数据湖的设计理念是相反的,数据仓库是为了保障数据的质量、数据的一致性、数据的重用性等对数据进行结构化处理。
数据湖是一个数据存储库,可以使用数据湖来存储大量的原始数据。现在企业的数据仓库都会通过分层的方式将数据存储在文件夹、文件中,而数据湖使用的是平面架构来存储数据。我们需要做的只是给每个数据元素分配一个唯一的标识符,并通过元数据标签来进行标注。当企业中出现业务问题时,可以从数据湖中查询数据,然后分析业务对应的那一小部分数据集来解决业务问题。
了解过Hadoop的同学知道,基于Hadoop可以存储任意形式的数据。所以,很多时候数据湖会和Hadoop关联到一起。例如:把数据加载Hadoop中,然后将数据分析、和数据挖掘的工具基于Hadoop进行处理。
数据湖越来越多的用于描述任何的大型数据池,数据都是以原始数据方式存储,知道需要查询应用数据的时候才会开始分析数据需求和应用架构。
用一个类比来解释Data Lake的概念。游览大湖总是一种非常愉快的感觉。湖中的水以其最纯净的形式存在,不同的人在湖上进行不同的活动。有些人在钓鱼,有些人喜欢乘船游览,这个湖还为生活在安大略省的人们提供饮用水。简而言之,同一个湖有多种用途。
数据湖是专注于原始数据保补充。数据湖是用于长期存储数据容器的集合,通过数据湖可以大规模的捕获、加工、探索任何形式的原始数据。通过使用一些低成本的技术,可以让下游设施可以更好地利用,下游设施包括像数存以及低成本长期存储的存储设计模式,它相当于是对数据仓库的数据集市、数据仓库或者是机器学习模型。
数据湖(DataLake)是描述数据存储策略的方式,并不与具体的某个技术框架关联,与数据库、数据仓库也一样,它们都是数据的管理策略,数据湖最核心的能力包括:
维基百科上定义,数据湖(Data Lake)是一个以原始格式存储数据的存储库或系统。它按原样存储数据,而无需事先对数据进行结构化处理。一个数据湖可以存储结构化数据(如关系型数据库中的表),半结构化数据(如CSV、日志、XML、JSON),非结构化数据(如电子邮件、文档、PDF)和二进制数据(如图形、音频、视频)。数据湖有如下几个方面优点:
数据湖和数据仓库是用于存储大数据的两种不同策略,最大区别是:数据仓库是提前设计好模式(schema)的,因为数据仓库中存储的都是结构化数据。而在数据湖中,不一定是这样的,数据湖中可以存储结构化和非结构化的数据,是无法预先定义好结构的。
从如下7个方面对比认识数据仓库和数据湖不同点:
第一点:数据的存储位置不同
第二点:数据源不同
第三点:用户不同
第四点:数据质量不同
第五点、数据模式
第六点:敏捷扩展性
第七点:应用不同
目前市面上流行的三大开源数据湖方案分别为:Delta Lake、Apache Iceberg和Apache Hudi。
Delta Lake:流批一体的Data Lake存储层,支持 update/delete/merge
Apache Iceberg:用于跟踪超大规模表的新格式,是专门为对象存储(如S3)而设计的
官网:http://iceberg.apache.org/
Apache Iceberg 是由 Netflix 开发开源的,其于 2018年11月16日进入 Apache 孵化器,是 Netflix 公司数据仓库基础。
iceberg 是一种可伸缩的表存储格式,内置了许多最佳实践。允许我们在一个文件里面修改或者过滤数据;当然多个文件也支持这些操作。
在查询方面,Iceberg 支持 Spark、Presto,提供了建表的 API,用户可以使用该 API 指定表明、schema、partition 信息等,然后在 Hive catalog 中完成建表。
Apache Hudi:提供的fast upsert/delete以及compaction等功能
官网:https://hudi.apache.org/
Hudi 设计目标正如其名,Hadoop Upserts Deletes and Incrementals(原为 Hadoop Upserts anD Incrementals),强调其主要支持Upserts、Deletes和Incrementa数据处理,其主要提供的写入工具是 Spark HudiDataSource API 和自身提供的 DeltaStreamer。
支持三种数据写入方式:UPSERT,INSERT 和 BULK_INSERT。其对 Delete 的支持也是通过写入时指定一定的选项支持的,并不支持纯粹的 delete 接口。
Data Lakehouse(湖仓一体)是新出现的一种数据架构,它同时吸收了数据仓库和数据湖的优势,数据分析师和数据科学家可以在同一个数据存储中对数据进行操作,同时它也能为公司进行数据治理带来更多的便利性。
LakeHouse是一种结合了数据湖和数据仓库优势的新范式。LakeHouse使用新的系统设计:直接在用于数据湖的低成本存储上实现与数据仓库中类似的数据结构和数据管理功能。如果你现在需要重新设计数据仓库,鉴于现在存储(以对象存储的形式)廉价且高可靠,不妨可以使用LakeHouse。
如下展示,从数据仓库DataWarehouse到数据湖DataLake,再到湖仓一体LakeHouse。
**湖仓一体架构力图结合数据仓库的弹性和数据湖的灵活性。**人们创建数据仓库来支持商业智能,主要用例包括编制报表、发布下游数据集市(Data Marts),以及支持自助式商业智能等。数据湖的概念来自于数据科学对数据的探索,主要用例包括通过快速实验创建和检验假设,以及利用半结构化和非结构化数据等。
湖仓一体具有以下五个关键特性:
LakeHouse是一种新的数据管理范式,从根本上简化了企业数据基础架构,并且有望在机器学习已渗透到每个行业的时代加速创新。
湖仓一体概念架构中,各核心组件通过有效的组织,形成了全新的湖仓一体范式。
建立真实有效湖仓一体架构,应遵循如下五个关键原则:
Hudi是Hadoop Upserts anD Incrementals的缩写,用于管理HDFS上的大型分析数据集存储。 Hudi的主要目的是高效的减少入库延时,Hudi是Uber开发的一个开源项目。存储于HDFS上的分析数据集一般通过两种类型的表来提供,即Copy-On-Write Table写时拷贝和Merge-On-Read Table读时合并。
Apache Hudi是在大数据存储上的一个数据集,可以将 Change Logs 通过 upsert 的方式合并进 Hudi;Hudi 对上可以暴露成一个普通的 Hive 或 Spark 的表,通过 API 或命令行可以获取到增量修改的信息,继续供下游消费;Hudi 还保管了修改历史,可以做时间旅行或回退;Hudi 内部有主键到文件级的索引,默认是记录到文件的布隆过滤器,高级的有存储到 HBase 索引提供更高的效率。
Apache Hudi通过分布式文件系统(HDFS或者云存储)来摄取(Ingests)、管理(Manages)大型分析型数据集。 Hudi是可以借助于DFS之上,提供了一些数据提取、管理功能。
一言以蔽之,Hudi是一种针对分析型业务的、扫描优化的数据存储抽象,它能够使DFS数据集在分钟级的时延内支持变更,也支持下游系统对这个数据集的增量处理。
Hudi 数据湖的基础架构:
下载地址:https://hudi.apache.org/download.html
**Apache Hudi使得用户能在Hadoop兼容的存储之上存储大量数据,同时它还提供两种原语,使得除了经典的批处理之外,还可以在数据湖上进行流处理。**这两种原语分别是:
Hudi提供的功能特性如下:
Apache Hudi作为Uber开源的数据湖框架,抽象了存储层(支持数据集的变更,增量处理);为Spark的一个Lib(任意水平扩展,支持将数据存储至HDFS);开源(现已在Apache顶级项目)。
场景一:近实时摄取(Near Real-Time Ingestion)
场景二:增量处理管道(Incremental Processing Pipelines)
场景三:统一存储分析(Unified Storage For Analytics)
场景四:数据删除(Data Deletion)
Apache Hudi代表Hadoop Upserts anD Incrementals,管理大型分析数据集在HDFS上的存储。Hudi的主要目的是高效减少摄取过程中的数据延迟。
由Uber开发并开源,该项目在2016年开始开发,并于2017年开源,2019年1月进入 Apache 孵化器,且2020年6月称为Apache 顶级项目。目前发布5大版本,分别为0.5.x、0.6、0.7、0.8及0.9版本,各个版本功能特性说明如下。
从2015年提出增量处理数据模型思想开始,到至今Hudi发展成熟,经历如下几个阶段:
国内大部分互联网公司都在使用Hudi数据湖框架,进行数据存储,管理数据。
自从Hudi进入Apache 孵化器项目,发展成为Apache顶级项目,每个版本增加很多新特性。
Hudi 为Apache incubating孵化器项目以后,发布第一个版本从0.5开始,并且经过一年半以后称为Apache 顶级项目,主要就是介绍Hudi功能,修改一些Bug及新的特性,主要看看0.5.3版本,为Apache Hudi毕业后发布的第一个版本。
该版本为2020.08.25发布第一个Hudi 称为Apache 顶级项目大版本,主要为性能改进与提升。
写入端改进
查询端改进
易用性提升
该版本为2021.01.26发布新版本,增加对Flink/Java客户端支持及写入性能提升。
Clustering
Metadata表
Flink/Java客户端
写入端优化
查询端优化
该版本2021.04.06发布,称为Apache项目后第四大版本,主要提供与Flink友好支持及并发写。
Flink集成
并发写
写入端改进
查询端改进
该版本2021.08.25发布,称为Apache项目后第五大版本,主要提供Flink CDC和SparkSQL集成。
SparkSQL 支持
Flink 集成
DeltaStreamer改进
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。