对 Lake Formation 集群进行故障排查 - Amazon EMR

对 Lake Formation 集群进行故障排查

本部分向您介绍在将 Amazon EMR 与 AWS Lake Formation 结合使用时对常见问题进行故障排查的过程。

不允许访问数据湖

您必须明确选择在 Amazon EMR 集群上进行数据筛选,然后才能分析和处理数据湖中的数据。当数据访问失败时,您将在笔记本条目的输出中看到一条通用 Access is not allowed 消息。

要选择并允许在 Amazon EMR 上进行数据筛选,请参阅《AWS Lake Formation 开发人员指南》中的允许在 Amazon EMR 上进行数据筛选以获取说明。

会话过期

EMR Notebooks 和 Zeppelin 的会话超时由 Lake Formation 的 IAM 角色的 Maximum CLI/API session duration 设置控制。此设置的默认值为 1 小时。如果出现会话超时,在尝试返回 Spark SQL 命令时,您将在笔记本条目的输出中看到下列消息。

Error 401 HTTP ERROR: 401 Problem accessing /sessions/2/statements. Reason: JWT token included in request failed validation. Powered by Jetty:// 9.3.24.v20180605 org.springframework.web.client.HttpClientErrorException: 401 JWT token included in request failed validation…

要验证您的会话,请刷新页面。系统将提示您使用 IdP 重新进行身份验证并将重定向回笔记本。重新进行身份验证后,您可以继续运行查询。

用户在所请求表上没有权限

试图访问您没有访问权限的表时,在尝试运行 Spark SQL 命令时,您将在笔记本条目的输出中看到下列异常:

org.apache.spark.sql.AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: Unable to fetch table table. Resource does not exist or requester is not authorized to access requested permissions. (Service: AWSGlue; Status Code: 400; Error Code: AccessDeniedException; Request ID: …

要访问该表,您必须通过在 Lake Formation 中更新与此表关联的权限,向用户授予访问权限。

查询与 Lake Formation 共享的跨账户数据

使用 Amazon EMR 从其他账户访问与您共享的数据时,某些 Spark 库会尝试调用 Glue:GetUserDefinedFunctions API 操作。由于 AWS RAM 托管权限的版本 1 和 2 不支持此操作,您会收到以下错误消息:

"ERROR: User: arn:aws:sts::012345678901:assumed-role/my-spark-role/i-06ab8c2b59299508a is not authorized to perform: glue:GetUserDefinedFunctions on resource: arn:exampleCatalogResource because no resource-based policy allows the glue:GetUserDefinedFunctions action"

要解决此错误,创建资源共享的数据湖管理员必须更新附加到资源共享的 AWS RAM 托管权限。托管权限的版本 3 AWS RAM 允许主体执行 glue:GetUserDefinedFunctions 操作。

如果您创建了新的资源共享,Lake Formation 会默认应用最新版 AWS RAM 托管权限,您无需执行任何操作。要为现有资源共享启用跨账户数据访问,您需要将 AWS RAM 托管权限更新到版本 3。

您可以在 AWS RAM 中查看分配给与您共享的资源的 AWS RAM 权限。版本 3 中包含以下权限:

Databases AWSRAMPermissionGlueDatabaseReadWriteForCatalog AWSRAMPermissionGlueDatabaseReadWrite Tables AWSRAMPermissionGlueTableReadWriteForCatalog AWSRAMPermissionGlueTableReadWriteForDatabase AllTables AWSRAMPermissionGlueAllTablesReadWriteForCatalog AWSRAMPermissionGlueAllTablesReadWriteForDatabase
更新现有资源共享的 AWS RAM 托管权限版本

您(数据湖管理员)可以按照《AWS RAM 用户指南》中的说明将 AWS RAM 托管权限更新到较新版本,也可以撤消资源类型的所有现有权限然后重新授予。如果您撤消权限,则 AWS RAM 会删除与资源类型关联的 AWS RAM 资源共享。如果您重新授予权限,AWS RAM 会创建新的资源共享并附加最新版本的 AWS RAM 托管权限。

插入、创建和变更表

不支持插入、创建和变更受 Lake Formation 策略保护的数据库中的表。如果执行这些操作,在尝试运行 Spark SQL 命令时,您会在笔记本条目的输出中看到下列异常。

java.io.IOException: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: …

有关更多信息,请参阅将 Amazon EMR 与 AWS Lake Formation 集成的限制