数据开发中的引擎如何访问数据湖中的数据?
计算引擎访问数据湖的数据的基本原理
Flink引擎访问数据湖的数据的基本流程
01
—
计算引擎访问数据湖的数据的基本原理
计算引擎访问数据湖的数据的基本要求就是计算引擎和数据湖的管理引擎需要是兼容的,这里兼容体现在以下几个方面:
1、统一元数据库(Metastore): 数据湖通常依赖于一个统一的元数据库来存储关于数据的元数据,包括数据的位置、模式(schema)、分区信息、版本控制等。元数据库作为数据湖的目录,帮助计算引擎定位和管理数据。
2、数据湖管理引擎: 数据湖管理引擎是一组服务和工具,用于管理数据湖中的资源和操作。它通常提供API或查询接口,允许计算引擎与数据湖进行交互,执行数据的读取、写入、更新和删除等操作。
3、计算引擎与数据湖的集成: 计算引擎(如Apache Flink、Apache Spark等)需要与数据湖管理引擎集成,以便能够理解和操作数据湖中的数据。这种集成通常通过特定的连接器或适配器实现,它们充当计算引擎与数据湖之间的桥梁。
4、数据格式和存储: 数据湖中的数据通常以文件形式存储,支持多种文件格式,如Parquet、ORC、Avro等。计算引擎需要能够解析这些格式,以便进行高效的数据读取和写入。
5、API和查询语言: 计算引擎使用API调用来与数据湖管理引擎交互,或者使用特定的查询语言(如SQL)来执行数据操作。这些查询会被转换成对数据湖存储层的操作。
6、数据访问和处理:计算引擎根据从元数据库获取的元数据信息,直接与数据湖的存储层交互,读取或写入数据。计算引擎可以在数据湖上执行复杂的数据处理任务,如数据转换、聚合、分析等。
7、事务和一致性:为了确保数据的一致性和完整性,数据湖管理引擎通常提供事务管理功能。计算引擎在执行写操作时,需要遵循ACID原则,确保事务的原子性、一致性、隔离性和持久性。
这里需要特别说明的是数据湖的统一元数据仓库一般是在数据湖外部。它作为一个独立的服务或系统来管理数据湖中的数据的元数据。元数据库存储了关于数据湖中数据的详细信息,包括数据的位置、模式、分区信息、版本控制等。这样设计的原因是为了将数据的存储和管理分离,提高系统的灵活性和可维护性。
在数据湖架构中,计算引擎访问数据湖的数据通常遵循以下步骤:
1、连接到元数据库:计算引擎首先需要连接到统一的元数据库,以获取数据的位置和其他元数据信息。
2、获取元数据:计算引擎从元数据库中检索所需的元数据,这些信息告诉计算引擎数据的存储位置和如何访问。
3、数据访问:计算引擎使用从元数据库中获取的信息来直接访问数据湖中的数据。这可能涉及到与数据湖存储系统(如HDFS、Amazon S3、阿里云OSS等)的交互。
4、数据处理:一旦数据被检索出来,计算引擎就可以执行必要的数据处理操作,如数据过滤、转换、聚合等。
5、结果存储:处理完的数据可以被写回数据湖或存储到其他系统中,同时更新元数据库以反映这些变化。
例如,阿里云的数据湖构建(Data Lake Formation, DLF)服务提供了元数据管理功能,可以管理元数据库和元数据表,支持用户在入湖时对数据进行清洗处理、标准化,方便后续使用机器学习模型分析。DLF使用OSS作为数据湖的统一存储,并采用元数据管理功能管理元数据库和元数据表。
在实际应用中,数据湖的元数据库可以是云服务提供商提供的一项服务,如阿里云的DLF,也可以是开源解决方案,如Apache Hive Metastore。这些服务或系统通常提供RESTful API或SQL接口,供计算引擎查询和交互。通过这种方式,计算引擎能够灵活地操作数据湖中的数据,实现数据的增删改查等操作。
02
—
Flink引擎访问数据湖的数据的基本流程
在Flink项目中操作数据湖中的数据,首先需要引入Apache Iceberg的相关依赖包,然后进行一系列的初始化操作。以下是详细的步骤和说明:
1、引入依赖:需要引入的依赖包通常包括iceberg-flink-runtime和flink-sql-connector-hive。这些依赖包可以从Maven中央仓库下载,或者根据Flink和Iceberg的版本从Apache官方仓库获取。
⚠️:两个依赖包的说明
iceberg-flink-runtime:这个依赖包是Flink与Iceberg集成的关键,它提供了Flink与Iceberg之间的桥梁。通过这个包,Flink可以读写Iceberg表,利用Iceberg作为数据湖的表格式来存储和管理数据。Iceberg提供了对数据湖中数据的高性能读写能力,并且支持ACID事务、模式演化和snapshots等特性。
flink-sql-connector-hive:这个依赖包允许Flink与Hive集成,使得Flink能够访问Hive的元数据和数据。Flink可以利用Hive的MetaStore作为持久化的Catalog,通过HiveCatalog将Flink的元数据存储到Hive Metastore中。此外,Flink还可以直接读写Hive中的表,这使得Flink能够操作存储在数据湖中的Hive表。
2、配置Flink环境:将上述JAR包放入Flink的lib目录下,以便启动Flink SQL Client或在Flink作业中使用。
3、启动Flink SQL Client:启动Flink SQL Client时,需要指定Iceberg的JAR包。如果是在Standalone模式下,可以通过sql-client.sh脚本启动,并使用-j参数指定JAR包路径。如果是在Yarn模式下,需要先启动Yarn Session,然后同样使用sql-client.sh指定JAR包路径启动SQL Client。
4、创建Catalog:在Flink SQL Client中,需要创建一个Catalog来连接到数据湖。Catalog的创建依赖于type、catalog-type、warehouse等参数。例如,创建一个Hive Catalog的语句可能如下:
欢迎加入【数据行业交流群】社群,长按以下二维码加入专业微信群,商务合作加微信备注商务合作,AIGC应用开发交流入群备注AIGC应用
往期数据平台历史热门文章:
基于DataOps的数据开发治理:实现数据流程的自动化和规范化
往期AIGC历史热门文章:
往期数据资产入表历史热门文章: