亚马逊上的 Apache Hudi 和 Lake Formation EMR - Amazon EMR

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

亚马逊上的 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

递增查询

时间旅行查询

元数据表

DMLINSERT命令

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