一文了解Apache Hudi架构、工具和最佳实践

简介: 一文了解Apache Hudi架构、工具和最佳实践

1. 什么是Hudi?

Apache Hudi代表Hadoop Upserts anD Incrementals,管理大型分析数据集在HDFS上的存储。Hudi的主要目的是高效减少摄取过程中的数据延迟。由Uber开发并开源,HDFS上的分析数据集通过两种类型的表提供服务:读优化表(Read Optimized Table)和近实时表(Near-Real-Time Table)。

读优化表的主要目的是通过列式存储提供查询性能,而近实时表则提供实时(基于行的存储和列式存储的组合)查询。

Hudi是一个开源Spark库,用于在Hadoop上执行诸如更新,插入和删除之类的操作。它还允许用户仅摄取更改的数据,从而提高查询效率。它可以像任何作业一样进一步水平扩展,并将数据集直接存储在HDFS上。

2. Hudi如何工作?

Hudi针对HDFS上的数据集提供以下原语

  • 插入更新(upsert)
  • 增量消费

Hudi维护在数据集上执行的所有操作的时间轴(timeline),以提供数据集的即时视图。Hudi将数据集组织到与Hive表非常相似的基本路径下的目录结构中。数据集分为多个分区,文件夹包含该分区的文件。每个分区均由相对于基本路径的分区路径唯一标识。

分区记录会被分配到多个文件。每个文件都有一个唯一的文件ID和生成该文件的提交(commit)。如果有更新,则多个文件共享相同的文件ID,但写入时的提交(commit)不同。

存储类型–处理数据的存储方式

  • 写时复制
  • 纯列式
  • 创建新版本的文件
  • 读时合并
  • 近实时

视图–处理数据的读取方式

读取优化视图-输入格式仅选择压缩的列式文件

  • parquet文件查询性能
  • 500 GB的延迟时间约为30分钟
  • 导入现有的Hive表

近实时视图

  • 混合、格式化数据
  • 约1-5分钟的延迟
  • 提供近实时表

增量视图

  • 数据集的变更
  • 启用增量拉取

Hudi存储层由三个不同的部分组成

元数据–它以时间轴的形式维护了在数据集上执行的所有操作的元数据,该时间轴允许将数据集的即时视图存储在基本路径的元数据目录下。时间轴上的操作类型包括

  • 提交(commit),一次提交表示将一批记录原子写入数据集中的过程。单调递增的时间戳,提交表示写操作的开始。
  • 清理(clean),清理数据集中不再被查询中使用的文件的较旧版本。
  • 压缩(compaction),将行式文件转化为列式文件的动作。
  • 索引,将传入的记录键快速映射到文件(如果已存在记录键)。索引实现是可插拔的,Bloom过滤器-由于不依赖任何外部系统,因此它是默认配置,索引和数据始终保持一致。Apache HBase-对少量key更高效。在索引标记过程中可能会节省几秒钟。
  • 数据,Hudi以两种不同的存储格式存储数据。实际使用的格式是可插入的,但要求具有以下特征–读优化的列存储格式(ROFormat),默认值为Apache Parquet;写优化的基于行的存储格式(WOFormat),默认值为Apache Avro。

3. 为什么Hudi对于大规模和近实时应用很重要?

Hudi解决了以下限制

  • HDFS的可伸缩性限制
  • 需要在Hadoop中更快地呈现数据
  • 没有直接支持对现有数据的更新和删除
  • 快速的ETL和建模
  • 要检索所有更新的记录,无论这些更新是添加到最近日期分区的新记录还是对旧数据的更新,Hudi都允许用户使用最后一个检查点时间戳。此过程不用执行扫描整个源表的查询

4. 如何使用Apache Spark将Hudi用于数据管道?

4.1 下载Hudi

  1. $ mvn clean install -DskipTests -DskipITs
  2. $ mvn clean install -DskipTests -DskipITs -Dhive11

4.2 版本兼容性

Hudi需要安装Java 8,适用于Spark-2.x版本。

Hadoop Hive Spark 构建命令
Apache Hadoop-2.8.4 Apache Hive-2.3.3 spark-2.[1-3].x mvn clean install -DskipTests
Apache Hadoop-2.7.3 Apache Hive-1.2.1 spark-2.[1-3].x mvn clean install -DskipTests

4.3 生成Hudi数据集

设置环境变量

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre/
export HIVE_HOME=/var/hadoop/setup/apache-hive-1.1.0-cdh5.7.2-bin
export HADOOP_HOME=/var/hadoop/setup/hadoop-2.6.0-cdh5.7.2
export HADOOP_INSTALL=/var/hadoop/setup/hadoop-2.6.0-cdh5.7.2
export HADOOP_CONF_DIR=$HADOOP_INSTALL/etc/hadoop
export SPARK_HOME=/var/hadoop/setup/spark-2.3.1-bin-hadoop2.7
export SPARK_INSTALL=$SPARK_HOME
export SPARK_CONF_DIR=$SPARK_HOME/conf
export PATH=$JAVA_HOME/bin:$HIVE_HOME/bin:$HADOOP_HOME/bin:$SPARK_INSTALL/bin:$PATH

4.4 Api支持

使用DataSource API,只需几行代码即可快速开始读取或写入Hudi数据集及使用RDD API操作Hudi数据集。

5. Hudi最佳实践


  • 使用一种新的HoodieRecordPayload类型,并保留以前的持久类型作为CombineAndGetUpdateValue(...)的输出。否则前一次提交的提交时间一直更新到最新,会使得下游增量ETL将此记录计数两次。


  • 左连接(left join)包含所有通过键保留的数据的数据框(data frame),并插入persisted_data.key为空的记录。但不确定是否充分利用了BloomIndex/metadata。


  • 添加一个新的标志字段至从HoodieRecordPayload元数据读取的HoodieRecord中,以表明在写入过程中是否需要复制旧记录。


  • 在数据框(data frame)选项中传递一个标志位以强制整个作业会复制旧记录。

6. Hudi的优势

  • HDFS中的可伸缩性限制。
  • Hadoop中数据的快速呈现
  • 支持对于现有数据的更新和删除
  • 快速的ETL和建模

7. Apache Hudi与Apache Kudu的比较

Apache Kudu与Hudi非常相似;Apache Kudu用于对PB级数据进行实时分析,也支持插入更新。

Apache Kudu和Hudi之间的主要区别在于Kudu试图充当OLTP(在线事务处理)工作负载的数据存储,而Hudi却不支持,它仅支持OLAP(在线分析处理)。

Apache Kudu不支持增量拉取,但Hudi支持增量拉取。

还有其他主要的主要区别,Hudi完全基于Hadoop兼容的文件系统,例如HDFS,S3或Ceph,而Hudi也没有自己的存储服务器,Apache Kudu的存储服务器通过RAFT进行相互通信。

对于繁重的工作流,Hudi依赖于Apache Spark,因此可以像其他Spark作业一样轻松地扩展Hudi。

8. Hudi总结

Hudi填补了在HDFS上处理数据的巨大空白,因此可以与一些大数据技术很好地共存。Hudi最好用于在HDFS之上对parquet格式数据执行插入/更新操作。

目录
相关文章
|
17天前
|
存储 人工智能 前端开发
Google揭秘Agent架构三大核心:工具、模型与编排层实战指南
本文为Google发布的Agent白皮书全文翻译。本文揭示了智能体如何突破传统AI边界,通过模型、工具与编排层的三位一体架构,实现自主推理与现实交互。它不仅详解了ReAct、思维树等认知框架的运作逻辑,更通过航班预订、旅行规划等案例,展示了智能体如何调用Extensions、Functions和Data Stores,将抽象指令转化为真实世界操作。文中提出的“智能体链式组合”概念,预示了未来多智能体协作解决复杂问题的革命性潜力——这不仅是技术升级,更是AI赋能产业的范式颠覆。
490 1
|
3月前
|
存储 缓存 Cloud Native
云原生时代的架构革新,Apache Doris 存算分离如何实现弹性与性能双重提升
随着云基础设施的成熟,Apache Doris 3.0 正式支持了存算分离全新模式。基于这一架构,能够实现更低成本、极致弹性以及负载隔离。本文将介绍存算分离架构及其优势,并通过导入性能、查询性能、资源成本的测试,直观展现存算分离架构下的性能表现,为读者提供具体场景下的使用参考。
云原生时代的架构革新,Apache Doris 存算分离如何实现弹性与性能双重提升
|
2月前
|
SQL 分布式数据库 Apache
网易游戏 x Apache Doris:湖仓一体架构演进之路
网易游戏 Apache Doris 集群超 20 个 ,总节点数百个,已对接内部 200+ 项目,日均查询量超过 1500 万,总存储数据量 PB 级别。
网易游戏 x Apache Doris:湖仓一体架构演进之路
|
1月前
|
人工智能 监控 前端开发
基于 Next.js 的书法字体生成工具架构设计与 SSR 优化实践
本项目是一款书法字体生成工具,采用 Next.js 14(App Router)与 Tailwind CSS 构建前端,阿里云 Serverless 部署后端。通过混合渲染策略(SSG/SSR/CSR)、Web Worker 异步计算及 CDN 字体分片加载优化性能。服务端借助阿里云函数计算处理计算密集型任务,将平均耗时从 1200ms 降至 280ms,支持 1000+ QPS。动态路由与 ARMS 监控提升工程化水平,未来计划引入 WebGPU 和 AI 字体风格迁移技术,进一步优化用户体验。
|
2月前
|
监控 安全 BI
优化 Apache 日志记录的 5 个最佳实践
Apache 日志记录对于维护系统运行状况和网络安全至关重要,其核心包括访问日志与错误日志的管理。通过制定合理的日志策略,如选择合适的日志格式、利用条件日志减少冗余、优化日志级别、使用取证模块提升安全性及实施日志轮换,可有效提高日志可用性并降低系统负担。此外,借助 Eventlog Analyzer 等专业工具,能够实现日志的高效收集、可视化分析与威胁检测,从而精准定位安全隐患、评估服务器性能,并满足合规需求,为强化网络安全提供有力支持。
优化 Apache 日志记录的 5 个最佳实践
|
6月前
|
弹性计算 运维 监控
阿里云云服务诊断工具:合作伙伴架构师的深度洞察与优化建议
作为阿里云的合作伙伴架构师,我深入体验了其云服务诊断工具,该工具通过实时监控与历史趋势分析,自动化检查并提供详细的诊断报告,极大提升了运维效率和系统稳定性,特别在处理ECS实例资源不可用等问题时表现突出。此外,它支持预防性维护,帮助识别潜在问题,减少业务中断。尽管如此,仍建议增强诊断效能、扩大云产品覆盖范围、提供自定义诊断选项、加强教育与培训资源、集成第三方工具,以进一步提升用户体验。
819 243
|
3月前
|
存储 消息中间件 人工智能
基于 Apache RocketMQ 的 ApsaraMQ Serverless 架构升级
基于 Apache RocketMQ 的 ApsaraMQ Serverless 架构升级
|
6月前
|
监控 数据可视化
如何通过建模工具实现企业架构治理全流程管理
企业架构治理工具通过构建统一的架构语言、可视化建模、流程管理、资源整合和多场景分析,实现企业架构的全生命周期管理。该工具赋能企业数字化转型,确保业务、平台、数据及技术相互耦合闭环,提供从规划到决策的一站式服务,助力提升业务运营、优化组织管理和加速数字化建设。
129 2
如何通过建模工具实现企业架构治理全流程管理
|
5月前
|
容灾 网络协议 数据库
云卓越架构:云上网络稳定性建设和应用稳定性治理最佳实践
本文介绍了云上网络稳定性体系建设的关键内容,包括面向失败的架构设计、可观测性与应急恢复、客户案例及阿里巴巴的核心电商架构演进。首先强调了网络稳定性的挑战及其应对策略,如责任共担模型和冗余设计。接着详细探讨了多可用区部署、弹性架构规划及跨地域容灾设计的最佳实践,特别是阿里云的产品和技术如何助力实现高可用性和快速故障恢复。最后通过具体案例展示了秒级故障转移的效果,以及同城多活架构下的实际应用。这些措施共同确保了业务在面对网络故障时的持续稳定运行。
|
6月前
|
运维 监控 BI
卓越架构之FinOps最佳实践
本文探讨了云成本管理的趋势和FinOps的最佳实践。随着云计算的普及,传统的IT管理模式已无法适应按需使用和按量付费的新模式,导致企业面临资源浪费和成本失控的风险。FinOps作为一种管理理念,强调运维、财务和技术团队的合作,通过数据驱动和业务价值驱动的方式优化云成本。文章介绍了FinOps的核心挑战、最佳实践及技术工具的应用,帮助企业有效管理和优化云成本,实现降本增效。

推荐镜像

更多