对 EMR Serverless 进行 Lake Formation 未筛选访问
在 Amazon EMR 7.8.0 及更高版本中,您可以利用 Amazon Lake Formation 和 Glue Data Catalog,其中作业运行时角色拥有全表权限,而没有精细访问控制限制。此功能允许您从 EMR Serverless Spark 批处理和交互式作业中读取和写入受 Lake Formation 保护的表。请参阅以下部分,了解有关 Lake Formation 以及如何将其与 EMR Serverless 结合使用的更多信息。
对 Lake Formation 使用全表访问
您可以从 EMR Serverless Spark 作业或交互式会话中访问 Amazon Lake Formation 保护的 Glue Data Catalog 表,在这些会话中,作业的运行时角色具有全表访问权限。您无需在 EMR Serverless 应用程序上启用 Amazon Lake Formation。当 Spark 作业配置为全表访问 (FTA) 时,Amazon Lake Formation 凭证将用于为注册到 Amazon Lake Formation 的表读取/写入 Amazon S3 数据,而作业的运行时角色凭证将用于读取/写入未注册到 Amazon Lake Formation 的表。
重要
请勿启用 Amazon Lake Formation 进行精细访问控制。在同一个 EMR 集群或应用程序上,作业不能同时运行全表访问 (FTA) 和精细访问控制 (FGAC)。
步骤 1:在 Lake Formation 中启用全表访问
要使用全表访问 (FTA) 模式,您必须允许第三方查询引擎无需在 Amazon Lake Formation 中验证 IAM 会话标签即可访问数据。要启用此模式,请按照 Application integration for full table access 中的步骤操作。
注意
访问跨账户表时,必须在生产者账户和消费者账户中启用全表访问。同样,在访问跨区域表时,必须在生产者和使用者区域中都启用此设置。
第 2 步:设置作业运行时角色的 IAM 权限
要获得基础数据的读取或写入权限,除 Lake Formation 权限外,作业运行时角色还需要具有 lakeformation:GetDataAccess IAM 权限。获得此权限后,Lake Formation 将授权访问数据的临时凭证请求。
下面是一个策略示例,展示了如何提供 IAM 权限以访问 Amazon S3 中的脚本、将日志上传到 S3、Amazon Glue API 权限以及访问 Lake Formation 的权限。
步骤 2.1:配置 Lake Formation 权限
从 S3 读取数据的 Spark 作业需要 Lake Formation SELECT 权限。
在 S3 中写入/删除数据的 Spark 作业需要 Lake Formation ALL (SUPER) 权限。
与 Glue Data Catalog 交互的 Spark 作业需要视情况具有 DESCRIBE、ALTER、DROP 权限。
有关更多信息,请参阅授予对 Data Catalog 资源的权限。
步骤 3:使用 Lake Formation 初始化 Spark 会话以实现全表访问
先决条件
必须将 Amazon Glue Data Catalog 配置为元存储才能访问 Lake Formation 表。
设置以下设置以将 Glue 目录配置为元存储:
--conf spark.sql.catalogImplementation=hive --conf spark.hive.metastore.client.factory.class=com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory
有关为 EMR Serverless 启用 Data Catalog 的更多信息,请参阅 EMR Serverless 的元存储配置。
要访问注册到 Amazon Lake Formation 的表,需要在 Spark 初始化期间设置以下配置,以便将 Spark 配置为使用 Amazon Lake Formation 凭证。
-
spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver:配置 EMR 文件系统 (EMRFS) 或 EMR S3A,以使用 Amazon Lake Formation S3 凭证访问注册到 Lake Formation 的表。如果表未注册,请使用作业的运行时角色凭证。 -
spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true和spark.hadoop.fs.s3.folderObject.autoAction.disabled=true:在创建 S3 文件夹时,将 EMRFS 配置为使用内容类型标头应用程序/x 目录,而不是 $folder$ 后缀。这在读取 Lake Formation 表时为必需,因为 Lake Formation 凭证不允许读取带有 $folder$ 后缀的表文件夹。 -
spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true:将 Spark 配置为在创建表之前跳过空表位置验证。这对于注册到 Lake Formation 的表是必需的,因为只有在创建 Glue 数据目标表之后,用于验证空位置的 Lake Formation 凭证才会可用。如果未启用此配置,则作业的运行时角色凭证将会验证空表位置。 -
spark.sql.catalog.createDirectoryAfterTable.enabled=true:将 Spark 配置为在 Hive 元数据存储中创建表后再创建 Amazon S3 文件夹。这对于注册到 Lake Formation 的表为必需,因为只有在创建 Glue Data Catalog 表之后,用于创建 S3 文件夹的 Lake Formation 凭证才会可用。 -
spark.sql.catalog.dropDirectoryBeforeTable.enabled=true:将 Spark 配置为在 Hive 元数据存储中删除表之前删除 S3 文件夹。这对于注册到 Lake Formation 的表是必需的,因为在从 Glue Data Catalog 中删除表之后,用于删除 S3 文件夹的 Lake Formation 凭证将不可用。 -
spark.sql.catalog.<catalog>.glue.lakeformation-enabled=true:将 Iceberg 目录配置为将 Amazon Lake Formation S3 凭证用于注册到 Lake Formation 的表。如果表未注册,则会使用默认环境凭证。
在 SageMaker Unified Studio 中配置全表访问模式
要在 JupyterLab 笔记本中通过交互式 Spark 会话访问注册到 Lake Formation 的表,请使用兼容性权限模式。使用 %%configure 魔术命令设置 Spark 配置。根据表类型选择配置:
替换占位符:
S3_DATA_LOCATION:您的 S3 存储桶路径REGION:Amazon 区域(如 us-east-1)ACCOUNT_ID:您的 Amazon 账户 ID
注意
必须在笔记本中执行任何 Spark 操作之前设置这些配置。
支持的操作
这些操作将使用 Amazon Lake Formation 凭证来访问表数据。
CREATE TABLE
ALTER TABLE
INSERT INTO
INSERT OVERWRITE
UPDATE
MERGE INTO
DELETE FROM
ANALYZE TABLE
REPAIR TABLE
DROP TABLE
Spark Datasource 查询
Spark Datasource 写入
注意
上面未列出的操作将继续使用 IAM 权限来访问表数据。
注意事项
如果使用未启用全表访问的作业创建 Hive 表,并且未插入任何记录,则后续从启用全表访问的作业进行的读取或写入操作都将失败。这是因为未启用全表访问的 EMR Spark 会将
$folder$后缀添加到表文件夹名称。要解决此问题,您可以使用以下任一方法:从未启用 FTA 的作业在表中至少插入一行。
配置未启用 FTA 的作业,从而确保不在 S3 文件夹名称中使用
$folder$后缀。可以通过设置 Spark 配置spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true来实现此目的。使用 Amazon S3 控制台或 Amazon S3 CLI 在表位置
s3://path/to/table/table_name创建一个 Amazon S3 文件夹。
从 Amazon EMR 版本 7.8.0 开始,EMR 文件系统 (EMRFS) 支持全表访问,从 Amazon EMR 版本 7.10.0 开始,S3A 文件系统支持全表访问。
Hive、Iceberg 和 Delta 表均支持全表访问。Hudi 表不支持全表访问。
使用 Lake Formation 精细访问控制 (FGAC) 规则或 Glue Data Catalog 视图引用表的作业将会失败。要使用 FGAC 规则或 Glue Data Catalog 视图查询表,您必须使用 FGAC 模式。您可以按照 Amazon 文档中所述的步骤启用 FGAC 模式:使用 EMR Serverless 和 Amazon Lake Formation 实现精细访问控制。
全表访问模式不支持 Spark Streaming。
将 Spark DataFrame 写入 Lake Formation 表时,仅 Hive 表和 Iceberg 表支持 APPEND 模式:
df.write.mode("append").saveAsTable(table_name)创建外部表需要 IAM 权限。
由于 Lake Formation 会在 Spark 作业中临时缓存凭证,因此当前正在运行的 Spark 批处理作业或交互式会话可能无法反映权限更改。
您必须使用用户定义的角色而不是服务相关角色:Lake Formation 对角色的要求。