Hudi 客户端实现分析

08. Hudi 客户端实现分析

主题说明

Hudi 提供了三种客户端实现:Spark、Flink 和 Java。理解客户端实现有助于理解不同引擎下的写入机制。

客户端实现包括:

  • BaseHoodieWriteClient:客户端基类
  • SparkRDDWriteClient:Spark 客户端
  • HoodieFlinkWriteClient:Flink 客户端
  • HoodieJavaWriteClient:Java 客户端

细化内容

BaseHoodieWriteClient - 客户端基类

BaseHoodieWriteClient 是所有客户端的基类,定义了通用的写入逻辑。

主要方法:

  • startCommit():开始新的提交
  • upsert():更新或插入
  • insert():插入
  • delete():删除
  • commit():提交

核心逻辑:

  • 索引查找
  • 数据分区
  • 文件写入
  • 提交管理

SparkRDDWriteClient - Spark 客户端

SparkRDDWriteClient 是 Spark 的客户端实现,使用 JavaRDD 作为数据容器。

特点:

  • 使用 Spark 的分布式计算
  • 支持大规模数据处理
  • 自动管理 Spark 任务

HoodieFlinkWriteClient 是 Flink 的客户端实现,支持流式写入。

特点:

  • 支持流式写入
  • Checkpoint 集成
  • 状态管理

HoodieJavaWriteClient - Java 客户端

HoodieJavaWriteClient 是 Java 的客户端实现,使用 List 作为数据容器。

特点:

  • 单机处理
  • 简单易用
  • 适合小规模数据

关键技术

索引查找

所有客户端都使用索引来查找记录位置:

  • Bloom Index:布隆过滤器索引
  • Simple Index:简单索引
  • Global Index:全局索引

数据分区

客户端根据分区字段对数据进行分区:

  • 分区策略:按分区路径分区
  • 文件组分配:分配文件组
  • 写入优化:优化写入性能

提交管理

客户端管理提交过程:

  • Instant 创建:创建提交时间点
  • 元数据生成:生成提交元数据
  • Timeline 更新:更新 Timeline

关键对象说明

类关系图

关键操作时序图

代码示例

Spark 客户端使用

java 复制代码
HoodieSparkEngineContext context = new HoodieSparkEngineContext(jsc);
HoodieWriteConfig config = HoodieWriteConfig.newBuilder()
    .withPath(basePath)
    .build();

SparkRDDWriteClient client = new SparkRDDWriteClient(context, config);
String instantTime = client.startCommit();
JavaRDD<WriteStatus> writeStatuses = client.upsert(records, instantTime);
client.commit(instantTime, writeStatuses);

总结

Hudi 提供了三种客户端实现,每种都有其适用场景。核心要点:

  1. BaseHoodieWriteClient 是客户端基类
  2. SparkRDDWriteClient 适用于 Spark 环境
  3. HoodieFlinkWriteClient 适用于 Flink 流式写入
  4. HoodieJavaWriteClient 适用于 Java 单机处理
  5. 索引查找 是通用的核心逻辑
  6. 提交管理 保证数据一致性

理解客户端实现有助于在不同场景下选择合适的客户端。

相关推荐
会飞的老朱2 小时前
医药集团数智化转型,智能综合管理平台激活集团管理新效能
大数据·人工智能·oa协同办公
聆风吟º3 小时前
CANN runtime 实战指南:异构计算场景中运行时组件的部署、调优与扩展技巧
人工智能·神经网络·cann·异构计算
寻星探路4 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
Codebee5 小时前
能力中心 (Agent SkillCenter):开启AI技能管理新时代
人工智能
lly2024065 小时前
Bootstrap 警告框
开发语言
2601_949146536 小时前
C语言语音通知接口接入教程:如何使用C语言直接调用语音预警API
c语言·开发语言
曹牧6 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
聆风吟º6 小时前
CANN runtime 全链路拆解:AI 异构计算运行时的任务管理与功能适配技术路径
人工智能·深度学习·神经网络·cann
KYGALYX6 小时前
服务异步通信
开发语言·后端·微服务·ruby