Apache Hudi 和 Lake Formation
在使用 Spark SQL 读取数据时,Amazon EMR 发行版 6.9.0 及更高版本包括对基于 Lake Formation 的访问控制及 Apache Hudi 的有限支持。Amazon EMR 支持针对使用 Spark SQL 的 SELECT 查询,并且仅限于列级访问控制。借助此功能,您现在可以运行以下命令:
-
对写入时复制表的快照查询,用于在指定的提交或压缩时刻查询表的最新快照。
-
“读取时合并”表中的读取优化查询,用于查询最新的压缩数据,其中可能不包括尚未压缩的日志文件中的最新更新。
以下支持矩阵列出了 Apache Hudi 及 Lake Formation 的部分核心功能:
写入时复制 | 读取时合并 | |
---|---|---|
快照查询 - Spark SQL |
是 |
N |
读取优化查询 - Spark SQL |
不适用 |
是 |
递增查询 |
N |
N |
时间旅行查询 |
N |
N |
Spark Datasource 查询 |
N |
N |
Spark Datasource 写入 |
N |
N |
DML/DDL |
N |
N |
元数据表 |
N |
N |
查询 Hudi 表
本节介绍如何在启用 Lake Formation 的集群上运行上述支持的查询。该表应为已注册的目录表。
本节介绍如何运行 Lake Formation 集群支持的查询,如上所述
-
要启动 Spark Shell,请使用以下命令。
spark-shell --jars /usr/lib/hudi/hudi-spark-bundle.jar \ --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer'
spark-sql --jars /usr/lib/hudi/hudi-spark-bundle.jar \ --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer'
-
要查询写入时复制表的最新快照,请使用以下命令。
select * from <my_hudi_cow_table>
spark.read.table("<my_hudi_cow_table>")
-
要查询 MOR 表的最新压缩数据,可以查询以 _ro 为后缀的读取优化表:
SELECT * from <my_hudi_mor_table>_ro
spark.read.table("<my_hudi_mor_table>_ro")
注意
Lake Formation 集群上的读取性能可能会因不支持的优化而变慢。这些功能包括基于 Hudi 元数据的文件列表和数据跳过。我们建议您测试应用程序的性能,以确保其符合您的 SLA。