

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

# 将 Amazon EMR 与 Lake Formation 结合使用时的注意事项
<a name="emr-lf-limitations-cont"></a>

将 Amazon EMR 与 Lake Formation 结合使用已在所有[可用区域](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-region.html)推出。

## Amazon EMR 7.9 及更早版本与 Lake Formation 结合使用时的注意事项
<a name="emr-lf-limitations-early"></a>

在 EMR 7.9 及更早 AWS Lake Formation 版本上使用时，请考虑以下几点。
+ 行、列和单元格级别的[精细访问控制](emr-lf-enable.md#emr-lf-fgac-perms)在 Amazon EMR 6.15 及更高版本的集群上可用。
+ 具有表访问权限的用户可以访问该表的所有属性。如果您对表具有基于 Lake Formation 的访问控制，则请查看该表以确保属性不包含任何敏感数据或信息。
+ 当 Spark 收集表统计数据时，带有 Lake Formation 的 Amazon EMR 集群不支持 Spark 回退到 HDFS。这通常有助于优化查询性能。
+ 通过不受监管的 Apache Spark 表支持基于 Lake Formation 的访问控制的操作包括 `INSERT INTO` 和 `INSERT OVERWRITE`。
+ 通过 Apache Spark 和 Apache Hive 支持基于 Lake Formation 的访问控制的操作包括 `SELECT`、`DESCRIBE`、`SHOW DATABASE`、`SHOW TABLE`、`SHOW COLUMN` 和 `SHOW PARTITION`。
+ Amazon EMR 不支持对以下基于 Lake Formation 的操作进行访问控制：
  + 写入受监管表
  + Amazon EMR 不支持 `CREATE TABLE`。Amazon EMR 6.10.0 及更高版本支持 `ALTER TABLE`。
  + 除 `INSERT` 命令之外的 DML 语句。
+ 使用和不使用基于 Lake Formation 的访问控制的同一查询之间存在性能差异。
+ 您只能将 Amazon EMR 与 Lake Formation 结合使用来执行 Spark 作业。
+ Glue Data Catalog 中的多目录层次结构不支持可信身份传播。有关更多信息，请参阅 [AWS Glue 数据目录中的使用多目录层次结构](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-multi-catalog.html)。

## Amazon EMR 7.10 及更高版本与 Lake Formation 结合使用时的注意事项
<a name="emr-lf-limitations"></a>

在 EMR 7.10 及更高版本中使用 Amazon AWS Lake Formation EMR 时，请考虑以下几点。
+ Amazon EMR 仅支持通过 Lake Formation 对 Apache Hive、Apache Iceberg、Apache Delta 和 Apache Hudi 表进行精细访问控制。Apache Hive 格式包括 Parquet、ORC 和 xSV CSV。
+ 对于启用 Lake Formation 的应用程序，Spark 日志会分两组写入 Amazon S3：系统空间日志和用户空间日志。系统空间日志可能包含敏感信息，例如完整的表结构。为了保护这些数据，Amazon EMR 将系统空间日志与用户空间日志存储在不同的位置。强烈建议账户管理员不要授予用户访问系统空间日志的权限。
+ 如果您向 Lake Formation 注册表位置，则数据访问将完全由用于注册的角色的权限控制，而不是由 Amazon EMR 作业运行时角色控制。如果注册角色配置错误，尝试访问该表的作业将会失败。
+ 您不能为 Lake Formation 作业关闭 `DynamicResourceAllocation`。
+ 您只能将 Lake Formation 与 Spark 作业结合使用。
+ 将 Amazon EMR 与 Lake Formation 结合使用在整个作业中仅支持单个 Spark 会话。
+ 将 Amazon EMR 与 Lake Formation 结合使用仅支持通过资源链接共享的跨账户表查询。
+ 不支持以下项：
  + 弹性分布式数据集（RDD）
  + Spark 流
  + 使用 Lake Formation 授予的权限写入
  + 嵌套列的访问控制
+ Amazon EMR 阻止可能破坏系统驱动程序完全隔离的功能，包括：
  + UDTs、Hive UDFs 以及任何涉及自定义类的用户定义函数
  + 自定义数据来源
  + 为 Spark 扩展、连接器或元存储提供额外的 jar
  + `ANALYZE TABLE` 命令
+ 为了强制执行访问控制，`EXPLAIN PLAN` 和 DDL 操作（如 `DESCRIBE TABLE`）不会公开受限信息。
+ Amazon EMR 限制访问启用 Lake Formation 的应用程序上的系统驱动程序 Spark 日志。由于系统驱动程序以提升的权限运行，因此系统驱动程序生成的事件和日志可能包含敏感信息。为防止未经授权的用户或代码访问此敏感数据，Amazon EMR 禁止访问系统驱动程序日志。

  系统配置文件日志始终保存在托管存储中：这是一项强制性设置，无法禁用。这些日志使用客户托管 KMS 密钥或托管 KMS 密钥 AWS 进行安全存储和加密。

  如果您的 Amazon EMR 应用程序位于带有 Amazon S3 的 VPC 终端节点的私有子网中，并且您附加了终端节点策略来控制访问权限，那么在您的任务可以将日志数据发送到 AWS 托管 Amazon S3 之前，您必须在 VPC 策略中包含[托管存储](logging.html#jobs-log-storage-managed-storage)中详述的权限到 S3 网关终端节点。如需疑难解答请求，请联系 AWS 支持人员。
+ 如果您在 Lake Formation 中注册了表位置，则无论 Amazon EMR 作业运行时角色的 IAM 权限如何，数据访问路径都会经过 Lake Formation 存储的凭证。如果错误配置了在表位置注册的角色，那么使用具有 S3 IAM 权限的角色提交到表位置的作业就会失败。
+ 写入 Lake Formation 表使用的是 IAM 权限，而不是 Lake Formation 授予的权限。如果作业运行时角色拥有必要的 S3 权限，就可以使用该权限来运行写操作。

以下是使用 Apache Iceberg 时的注意事项和限制：
+ 您只能在会话目录中使用 Apache Iceberg，而不能使用任意命名的目录。
+ 在 Lake Formation 中注册的 Iceberg 表仅支持元数据表 `history`、`metadata_log_entries`、`snapshots`、`files`、`manifests` 和 `refs`。Amazon EMR 会隐藏可能包含敏感数据的列，例如 `partitions`、`path` 和 `summaries`。此限制不适用于未在 Lake Formation 中注册的 Iceberg 表。
+ 未在 Lake Formation 中注册的表支持所有 Iceberg 存储过程。任何表都不支持 `register_table` 和 `migrate` 程序。
+ 我们建议您使用 Iceberg DataFrameWriter V2 而不是 V1。

## 7.12 及更高版本中带有 Lake Formation 的亚马逊 EMR 的注意事项
<a name="emr-lf-limit-712"></a>

### General
<a name="emr-lf-limits-g"></a>

在亚马逊 EMR 中使用 Lake Formation 时，请查看以下限制。
+ 您不能为 Lake Formation 作业关闭 `DynamicResourceAllocation`。
+ 您只能将 Lake Formation 与 Spark 作业结合使用。
+ 将 Amazon EMR 与 Lake Formation 结合使用在整个作业中仅支持单个 Spark 会话。
+ 将 Amazon EMR 与 Lake Formation 结合使用仅支持通过资源链接共享的跨账户表查询。
+ 不支持以下项：
  + 弹性分布式数据集（RDD）
  + Spark 流
  + 嵌套列的访问控制
+ Amazon EMR 阻止可能破坏系统驱动程序完全隔离的功能，包括：
  + UDTs、Hive UDFs 以及任何涉及自定义类的用户定义函数
  + 自定义数据来源
  + 为 Spark 扩展、连接器或元存储提供额外的 jar
  + `ANALYZE TABLE` 命令
+ 如果您的 Amazon EMR 应用程序位于带有 Amazon S3 的 VPC 终端节点的私有子网中，并且您附加了终端节点策略来控制访问权限，那么在您的任务可以将日志数据发送到 AWS 托管 Amazon S3 之前，您必须在 VPC 策略中包含[托管存储](logging.html#jobs-log-storage-managed-storage)中详述的权限到 S3 网关终端节点。如需疑难解答请求，请联系 AWS 支持人员。
+ 从 Amazon EMR 7.9.0 开始，Spark FGAC 在与 s3a://方案一起使用时支持 S3 AFile 系统。
+ 亚马逊 EMR 7.11 支持使用 CTAS 创建托管表。
+ Amazon EMR 7.12 支持使用 CTAS 创建托管表和外部表。

## Permissions
<a name="emr-lf-permissions"></a>
+ 为了强制执行访问控制，EXPLAIN PLAN 和 DDL 操作（例如 DESCRIBE TABLE）不会泄露受限信息。
+ 当您向 Lake Formation 注册表位置时，数据访问将使用 Lake Formation 存储的证书，而不是 EMR Serverless 作业运行时角色的 IAM 权限。如果表位置的注册角色配置错误，即使运行时角色对该位置拥有 S3 IAM 权限，任务也会失败。
+ 从 Amazon EMR 7.12 开始，你可以在追加模式下使用 DataFrameWriter (V2) 和 Lake Formation 凭证写入现有 Hive 和 Iceberg 表。对于覆盖操作或创建新表时，EMR 使用运行时角色凭据来修改表数据。
+ 使用视图或缓存表作为源数据时，存在以下限制（这些限制不适用于 AWS Glue 数据目录视图）：
  + 用于合并、删除和更新操作
    + 支持：使用视图和缓存表作为源表。
    + 不支持：在赋值和条件子句中使用视图和缓存表。
  + 对于创建或替换和替换表作为选择操作：
    + 不支持：使用视图和缓存表作为源表。
+ 仅当启用删除向量时，包含 UDFs 源数据的 Delta Lake 表才支持合并、删除和更新操作。

## 日志和调试
<a name="emr-lf-logs-debugging"></a>
+ Amazon EMR 限制访问启用 Lake Formation 的应用程序上的系统驱动程序 Spark 日志。由于系统驱动程序以提升的权限运行，因此系统驱动程序生成的事件和日志可能包含敏感信息。为防止未经授权的用户或代码访问此敏感数据，Amazon EMR 禁止访问系统驱动程序日志。

  系统配置文件日志始终保存在托管存储中：这是一项强制性设置，无法禁用。这些日志使用客户托管 KMS 密钥或托管 KMS 密钥 AWS 进行安全存储和加密。

## Iceberg
<a name="emr-lf-iceberg-considerations"></a>

使用 Apache Iceberg 时，请查看以下注意事项：
+ 您只能在会话目录中使用 Apache Iceberg，而不能使用任意命名的目录。
+ 在 Lake Formation 中注册的 Iceberg 表仅支持元数据表 `history`、`metadata_log_entries`、`snapshots`、`files`、`manifests` 和 `refs`。Amazon EMR 会隐藏可能包含敏感数据的列，例如 `partitions`、`path` 和 `summaries`。此限制不适用于未在 Lake Formation 中注册的 Iceberg 表。
+ 未在 Lake Formation 中注册的表支持所有 Iceberg 存储过程。任何表都不支持 `register_table` 和 `migrate` 程序。
+ 我们建议你使用 Iceberg DataFrameWriter V2 而不是 V1。