赞
踩
Hudi(Hadoop Upserts Deletes and Incrementals)
,简称Hudi
,是一个流式数据湖平台,支持对海量数据快速更新,内置表格式,支持事务的存储层、 一系列表服务、数据服务(开箱即用的摄取工具)以及完善的运维监控工具,它可以以极低的延迟将数据快速存储到HDFS或云存储(S3)的工具,最主要的特点支持记录级别的插入更新(Upsert)和删除,同时还支持增量查询。
GitHub地址:https://github.com/apache/hudi
官方文档:https://hudi.apache.org/cn/docs/overview
上图从下到上,由左向右看
hdfs
、s3
、azure
、alluxio
等存储。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 的列存结构。简称COW
,顾名思义,它是在数据写入的时候,复制一份原来的拷贝,在其基础上添加新数据。正在读数据的请求,读取的是最近的完整副本,这类似Mysql 的MVCC的思想。
简称MOR
,新插入的数据存储在delta log 中,定期再将delta log合并进行parquet数据文件。读取数据时,会将delta log跟老的数据文件做merge,得到完整的数据返回。下图演示了MOR的两种数据读写方式。
权衡 | 写时复制(COW ) | 读时合并(MOR ) |
---|---|---|
数据延迟 | 更高 | 更低 |
更新代价( I/O) | 更高(重写整个parquet文件) | 更低(追加到增量日志) |
Parque&件大小 | 更小(高更新代价( I/O) | 更大(低更新代价) |
写放大 | 更高 | 更低(取决于压缩策略) |
适用场景 | 写少读多 | 写多读少 |
Hudi通过索引机制将给定的hoodie键(记录键+分区路径)一致地映射到文件id,从而提供高效的升级。一旦将记录的第一个版本写入文件,记录键和文件组/文件id之间的映射就不会改变。简而言之,映射的文件组包含一组记录的所有版本。
目前,Hudi支持以下索引类型:
Bloom索引(默认):使用由记录键构建的Bloom过滤器,也可以使用记录键范围修剪候选文件。
简单索引:根据从存储上的表中提取的键,对传入的更新/删除记录执行精简联接。
HBase索引:管理外部Apache HBase表中的索引映射。
自定义索引:当然也可以扩展这个公共API来实现自定义索引。
Hudi支持三种不同的查询表的方式:Snapshot Queries(快照查询)
、Incremental Queries(增量查询)
和Read Optimized Queries(读优化查询)
。
在hudi过去的使用场景里,和大部分公司的架构类似,采用批式和流式共存的Lambda架构,后来Uber提出增量Incremental模型,相对批式来讲,更加实时,相对流式而言,更加经济。
批式模型就是使用MapReduce
、Hive
、Spark
等典型的批计算引擎,以小时任务或者天任务的形式来做数据计算。特性如下:
流式模型,典型的就是使用Flink来进行实时的数据计算,特性:
针对批式和流式的优缺点,Uber提出了增量模型(Incremental Mode),相对批式来讲,更加实时;相对流式而言,更加经济。 增量模型,简单来讲,就是一mini batch的形式来跑准实时任务。hudi在增量模型中支持了两个最重要的特性:
Upsert
:这个主要是解决批式模型中,数据不能插入、更新的问题,有了这个特性,可以往Hive中写入增量数据,而不是每次进行完全的覆盖。(hudi自身维护了key-file的映射,所以当upsert时很容易找到key对应的文件)Incremental Query
:增量查询,减少计算的原始数据量。以uber中司机和乘客的数据流join为例,每次抓取两条数据流中的增量数据进行批式的join即可,相比流式数据而言,成本要降低几个数量级。特性 | 数据仓库 | 数据湖 |
---|---|---|
数据 | 来自事务系统、运营数据库和业务线应用程序的关系型数据 | 来自loT设备、网站、移动应用程序、社交媒体和企业应用程序的非关系型和关系型数据 |
Schema | 设计在超仓库实施之前(写入型Schema) | 写入在分析时(读取型Schema) |
性价比 | 更快的查询结果会带来更高的存储成本 | 更快查询结果只需较低存储成本 |
数据质量 | 可作为重要事实依据的高度监管数据 | 任何可以或无法进行监管的数据(例如原始数据 |
用户 | 业务分析师 | 数据科学家、数据开发人员和业务分析师(使用监管数据) |
分析 | 批处理报告、BI和可视化 | 机器学习、询分析、数据发现和分析 |
wget https://dlcdn.apache.org/hudi/0.12.0/hudi-0.12.0.src.tgz
tar -xf hudi-0.12.0.src.tgz ; cd cd hudi-0.12.0
# mvn clean package -DskipTests
mvn clean package -DskipTests -DskipITs -Dspark3.2 -Dscala-2.12
编译好的Hudi 包下载地址:
链接:https://pan.baidu.com/s/15qKm1kW1RRtbyFT53RoeGA?pwd=ihhb
提取码:ihhb
新一代流式数据湖平台 Apache Hudi介绍与源码编译就先到这里了,有疑问的小伙伴欢迎给我留言,后续会持续更新【云原生+大数据】相关的文章,请小伙伴耐心等待~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。