具有精细访问控制功能的 Apache Hudi - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

具有精细访问控制功能的 Apache Hudi

当你使用 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. 要在 EMR 7.10 或更高版本上启动 Spark 外壳,请使用以下命令:

    spark-sql --jars /usr/lib/hudi/hudi-spark-bundle.jar \ --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog \ --conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension

    要在较早的 EMR 版本上启动 Spark 外壳,请改用以下命令:

    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
  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 元数据的文件列表和数据跳过。我们建议您测试应用程序的性能,以确保其符合您的要求。