本文档深入探讨了尚硅谷大数据课程中涉及的数据湖技术,重点介绍了Apache Iceberg 1.1.0版本的功能、优势及其在数据管理中的应用。
### 冰山(Iceberg)数据湖技术概览
#### 1.1 冰山(Iceberg)简介
- **背景介绍**:
- **开发背景**:为解决数据存储与计算引擎之间的适配问题,Netflix 发起了 Iceberg 项目。
- **发展历程**:Iceberg 在2018年11月16日进入Apache孵化器,并于2020年5月19日正式毕业成为Apache的顶级项目。
- **定义**:Iceberg 是一种针对海量数据分析设计的开放表格式(Table Format),它位于计算框架(如Flink、Spark等)之下,数据文件之上,是一种元数据及数据文件的组织方式。
#### 1.2 冰山(Iceberg)特性详解
- **1.2.1 数据存储与计算引擎插件化**:
- **插件化特点**:Iceberg 提供了一个灵活的架构,允许不同的数据存储系统(例如HDFS、S3等)和计算引擎(如Flink、Spark等)接入。
- **应用场景**:在生产环境中,用户可以根据实际需求选择不同的组件进行组合使用,甚至可以绕过计算引擎直接读取文件系统上的数据。
- **1.2.2 实时流批一体**:
- **即时可读性**:上游组件完成数据写入后,下游组件即可立即读取并进行查询,支持实时场景需求。
- **统一接口**:Iceberg同时提供流批读接口和流批写接口,使得在一个流程内同时处理流数据和批数据成为可能,从而简化了ETL (Extract, Transform, Load) 链路。
- **1.2.3 数据表结构演变(Table Evolution)**:
- **SQL 方式**:用户可通过 SQL 语句轻松对表结构进行调整,例如将按天分区的表转变为按小时分区。
- **低代价操作**:与其他系统不同的是,在 Iceberg 中进行此类操作无需复杂的迁移或数据重写过程。
- **1.2.4 模式演化(Schema Evolution)**:
- **支持多种变化**:Iceberg 支持添加列、删除列、重命名列、更新类型以及改变列的顺序等操作。
- **无副作用**:所有模式演变操作都是独立的元数据操作,不会涉及数据文件的重写过程,保证了操作的安全性和高效性。
- **1.2.5 分区演化(Partition Evolution)**:
- **灵活调整**:Iceberg 允许用户在现有表的基础上直接修改分区策略,而不会影响已有的数据分区。
- **新旧分区共存**:当分区策略发生变化时,原有数据仍然遵循旧的分区规则,新写入的数据则遵循新的分区策略,实现了新旧分区策略的同时存在。
### 技术细节分析
#### 1.2.3 数据表结构演变
- **SQL 方式**:Iceberg 支持通过 SQL 直接进行表结构调整。例如:
```sql
ALTER TABLE table_name SET TBLPROPERTIES (partitions = hour);
```
- **低代价操作**:这意味着用户可以在无需复杂的数据迁移或重写的情况下,轻松地更改表的分区方式。
#### 1.2.4 模式演化
- **具体操作**:Iceberg 支持以下几种模式演变操作:
- **ADD**: 向表或嵌套结构中添加新列。
- **DROP**: 从表或嵌套结构中删除列。
- **RENAME**: 重命名表或嵌套结构中的列。
- **UPDATE**: 将复杂结构中的基本类型扩展为更高级的类型。
- **REORDER**: 改变列或嵌套结构中字段的排列顺序。
- **唯一 ID 定位**:在 Iceberg 中,每列都有一个唯一的ID,确保了即使列名重复或顺序变更也能准确识别每列。
#### 1.2.5 分区演化
- **新旧策略共存**:当对分区策略进行调整时,原有的数据分区不变,而新写入的数据则遵循新的分区策略。实现了一张表中两种分区策略的存在。
### 结论
Iceberg作为一款开源的数据湖技术,不仅解决了传统数据处理中存在的诸多问题,还提供了丰富的功能支持,包括但不限于数据存储与计算引擎插件化、实时流批一体化处理、灵活的表结构演变、模式演化以及分区演化等功能。这些特性使得 Iceberg 成为了构建现代数据平台的理想选择之一。对于希望利用大数据技术提升业务效率的企业而言,深入了解并掌握Iceberg的工作原理和技术特性是十分必要的。