本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
亚马逊上的 Apache Hudi 和 Lake Formation EMR
当你使用 Spark 读取和写入数据时,亚马逊EMR版本6.15.0及更高版本支持基于 AWS Lake Formation Apache Hudi的精细访问控制。SQL亚马逊通过 Apache Hudi EMR 支持表、行、列和单元格级别的访问控制。使用此功能,您可以对 copy-on-write表运行快照查询,以在给定的提交或压缩时刻查询表的最新快照。
目前,支持 Lake Formation 的 Amazon EMR 集群必须检索 Hudi 的提交时间列才能执行增量查询和时空旅行查询。它不支持 Spark 的timestamp as of
语法和Spark.read()
函数。正确的语法是select * from table where _hoodie_commit_time <= point_in_time
。有关更多信息,请参阅 Hudi 表上的时间点时间旅行查询
以下支持矩阵列出了 Apache Hudi 及 Lake Formation 的部分核心功能:
写入时复制 | 读取时合并 | |
---|---|---|
快照查询-Spark SQL |
✓ |
✓ |
读取优化查询-Spark SQL |
✓ |
✓ |
递增查询 |
✓ |
✓ |
时间旅行查询 |
✓ |
✓ |
元数据表 |
✓ |
✓ |
DML |
✓ |
✓ |
DDL命令 |
||
Spark Datasource 查询 |
||
Spark Datasource 写入 |
查询 Hudi 表
本节介绍如何在启用 Lake Formation 的集群上运行上述支持的查询。该表应为已注册的目录表。
-
要启动 Spark Shell,请使用以下命令。
spark-sql --jars /usr/lib/hudi/hudi-spark-bundle.jar \ --conf spark.serializer=org.apache.spark.serializer.KryoSerializer \ --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog \ --conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension,com.amazonaws.emr.recordserver.connector.spark.sql.RecordServerSQLExtension \ --conf spark.sql.catalog.spark_catalog.lf.managed=true
如果你希望 Lake Formation 使用记录服务器来管理你的 Spark 目录,请设置
spark.sql.catalog.<managed_catalog_name>.lf.managed
为 true。 -
要查询 copy-on-write表的最新快照,请使用以下命令。
SELECT * FROM
my_hudi_cow_table
spark.read.table("
my_hudi_cow_table
") -
要查询
MOR
表的最新压缩数据,您可以查询以_ro
为后缀的读取优化表:SELECT * FROM
my_hudi_mor_table
_rospark.read.table("
my_hudi_mor_table
_ro")
注意
Lake Formation 集群上的读取性能可能会因不支持的优化而变慢。这些功能包括基于 Hudi 元数据的文件列表和数据跳过。我们建议您测试应用程序的性能,以确保其符合您的要求。