问题排查

本页面介绍了各种错误场景以及解决这些错误的问题排查步骤。

连接和网络错误场景

如果您的服务遇到连接或网络问题,请检查以下部分中的场景,看看是否是某个原因导致了问题。

由于存在限制条件来限制 VPC 对等互连,因此服务创建失败

请勿设置组织政策限制条件来限制 VPC 对等互连。指定 constraints/compute.restrictVpcPeering 会导致创建请求失败并显示 INVALID_ARGUMENT 错误。如果您必须设置限制条件,请使用以下命令允许 under:folders/270204312590

gcloud resource-manager org-policies allow compute.restrictVpcPeering under:folders/270204312590 --organization ORGANIZATION_ID

如需了解详情,请参阅组织政策限制条件

如果不存在服务账号,则跨项目部署会失败

如需创建 Cloud Storage Metastore 服务,并且此网络所属服务所属的项目不属于该服务所属的项目,根据网络项目的 IAM 政策中,您必须向该服务项目的 Dataproc Metastore 服务代理授予 roles/metastore.serviceAgent (service-SERVICE_PROJECT_NUMBER@gcp-sa-metastore.iam.gserviceaccount.com)。

gcloud projects add-iam-policy-binding NETWORK_PROJECT_ID \
    --role "roles/metastore.serviceAgent" \
    --member "serviceAccount:service-SERVICE_PROJECT_NUMBER@gcp-sa-metastore.iam.gserviceaccount.com"

如需了解详情,请参阅设置跨项目部署

未能创建多区域 Dataproc Metastore 服务

创建多区域 Dataproc Metastore 服务时,您可能会看到以下错误:

The Dataproc Service Agent does not have permission to GET Dataproc Metastore service
'projects/<dpmsproject>/locations/nam7/services/<service>'. If using a service from the
cluster's project, please ensure the service agent has the Cloud IAM role
'roles/dataproc.serviceAgent'. Please see
https://cloud.google.com/dataproc/docs/concepts/iam/dataproc-
principals#service_agent_control_plane_identity for information on the Dataproc Service
Agent, and https://cloud.google.com/iam/docs/granting-changing-revoking-access#granting-
gcloud-manual for information on granting access.

如果您的 Dataproc 集群与 Dataproc Metastore 位于不同的项目中,但您尚未向项目授予正确的权限,则会出现此错误。

如需解决此错误,必须向 Dataproc Metastore 项目中包含的 Dataproc 服务帐号授予 metastore.services.get 权限。

网络连接需要专用 IP

Dataproc Metastore 仅使用专用 IP,因此没有公开 IP。这意味着只有提供的 Virtual Private Cloud (VPC) 网络中或本地(通过 Cloud VPN 或 Cloud Interconnect 连接)的虚拟机才能访问 Dataproc Metastore 服务。

如需了解详情,请参阅服务访问权限

Kerberos 所需的入站允许防火墙规则

Kerberos 要求 Dataproc Metastore 启动与项目网络中的主机的连接。您必须创建一条防火墙规则,以允许来自包含 Dataproc Metastore IP 的 /17 IP 地址块中的所有端口上的 TCP 和 UDP 入站流量。

如需了解详情,请参阅 KDC 上的防火墙规则服务的防火墙规则

共享 VPC 网络中预配的资源导致连接错误

如果您的 Dataproc Metastore. 如果发生这种情况,Dataproc Metastore 会尝试保留 RFC 1918 范围之外的专用 IP 地址范围,以便创建服务。如需查看支持的非 RFC 1918 专用范围的列表,请参阅 VPC 网络文档中的有效范围。}服务使用属于其他项目的网络,并且 Compute Engine 受服务边界的保护,则 Metastore 项目和网络项目必须位于同一边界内。

要将现有 Dataproc Metastore 项目添加到边界,请按照更新服务边界中的说明操作。

如需了解详情,请参阅将 VPC Service Controls 与 Dataproc Metastore 搭配使用

已用完分配的 IP 范围

提供的 VPC 网络可能会耗尽 Dataproc Metastore 服务所需的可用 RFC 1918 地址。如果发生这种情况,Dataproc Metastore 会尝试保留 RFC 1918 范围之外的专用 IP 地址范围,以便创建服务。如需查看受支持的非 RFC 1918 专用范围的列表,请参阅 VPC 网络文档中的有效范围

Dataproc Metastore 中使用的非 RFC 1918 专用 IP 地址可能会与连接到提供 VPC 网络的本地网络中的范围冲突。如需检查 Dataproc Metastore 预留的 RFC 1918 和非 RFC 1918 专用 IP 地址列表:

gcloud compute addresses list \
    --project NETWORK_PROJECT_ID \
    --filter="purpose:VPC_PEERING AND name ~ cluster|resourcegroup"

如果确定了冲突,无法通过重新配置本地网络缓解冲突,请删除违规的 Dataproc Metastore 服务,并在 2 小时后重新创建它。

如需了解详情,请参阅 IP 地址范围用尽

操作超时错误场景

以下错误场景会导致服务无响应或操作超时。

使用审核日志来排查操作超时问题

如需排查服务操作超时问题,请使用 Google Cloud 控制台中的 Logs Explorer 来检索 Cloud 项目的审核日志条目。

在“查询构建器”窗格中,选择已审核的资源audited_resource 作为 Google Cloud 资源类型,后跟 Dataproc Metastoremetastore.googleapis.com 作为服务。选取方法是可选操作。

如需了解详情,请参阅查看日志

导入和导出错误场景

本部分概述了常见的 Dataproc Metastore 导入和导出问题。

导入因 Hive 版本不匹配而失败

导入元数据时,Hive Metastore 和 Dataproc Metastore 版本必须兼容。如果两者不匹配,您的导入操作可能会失败。

如需详细了解兼容性,请参阅版本政策

您可以查看 Cloud Logging,看看是否遇到了此错误。以下消息是此错误的一个示例。

Metastore schema version is not compatible. Hive Version: 3.1.0, Database Schema Version: 2.3.0

导入因缺少 Hive 表文件而失败

为 Avro 准备导入操作时,每个 Hive 表都应该有一个文件(即使表为空),否则导入将会失败。

您可以使用 Dataproc Metastore Toolkit 作为参考来检查正确的 Hive 元数据架构。

服务代理或用户没有必要的权限

Dataproc Metastore 服务代理 (service-CUSTOMER_PROJECT_NUMBER@gcp-sa-metastore.iam.gserviceaccount.com) 以及导入元数据的用户必须拥有用于导入的 Cloud Storage 存储桶的读取权限:

  • 对于 MySQL,他们必须拥有用于导入的 Cloud Storage 对象(SQL 转储文件)的 storage.objects.get 权限。

  • 对于 Avro,他们必须拥有用于导入的 Cloud Storage 存储桶的 storage.objects.get 权限。

对于导出操作,Dataproc Metastore 服务代理 (service-CUSTOMER_PROJECT_NUMBER@gcp-sa-metastore.iam.gserviceaccount.com) 以及创建导出操作的用户必须拥有存储桶的 storage.objects.create 权限。

作业因数据库文件过大而失败

如果数据库文件过大,则导入或导出过程可能需要超过作业超时限制才能完成。如果导入未能在 3 小时的作业超时限制内完成,您可以将元数据拆分到多个 Dataproc Metastore 实例中。

备份和恢复错误场景

本部分概述了常见的 Dataproc Metastore 备份和恢复问题。

无法为服务创建新的备份

如果服务中已有 7 个备份,则必须先手动删除一个备份,然后才能创建新备份。您可以从备份/还原标签页删除现有备份。

用户不具备必要的权限

要备份元数据,您必须请求具有 metastore.backups.create IAM 权限的 IAM 角色。

如需恢复元数据,您必须请求具有 metastore.services.restoremetastore.backups.use IAM 权限的 IAM 角色。

作业因服务元数据文件过大而失败

如果服务元数据文件过大,则完成备份或恢复过程可能需要超过一小时的作业超时限制

Dataproc 集群错误场景

以下部分概述了常见的 Dataproc 和自行管理的集群问题。

连接 Dataproc 集群时因版本不匹配失败

关联 Dataproc 集群时,Dataproc 映像和 Dataproc Metastore Hive 版本必须兼容。检查以下映像版本控制页面,以确保 Hive 版本兼容:

如需了解详情,请参阅 Dataproc 映像版本列表

由于角色不足,Dataproc 集群创建失败

创建 Dataproc 集群时,集群创建失败,并显示以下错误消息:

gcloud.dataproc.clusters.create) INVALID_ARGUMENT: Default Service Account '**********-compute@developer.gserviceaccount.com' is missing required permissions: [dataproc.agents.create, dataproc.agents.delete, dataproc.agents.get, dataproc.agents.update, dataproc.tasks.lease, dataproc.tasks.listInvalidatedLeases, dataproc.tasks.reportStatus]. Service Accounts must have either 'Dataproc/Dataproc Worker' role or all permissions granted by the role.

当您尝试创建 Dataproc 集群并将其挂接到 Dataproc Metastore 时,可能会发生这种情况。

如需解决此问题,请将 roles/dataproc.worker 授予您的服务帐号。以下示例通过一些示例值说明了如何执行此操作。

gcloud projects add-iam-policy-binding my_project \
    --member=219315-compute@developer.gserviceaccount.com \
    --role=roles/dataproc.worker

与 Metastore 连接时因时区问题失败

您的 Hive 文件返回错误 The server time zone value 'CDT' is unrecognized or represents more than one time zone

如果您无法从 Dataproc 连接到您的 Metastore,那么您必须删除当前集群并更新您的 gcloud dataproc clusters create 集群创建命令或自动化工具以包含以下时区参数:

--metadata "hive-metastore-uri=jdbc:mysql://10.207.26.77:3306/hive_metastore?serverTimezone=CST6CDT"

排查 Google Cloud CLI 问题

如果您遇到 gcloud CLI 命令不可用的问题,或者该命令的行为与它的记录方式不同,请尝试更新 gcloud CLI:

gcloud components update

后续步骤