关于Hudi调研的一些问题记录

本文探讨了Apache Hudi在业务数据处理中如何通过COW和MOR模式实现增量插入/更新,并解析快照、增量和读取优化查询的工作原理。同时,作者针对实践操作中的疑问,如数据合并机制和Hudi服务角色进行了提问。

最近因为想对业务数据处理架构的调整,想要实现对大数据的增量插入/更新的功能,通过调研,Apache Hudi可以实现这方面的功能,遂进行深入的学习。

hudi增量更新功能的实现方式:

1、COW(copy of write):只用列式(例如Parquet)进行数据存储,在写入数据过程中,执行同步合并,更新数据版本并重写数据文件。

2、MOR(merge of read):使用列式(例如Parquet 合并之后的数据) + 行式(avro 新增数据)两种格式进行数据存储。新数据记录到增量文件,然后同步或者异步的方式将增量数据和老数据合并到一块。

查询类型:

1、快照查询:

             查询最新的数据。

             如果是MOR,将合并最新的基文件(parquet文件)和增量文件(avro)的数据给出近乎实时的数据

             如果是COW,就直接读取现有的parquet文件即可(不理解的是,如果另一个进程正在写,读的时候怎么保证是最新的数据)。

2、增量查询:

             通过在查询时指定commit或者compaction的时间,可看到指定时间后写入表的最新数据。(我的理解,在你主动commit或者后台进行compaction的时候都会有一个时间记录(hudi里面叫timeline),对于增量查询,就是查询某个commit或者compaction之后的新录入进来的数据。)

3、读取优化查询:

             只提供基本文件(parquet)的数据读取。

综上,我的理解:

快照查询-查询的是近实时的数据。

增量查询-查询的是最新更新的数据。

读取优化查询-主要针对MOR模式,为了提高读取性能,只读取这个模式下的基文件(parquet)数据,列存储文件的数据不进行读取。

一些疑惑:

1、网上的一些介绍全部是概念性的东西,没有人举一个具体的例子来说明实际的操作和执行流程,这一点尤为蛋疼,理解起来不是很容易。

2、从官网和其他人的介绍来看,hudi好像只是一个类似于parquet的使用包,只要引用这个包来进行读写就可以了。

      但是我不理解的是,对于read of merge模式,他们说的后台进行数据合并是怎么实现的?理论上应该有一个hudi服务,来进行数据的管理和数据的后端合并,但是从各个介绍来看,没有人说需要搭建hudi服务。

 

等我做一些实际的实例操作,再来赘述。

 

 

 

06-22
### Apache Hudi 使用指南与最佳实践 Apache Hudi 是一种用于实时数据更新和查询的数据湖框架,它支持高效的大规模数据处理。以下是关于 Apache Hudi 的使用指南和最佳实践的详细介绍。 #### 1. 安装与配置 Hudi 提供了多种语言的支持,包括 Rust 和 Python。以下是如何安装和配置 Hudi 的方法: - **Python 绑定安装** 如果用户希望在 Python 环境中操作 Hudi 数据,可以通过 `pip` 安装 hudi-rs 的 Python 包[^1]。 ```bash pip install hudi-rs ``` - **Rust 库安装** 对于需要高性能计算的场景,可以直接使用 Rust 库 `hudi-rs`。通过 Cargo 托管依赖项,将以下内容添加到项目的 `Cargo.toml` 文件中: ```toml [dependencies] hudi = "0.1" ``` - **环境配置** 在安装完成后,确保正确配置 Spark 或 Hive 等生态系统工具的连接器[^2]。例如,在 Spark 中可以设置如下参数以优化性能: ```properties spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension spark.serializer=org.apache.spark.serializer.KryoSerializer ``` #### 2. 数据存储格式与压缩算法 根据最佳实践,选择合适的存储格式和压缩算法能够显著提升查询性能和存储效率[^3]。 - **存储格式** - 明细数据层:推荐使用 ORC 格式,因为它支持谓词下推和行级过滤,适合频繁更新的场景。 - 汇总数据层:建议采用 Parquet 格式,因为其平衡了存储成本和查询性能。 - **压缩算法** - Snappy:适用于高吞吐量场景,通常用于中间结果存储。 - Gzip:适用于高压缩比需求,适合长期归档数据。 #### 3. 集成生态工具 Hudi 能够无缝集成多种大数据生态系统工具,如 Spark、Hive 和 Delta Lake,从而增强其灵活性和功能。 - **与 Spark 的集成** Hudi 提供了强大的批处理和流处理能力,结合 Spark 可以实现高效的 ETL 流程[^2]。例如,以下代码展示了如何使用 Spark 写入 Hudi : ```python from pyspark.sql import SparkSession spark = SparkSession.builder.appName("HudiExample").getOrCreate() data = [("1", "Alice"), ("2", "Bob")] df = spark.createDataFrame(data, ["id", "name"]) options = { "hoodie.table.name": "test_table", "hoodie.datasource.write.recordkey.field": "id", "hoodie.datasource.write.precombine.field": "ts", "hoodie.datasource.write.operation": "upsert", "hoodie.datasource.write.table.type": "COPY_ON_WRITE" } df.write.format("hudi").options(**options).mode("overwrite").save("/path/to/hudi/table") ``` - **与 Hive 的兼容性** 通过 Hudi 提供的 Hive 连接器,用户可以轻松地将 Hudi 注册到 Hive 元存储中,从而允许传统 BI 工具访问这些数据[^2]。 #### 4. 最佳实践总结 为了充分发挥 Hudi 的优势,以下是一些关键的最佳实践: - **实时更新**:利用 Hudi 的 UPSERT 功能,确保数据的实时性和一致性。 - **增量查询**:启用增量查询功能,仅读取自上次查询以来发生更改的数据。 - **分区策略**:合理设计数据分区,减少不必要的扫描操作,提升查询效率。 - **资源管理**:根据工作负载调整 Spark 或其他计算引擎的资源配置。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值