Apache Hudi 和 Lake Formation - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Apache Hudi 和 Lake Formation

当你使用 Spark SQL 读取和写入数据时,亚马逊 EMR 6.15.0 及更高版本支持基于 Amazon Lake Formation Apache Hudi 的精细访问控制。Amazon EMR 支持使用 Apache Hudi 进行表、行、列和单元格级别的访问控制。使用此功能,您可以对 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 INSERT 命令

DDL 命令

Spark Datasource 查询

Spark Datasource 写入

查询 Hudi 表

本节介绍如何在启用 Lake Formation 的集群上运行上述支持的查询。该表应为已注册的目录表。

  1. 要启动 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。

  2. 要查询 copy-on-write 表的最新快照,请使用以下命令。

    SELECT * FROM my_hudi_cow_table
    spark.read.table("my_hudi_cow_table")
  3. 要查询 MOR 表的最新压缩数据,您可以查询以 _ro 为后缀的读取优化表:

    SELECT * FROM my_hudi_mor_table_ro
    spark.read.table("my_hudi_mor_table_ro")
注意

Lake Formation 集群上的读取性能可能会因不支持的优化而变慢。这些功能包括基于 Hudi 元数据的文件列表和数据跳过。我们建议您测试应用程序的性能,以确保其符合您的要求。