一文了解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格式数据执行插入/更新操作。

目录
相关文章
|
20天前
|
消息中间件 监控 大数据
优化Apache Kafka性能:最佳实践与调优策略
【10月更文挑战第24天】作为一名已经对Apache Kafka有所了解并有实际使用经验的开发者,我深知在大数据处理和实时数据流传输中,Kafka的重要性不言而喻。然而,在面对日益增长的数据量和业务需求时,如何保证系统的高性能和稳定性成为了摆在我们面前的一个挑战。本文将从我的个人视角出发,分享一些关于如何通过合理的配置和调优来提高Kafka性能的经验和建议。
51 4
|
15天前
|
存储 SQL Apache
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Doris 是一个基于 MPP 架构的高性能实时分析数据库,以其极高的速度和易用性著称。它支持高并发点查询和复杂分析场景,适用于报表分析、即席查询、数据仓库和数据湖查询加速等。最新发布的 2.0.2 版本在性能、稳定性和多租户支持方面有显著提升。社区活跃,已广泛应用于电商、广告、用户行为分析等领域。
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
|
19天前
|
分布式计算 大数据 Apache
Apache Spark & Paimon Meetup · 北京站,助力 LakeHouse 架构生产落地
2024年11月15日13:30北京市朝阳区阿里中心-望京A座-05F,阿里云 EMR 技术团队联合 Apache Paimon 社区举办 Apache Spark & Paimon meetup,助力企业 LakeHouse 架构生产落地”线下 meetup,欢迎报名参加!
85 3
|
23天前
|
监控 Cloud Native 持续交付
云原生架构下微服务的最佳实践与挑战####
【10月更文挑战第20天】 本文深入探讨了云原生架构在现代软件开发中的应用,特别是针对微服务设计模式的最优实践与面临的主要挑战。通过分析容器化、持续集成/持续部署(CI/CD)、服务网格等关键技术,阐述了如何高效构建、部署及运维微服务系统。同时,文章也指出了在云原生转型过程中常见的难题,如服务间的复杂通信、安全性问题以及监控与可观测性的实现,为开发者和企业提供了宝贵的策略指导和解决方案建议。 ####
43 5
|
22天前
|
Kubernetes Cloud Native 持续交付
云原生架构下的微服务设计原则与最佳实践##
在数字化转型的浪潮中,云原生技术以其高效、灵活和可扩展的特性成为企业IT架构转型的首选。本文深入探讨了云原生架构的核心理念,聚焦于微服务设计的关键原则与实施策略,旨在为开发者提供一套系统性的方法论,以应对复杂多变的业务需求和技术挑战。通过分析真实案例,揭示了如何有效利用容器化、持续集成/持续部署(CI/CD)、服务网格等关键技术,构建高性能、易维护的云原生应用。文章还强调了文化与组织变革在云原生转型过程中的重要性,为企业顺利过渡到云原生时代提供了宝贵的见解。 ##
|
21天前
|
监控 安全 Serverless
"揭秘D2终端大会热点技术:Serverless架构最佳实践全解析,让你的开发效率翻倍,迈向技术新高峰!"
【10月更文挑战第23天】D2终端大会汇聚了众多前沿技术,其中Serverless架构备受瞩目。它让开发者无需关注服务器管理,专注于业务逻辑,提高开发效率。本文介绍了选择合适平台、设计合理函数架构、优化性能及安全监控的最佳实践,助力开发者充分挖掘Serverless潜力,推动技术发展。
51 1
|
25天前
|
监控 安全 Java
构建高效后端服务:微服务架构深度解析与最佳实践###
【10月更文挑战第19天】 在数字化转型加速的今天,企业对后端服务的响应速度、可扩展性和灵活性提出了更高要求。本文探讨了微服务架构作为解决方案,通过分析传统单体架构面临的挑战,深入剖析微服务的核心优势、关键组件及设计原则。我们将从实际案例入手,揭示成功实施微服务的策略与常见陷阱,为开发者和企业提供可操作的指导建议。本文目的是帮助读者理解如何利用微服务架构提升后端服务的整体效能,实现业务快速迭代与创新。 ###
60 2
|
1月前
|
SQL 存储 分布式计算
大数据-157 Apache Kylin 背景 历程 特点 场景 架构 组件 详解
大数据-157 Apache Kylin 背景 历程 特点 场景 架构 组件 详解
25 9
|
1月前
|
存储 分布式计算 druid
大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制
大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制
53 3
|
1月前
|
存储 SQL 缓存
Apache Doris 3.0 里程碑版本|存算分离架构升级、湖仓一体再进化
从 3.0 系列版本开始,Apache Doris 开始支持存算分离模式,用户可以在集群部署时选择采用存算一体模式或存算分离模式。基于云原生存算分离的架构,用户可以通过多计算集群实现查询负载间的物理隔离以及读写负载隔离,并借助对象存储或 HDFS 等低成本的共享存储系统来大幅降低存储成本。
Apache Doris 3.0 里程碑版本|存算分离架构升级、湖仓一体再进化

推荐镜像

更多