Hudi数据湖简介

今天跟大家分享的大数据产品叫Apache Hudi,Hudi是Hadoop Updates and Incrementals的简写,它是由Uber开发并开源的Data Lakes解决方案。下面首先放一张Hudi在Hadoop体系架构中的位置图:

Hudi数据湖简介_第1张图片

1. 什么是数据湖?

首先介绍一下什么是数据湖,提到数据湖,不得不说一下数据仓库。

  • 关系型数据库大行其道的年代,随着各个业务系统增多,在应对一些分析场景时,慢慢产生了数据仓库的概念,包括之前介绍的Greenplum、Teradata等产品,都是数据仓库的代表产品,数据仓库最显著的特点有:ETL - 它自己不产生数据,所以需要ETL操作;历史性 - 存储一切可追溯的历史信息;分析性 - 分析能力强。
  • 但是数据仓库只能落库处理结构化数据,随着数据量的增大和计算需求的复杂,很多场景是数据仓库不能解决的(当然我认为并没有‍♂️),所以就产生了数据湖的概念,数据湖相对于数据仓库更加平面化,不需要提前定义好schema信息。
  • 数据湖和数据仓库的概念大概如上,其实我认为二者之间并不是谁替代谁的问题;在ad-hoc场景下,数据仓库仍然具有明显优势;反观分结构化场景如机器学习,超大规模数据分析等场景下,数据湖可能更有优势一些。

2. Hudi是什么?

开篇已经介绍了Hudi的基本概念,但是很多人如果第一次看,仍然不知道Hudi是什么?Hadoop体系太庞大了啊,平时道听途说张口就来的产品多了:Spark、Flink、Presto、Iceberg、Hive、Kafka。那么Hudi应该处在什么位置?看下图:

Hudi数据湖简介_第2张图片

不错,仍然是第一张图,不同的是,我在图上用绿色框标注了一些产品。我们可以粗浅的认为:

  • Hive、Impala、Presto、Spark等,架设在Hudi上方;
  • Kafka或关系型数据库是Hudi的数据源头;
  • Hudi的底层数据,实际上存储在HDFS、S3、ALLUXIO、Ali OBS等分布式存储上。
  • 虽然涂上你能看到Hudi虚线框部分,也有Spark和Flink的标志,但是我们暂时忽略(因为他们仅仅是用来数据入库)

经过上面的比较,可以获知,Hudi实际上就是一个中间数据处理层。它的底层一定是要依赖分布式存储的,当然用的最多的就是HDFS。

Hudi作为一个数据湖方案,他自己本身不产生任何业务数据,可以通过Spark、Flink等工具,接入关系型数据库、日志、消息队列的数据,进行大容量的存储,最终提供给上层查询引擎比如Presto、Hive等进行查询。

3. 为什么需要Hudi?

这个也是我比较疑惑的地方,Hadoop的技术栈太复杂了啊,为什么我还要用Hudi?我想一个产品的应用和发展肯定是与他的特性分不开的,Hudi具有以下显著的特性:

  • Hudi能够摄入(Ingest)和管理(Manage)基于HDFS之上的大型分析数据集,主要目的是高效的减少入库延时。
  • Hudi基于Spark来对HDFS上的数据进行更新、插入、删除等。
  • Hudi在HDFS数据集上提供如下流原语:插入更新(如何改变数据集);增量拉取(如何获取变更的数据)。
  • Hudi可以对HDFS上的parquet格式数据进行插入/更新操作。
  • Hudi通过自定义InputFormat与Hadoop生态系统(Spark、Hive、Parquet)集成。
  • Hudi通过Savepoint来实现数据恢复。
  • 目前,Hudi支持Spark和Flink构建一体化数据湖解决方案。

其实说到“为什么需要Hudi?”我也没有真正弄明白,你们呢?如果有什么想法,请留言交流,大家一起把这个搞搞清楚。

你可能感兴趣的