本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Amazon EMR 中使用 Amazon Glue 数据目录视图(预览版)
重要
Amazon Amazon EMR 上 EC2 的 Glue 数据目录视图处于预览版,该功能可能会发生变化。根据Amazon 服务条款
Amazon Glue 数据目录视图已在 EMR Serverless 中正式发布。有关更多信息,请参阅 Amazon EMR 无服务器用户指南中的使用 Glue 数据目录视图。
您可以在 Amazon Glue 数据目录中创建和管理单个常用视图。单个常用视图很有用,因为它们支持多个 SQL 查询引擎,因此您可以跨不同的视图访问相同的视图,例如亚马逊 EMR Amazon Web Services 服务、Amazon Athena 和 Amazon Redshift。
通过在数据目录中创建视图,您可以在中使用资源授予和基于标签的访问控制 Amazon Lake Formation 来授予对数据目录视图的访问权限。使用这种访问控制方法,您无需为创建视图时引用的表配置其他访问权限。这种授予权限的方法称为定义者语义,这些视图称为定义者视图。有关 Lake Formati on 中访问控制的更多信息,请参阅授予和撤消数据目录资源的权限。 在《 Amazon Lake Formation 开发人员指南》中。
数据目录视图对于以下用例非常实用:
-
精细访问控制:创建一个视图,根据用户所需的权限来限制数据访问。例如,您可以使用 Data Catalog 中的视图来防止不在 HR 部门工作的员工查看个人身份信息 (PII)。
-
完整视图定义:通过对数据目录中的视图应用某些筛选条件,可确保数据目录中视图内的数据记录始终完整。
-
增强安全性:用于创建视图的查询定义必须完整。这种优势意味着数据目录中的视图不容易受到恶意玩家的 SQL 命令的影响。
-
简单共享数据 — Amazon Web Services 账户 无需移动任何数据即可与其他人共享数据。有关更多信息,请参阅 Lake Formation 中的跨账户数据共享。
创建 Data Catalog 视图
重要
在此预览版中,Amazon EMR 不会验证您在创建视图时使用的 Spark-SQL。为了降低风险,建议您限制授予视图创建权限的用户。
要创建数据目录视图,您必须使用 IAM 角色,该角色对创建视图时要引用的所有表具有完整的 SELECT
权限和 Grantable
选项。该角色被称为定义者角色。有关创建数据目录视图所需的权限和先决条件的完整列表,请参阅《 Amazon Lake Formation 开发人员指南》中的使用视图。您必须使用 Amazon CLI 来配置您的 IAM 角色。有关更多信息,请参阅在 Amazon CLI中使用 IAM 角色。
按照以下步骤创建数据目录视图。
注意
要从 Amazon EMR 上的 Apache Spark 访问数据目录视图,必须将方言设置为 SPARK
,将 DialectVersion
设置为 3.4.1-amzn-2
。
-
先下载预览模型。
aws s3 cp s3://emr-data-access-control-us-east-1/beta/glue-views/model/service-2.json
-
配置 Amazon CLI 为使用预览模型。
aws configure add-model --service-model file:///
<path-to-preview-model>
/service-2.json --service-name glue-views -
创建视图。
aws glue-views create-table --cli-input-json '{ "DatabaseName": "<
database
>", "TableInput": { "Name": "<view
>", "StorageDescriptor": { "Columns": [ { "Name": "<col1
>", "Type": "<data-type
>" }, ... { "Name": "<colN
>", "Type": "<data-type
>" } ] }, "ViewDefinition": { "SubObjects": [ "arn:aws:glue:<aws-region;
>:<aws-account-id
>:table/<database
>/<referenced-table1
>", ... "arn:aws:glue:<aws-region
>:<aws-account-id
>:table/<database
>/<referenced-tableN
>", ], "IsProtected": true, "Representations": [ { "Dialect": "SPARK", "DialectVersion": "3.4.1-amzn-2", "ViewOriginalText": "<Spark-SQL
>", "ViewExpandedText": "<Spark-SQL
>" } ] } } }'
启用数据目录视图
重要
建议您仅在测试环境(而非生产环境)中通过 EMR 集群启用对数据目录视图的访问。
要从 Amazon EMR 上的 Apache Spark 访问数据目录视图,必须先启用对 Lake Formation 的支持,然后使用下面的脚本在 Amazon EMR 上启用对 Spark 视图的支持。有关启用支持的更多信息,请参阅使用 Amazon EMR 启用 Lake Formation 和使用自定义引导操作。
# Download the script and upload it to Amazon S3 wget https://emr-data-access-control-us-east-1.s3.amazonaws.com/beta/glue-views/ba/enable-mdv.sh /Users/$USER/enable-mdv.sh aws s3 cp /Users/$USER/enable-views.sh s3://<
bucket
>/<prefix
>/enable-views.sh # EMR Security Configuration cat <<EOT > /Users/$USER/lakeformation-protection.json { "AuthorizationConfiguration":{ "IAMConfiguration":{ "EnableApplicationScopedIAMRole":true }, "LakeFormationConfiguration":{ "AuthorizedSessionTagValue":"Amazon EMR" } }, "EncryptionConfiguration": { "EnableInTransitEncryption": true, "InTransitEncryptionConfiguration": { "TLSCertificateConfiguration": { "CertificateProviderType": "PEM", "S3Object": "s3://<BUCKET
>/<PREFIX
>/certificates.zip" } } } } EOT SECURITY_CONFIG="RuntimeRolesWithAWSLakeFormation" aws emr create-security-configuration \ --name $SECURITY_CONFIG \ --security-configuration file:///Users/$USER/lakeformation-protection.json # EMR Cluster version RELEASE_LABEL="emr-6.15.0"
然后使用以下使用引导操作的 Amazon CLI 命令创建支持数据目录视图的 EMR 集群。
aws emr create-cluster \ ... --release-label $RELEASE_LABEL \ --security-configuration $SECURITY_CONFIG \ --bootstrap-actions \ Name='Enable Views',Path="s3://<
bucket
>/<prefix
>/enable-views.sh"
查询 Data Catalog 视图
重要
在此预览版中,建议您仅访问来自受信任源的视图。在预览版中,Amazon EMR 的验证数量有限,可以保护您的 EMR 集群。
创建数据目录视图后,现在可以使用 IAM 角色查询视图。IAM 角色必须拥有对数据目录视图的 SELECT
权限。您无需授予对视图中引用的基础表的访问权限。您必须将此 IAM 角色用作运行时角色。你可以使用 Amazon EMR 步骤、EMR Studio 和 AI Studio 中的运行时角色从 EMR 集群访问视图。 SageMaker 有关运行时角色的更多信息,请参阅 Amazon EMR 步骤的运行时角色。
完成所有设置后,就可以查询视图。例如,在 EMR Studio 中将 EMR 集群附加到 Workspace 后,可以运行以下查询来访问视图。
SELECT * from <database>.<glue-data-catalog-view> LIMIT 10
限制
使用数据目录视图时,请考虑以下限制。
-
只能使用 Amazon EMR 6.15.0 创建数据目录视图。
-
在视图定义中,最多只能引用 10 个表。
-
只能创建
PROTECTED
数据目录视图。不支持UNPROTECTED
视图。 -
您不能在数据目录视图中引用其他视图 Amazon Web Services 账户 中的表。
-
不支持用户定义的函数 (UDFs)。
-
您不能在数据目录视图中引用 Apache Hudi 或 Apache Iceberg 等开放表格式。
-
不能在数据目录视图中引用其他视图。