使用 gcpdiag
工具
gcpdiag
是一种开源工具,不是官方支持的 Google Cloud 产品。您可以使用 gcpdiag
工具来帮助识别和修复 Google Cloud项目问题。如需了解详情,请参阅 GitHub 上的 gcpdiag 项目。
gcpdiag
工具通过执行以下检查帮助您发现 Dataproc 集群创建中的问题:
- 缺货错误:评估 Logs Explorer 日志,发现区域和可用区中的缺货情况。
- 配额不足:检查 Dataproc 集群项目中的配额可用情况。
- 网络配置不完整:执行网络连接测试,包括检查必要的防火墙规则以及外部和内部 IP 配置。如果集群已被删除,
gcpdiag
工具将无法执行网络连接检查。 - 跨项目配置不正确:检查跨项目服务账号,并审核其他角色和组织政策执行情况。
- 缺少共享虚拟私有云网络 IAM 角色:如果 Dataproc 集群使用共享 VPC 网络,请检查是否已添加所需的服务账号角色。
- 初始化操作失败:评估 Logs Explorer 日志以发现初始化操作脚本失败和超时。
如需查看 gcpdiag
集群创建步骤的列表,请参阅可能的步骤。
运行 gcpdiag
命令
您可以在Google Cloud 控制台中或 Docker 容器内通过 Cloud Shell 运行 gcpdiag
命令。
Google Cloud 控制台
- 完成然后复制以下命令。
- 打开 Google Cloud 控制台并激活 Cloud Shell。 打开 Cloud 控制台
- 粘贴复制的命令。
- 运行
gcpdiag
命令以下载gcpdiag
Docker 映像,然后执行诊断检查。如果适用,请按照输出说明修复失败的检查。
gcpdiag runbook dataproc/cluster-creation \
--parameter project_id=PROJECT_ID \
--parameter cluster_name=CLUSTER_NAME \
--parameter OPTIONAL_FLAGS
Docker
您可以使用封装容器运行 gcpdiag
,以在 Docker 容器中启动 gcpdiag
。必须安装 Docker 或 Podman。
- 在本地工作站上复制并运行以下命令。
curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
- 执行
gcpdiag
命令:./gcpdiag runbook dataproc/cluster-creation \ --parameter project_id=PROJECT_ID \ --parameter cluster_name=CLUSTER_NAME \ --parameter OPTIONAL_FLAGS
查看此 Runbook 的可用参数。
替换以下内容:
- PROJECT_ID:资源所在项目的 ID
- CLUSTER_NAME:项目中目标 Dataproc 集群的名称
- OPTIONAL_PARAMETERS:添加以下一个或多个可选参数。如果集群已被删除,则必须提供这些参数。
cluster_uuid
:项目中目标 Dataproc 集群的 UUIDservice_account
:Dataproc 集群虚拟机服务账号subnetwork
:Dataproc 集群子网完整 URI 路径internal_ip_only
:判断正误cross_project
:如果 Dataproc 集群使用的是另一个项目中的虚拟机服务账号,则为跨项目 ID
实用标志:
--universe-domain
:如果适用,则为托管资源的可信合作伙伴主权云网域--parameter
或-p
:Runbook 参数
如需查看所有 gcpdiag
工具标志的列表和说明,请参阅 gcpdiag
使用说明。
了解并修复集群创建错误
本部分列出了 Dataproc 错误消息及其常见原因和解决方案。
操作超时:仅运行 2 个必需的数据节点/节点管理器中的 0 个。
原因:控制器节点无法创建集群,因为它不能与工作器节点通信。
解决方案:
- 检查防火墙规则警告。
- 确保已设置正确的防火墙规则。如需了解详情,请参阅默认 Dataproc 防火墙规则概览。
- 在 Google Cloud 控制台中执行连接测试,以确定禁止控制器节点和工作器节点之间通信的内容。
projects/{projectId}/regions/{region}/subnetworks/{subnetwork}
所需的compute.subnetworks.use
权限原因:当您尝试使用另一个项目中的 VPC 网络设置 Dataproc 集群并且 Dataproc Service Agent 服务账号对托管该网络的共享 VPC 项目没有必要的权限时,可能会发生此错误。
解决方案:按照创建使用另一个项目中的 VPC 网络的集群中列出的步骤。
可用区
projects/zones/{zone}
没有足够的资源来处理请求(resource type:compute)
原因:用于创建集群的可用区没有足够的资源。
解决方案:
- 在其他可用区中创建集群。
- 使用 Dataproc 自动选择可用区展示位置功能。
已超出配额错误
CPUS/CPUS_ALL_REGIONS 配额不足
“DISKS_TOTAL_GB”配额不足
“IN_USE_ADDRESSES”配额不足原因:您的 CPU、磁盘或 IP 地址请求超出了您的可用配额。
解决方案:通过 Google Cloud 控制台申请更多配额。
初始化操作失败
原因:创建集群期间提供的初始化操作安装失败。
解决方案:
- 请参阅初始化操作注意事项和指南。
- 检查输出日志。错误消息应提供 Cloud Storage 中日志的链接。
未能初始化节点
CLUSTER-NAME-m
。… 请查看以下输出:<gs://PATH_TO_STARTUP_SCRIPT_OUTPUT>
原因:Dataproc 集群控制器节点未能初始化。
解决方案:
- 查看错误消息 (
gs://PATH_TO_STARTUP_SCRIPT_OUTPUT
) 中列出的启动脚本输出日志,并验证节点初始化失败的原因。 - 原因可能包括 Dataproc 集群网络配置问题和安装 Python 软件包依赖项失败。
- 如果在查看启动脚本日志后问题仍未解决,请先解决用户端问题,然后使用指数退避机制重试,接着与 Google Cloud 支持团队联系。
- 查看错误消息 (
集群创建失败:IP 地址空间用尽
原因:无法提供所请求的集群节点所需的 IP 地址空间。
解决方案:
- 在其他子网或网络中创建集群。
- 减少网络用量以释放 IP 地址空间。
- 等待网络上有足够的 IP 空间可用。
初始化脚本错误消息:存储库 REPO_NAME 不再有发布文件
原因:Debian oldstable 向后移植代码库已被清除。
解决方案:
在初始化脚本中运行
apt-get
的代码之前添加以下代码。oldstable=$(curl -s https://deb.debian.org/debian/dists/oldstable/Release | awk '/^Codename/ {print $2}'); stable=$(curl -s https://deb.debian.org/debian/dists/stable/Release | awk '/^Codename/ {print $2}'); matched_files="$(grep -rsil '\-backports' /etc/apt/sources.list*)" if [[ -n "$matched_files" ]]; then for filename in "$matched_files"; do grep -e "$oldstable-backports" -e "$stable-backports" "$filename" || \ sed -i -e 's/^.*-backports.*$//' "$filename" done fi
等待实例
DATAPROC_CLUSTER_VM_NAME
报告超时或网络无法访问:dataproccontrol-REGION.googleapis.com
原因:这些错误消息表明您的 Dataproc 集群的网络设置不完整:您可能缺少通往默认互联网网关的路由或防火墙规则。
解决方案:
如需排查此问题,您可以创建以下连接测试:
- 在两个 Dataproc 集群虚拟机之间创建连接测试。此测试的结果将有助于您了解网络的入站流量或出站流量允许防火墙规则是否正确应用于集群虚拟机。
- 在 Dataproc 集群虚拟机与当前 Dataproc 控制 API IP 地址之间创建连接测试。如需获取当前的 Dataproc 控制 API IP 地址,请使用以下命令:
dig dataproccontrol-REGION.googleapis.com A
使用输出的回答部分中的任何 IPv4 地址。
连接测试的结果将帮助您了解通往默认互联网网关的路由和出站流量允许防火墙是否已正确配置。
根据连接测试的结果:
- 向集群 VPC 网络添加通往互联网的路由:IPv4 使用
0.0.0.0/0
,IPv6 使用::/0
,并设置--next-hop-gateway=default-internet-gateway
。 - 添加防火墙规则以进行访问权限控制。
因更新而出错
原因:集群接受了提交到 Dataproc 服务的作业,但无法手动或通过自动扩缩进行扩容或缩容。非标准集群配置也可能会导致此错误。
解决方案:
集群问题排查提示
本部分针对可能导致 Dataproc 集群无法创建的常见问题提供了更多问题排查指导。
当 Dataproc 集群无法预配时,通常会生成一条一般性错误消息,或者在失败之前报告 PENDING
或 PROVISIONING
状态。诊断和解决集群故障问题的关键在于检查集群日志并评估常见故障点。
常见症状和错误消息
以下是与集群创建失败关联的常见症状和错误消息:
- 集群状态长时间保持为
PENDING
或PROVISIONING
。 - 集群转换为
ERROR
状态。 - 集群创建期间出现的一般 API 错误,例如
Operation timed out
。 已记录或 API 响应错误消息,例如:
RESOURCE_EXHAUSTED
:与 CPU、磁盘或 IP 地址配额相关Instance failed to start
Permission denied
Unable to connect to service_name.googleapis.com
或Could not reach required Google APIs
Connection refused
或network unreachable
- 与初始化操作失败相关的错误,例如脚本执行错误和找不到文件。
查看集群日志
诊断集群创建失败问题时,一个重要的初始步骤是查看 Cloud Logging 中提供的详细集群日志。
- 前往 Logs Explorer:在 Google Cloud 控制台中打开 Logs Explorer。
- 过滤 Dataproc 集群:
- 在资源下拉菜单中,选择
Cloud Dataproc Cluster
。 - 输入您的
cluster_name
和project_id
。您还可以按location
(区域)过滤。
- 在资源下拉菜单中,选择
- 检查日志条目:
- 查找在集群创建失败时间附近出现的
ERROR
或WARNING
级消息。 - 请注意来自
master-startup
、worker-startup
和agent
组件的日志,以便深入了解虚拟机级或 Dataproc 代理问题。 - 如需深入了解虚拟机启动时出现的问题,请按
resource.type="gce_instance"
过滤日志,并查找与集群节点关联的实例名称(例如CLUSTER_NAME-m
或CLUSTER_NAME-w-0
)发出的消息。 串行控制台日志可以揭示虚拟机生命周期早期发生的网络配置问题、磁盘问题和脚本失败。
- 查找在集群创建失败时间附近出现的
常见的集群故障原因和问题排查提示
本部分概述了 Dataproc 集群创建可能会失败的常见原因,并提供了一些问题排查提示,以帮助您排查集群故障。
IAM 权限不足
Dataproc 集群使用的虚拟机服务账号必须具有适当的 IAM 角色,才能预配 Compute Engine 实例、访问 Cloud Storage 存储桶、写入日志以及与其他 Google Cloud 服务互动。
- 必需的 Worker 角色:验证虚拟机服务账号是否具有 Dataproc Worker 角色 (
roles/dataproc.worker
)。此角色具有 Dataproc 管理集群资源所需的最低权限。 - 数据访问权限:如果作业从 Cloud Storage 或 BigQuery 读取数据或向其中写入数据,则服务账号需要相关角色,例如
Storage Object Viewer
、Storage Object Creator
或Storage Object Admin
(Cloud Storage),或者BigQuery Data Viewer
或BigQuery Editor
(BigQuery)。 - 日志记录权限:服务账号必须具有可提供将日志写入 Cloud Logging 所需权限的角色,例如
Logging Writer
角色。
问题排查提示:
确定服务账号:确定集群配置为使用的虚拟机服务账号。如果未指定,则默认为 Compute Engine 默认服务账号。
验证 IAM 角色:在 Google Cloud 控制台中,前往 IAM 和管理 > IAM 页面,找到集群虚拟机服务账号,然后验证该账号是否具有集群操作所需的必要角色。授予任何缺失的角色。
超出资源配额
Dataproc 集群会使用 Compute Engine 和其他 Google Cloud 服务的资源。超出项目或区域配额可能会导致集群创建失败。
- 要检查的常见 Dataproc 配额:
CPUs
(区域)DISKS_TOTAL_GB
(区域)IN_USE_ADDRESSES
(对于内部 IP,为区域级;对于外部 IP,为全球级)- Dataproc API 配额,例如
ClusterOperationRequestsPerMinutePerProjectPerRegion
。
问题排查提示:
- 查看配额:前往 Google Cloud 控制台中的 IAM 和管理 > IAM 页面。 按“服务”过滤“Compute Engine API”和“Dataproc API”。
- 检查使用量与限额的对比情况:确定任何达到或接近限额的配额。
- 如有必要,请申请增加配额。
网络配置问题
网络配置问题(例如 VPC 网络、子网、防火墙或 DNS 配置不正确)是导致集群创建失败的常见原因。集群实例必须能够彼此通信以及与 Google API 通信。
- VPC 网络和子网:
- 验证集群 VPC 网络和子网是否存在且已正确配置。
- 验证子网是否具有足够的可用 IP 地址范围。
- 专用 Google 访问通道 (PGA):如果集群虚拟机具有内部 IP 地址,并且需要访问 Google API 以进行 Cloud Storage、Cloud Logging 和其他操作,请验证子网上是否已启用专用 Google 访问通道。默认情况下,使用 2.2 及更高版本映像创建的 Dataproc 集群会预配具有内部专用 IP 地址的虚拟机,并在集群区域子网上启用专用 Google 访问通道。
- Private Service Connect (PSC):如果您使用 Private Service Connect 访问 Google API,请验证是否已为 Dataproc 所依赖的 Google API(例如
dataproc.googleapis.com
、storage.googleapis.com
、compute.googleapis.com
和logging.googleapis.com
)正确配置必要的 Private Service Connect 端点。API 的 DNS 条目必须解析为专用 IP 地址。请注意,使用 Private Service Connect 并不意味着无需使用 VPC 对等互连与其他客户管理的 VPC 网络进行通信。 。 - VPC 对等互连:如果您的集群与其他 VPC 网络(例如共享 VPC 宿主项目或其他客户 VPC)中的资源通信,请验证 VPC 对等互连是否已正确配置,以及路由是否正在传播。
防火墙规则:
- 默认规则:验证默认防火墙规则(例如
allow-internal
或allow-ssh
)是否过于严格。 自定义规则:如果已设置自定义防火墙规则,请验证这些规则是否允许所需的通信路径:
- 集群内的内部通信(在 -m 和 -w 节点之间)。
从集群虚拟机到 Google API 的出站流量,使用公共 IP 或互联网网关、专用 Google 访问通道或 Private Service Connect 端点。
作业所依赖的任何外部数据源或服务的流量。
- 默认规则:验证默认防火墙规则(例如
DNS 解析:确认集群实例可以正确解析 Google API 以及任何内部或外部服务的 DNS 名称。
问题排查提示:
- 查看网络配置:检查集群部署到的 VPC 网络和子网设置。
- 检查防火墙规则:查看 VPC 网络或共享 VPC 宿主项目中的防火墙规则。
- 测试连接:在集群子网中启动临时 Compute Engine 虚拟机,然后运行以下步骤:
ping
或curl
到外部 Google API 网域(例如storage.googleapis.com
)。nslookup
,以验证 DNS 解析是否解析为预期的 IP 地址(专用 Google 访问通道或 Private Service Connect)。- 运行 Google Cloud 连接测试,以诊断从测试虚拟机到相关端点的路径。
初始化操作失败
Dataproc 初始化操作是在集群创建期间在集群虚拟机上运行的脚本。这些脚本中的错误可能会阻止集群启动。
问题排查提示:
- 检查日志中是否存在初始化操作错误:在 Cloud Logging 中查找与集群实例的
init-actions
或startup-script
相关的日志条目。 - 检查脚本路径和权限:验证初始化操作脚本是否正确位于 Cloud Storage 中,以及集群虚拟机服务账号是否具有读取 Cloud Storage 脚本所需的
Storage Object Viewer
角色。 - 调试脚本逻辑:在模拟集群环境的单独 Compute Engine 虚拟机上测试脚本逻辑,以识别错误。向脚本添加详细日志记录。
区域级资源可用性(缺货)
有时,某个区域或可用区中的机器类型或资源会暂时不可用(缺货)。通常,这会导致出现与项目配额问题无关的 RESOURCE_EXHAUSTED
错误。
问题排查提示:
- 尝试其他可用区或区域:尝试在同一区域内的其他可用区或在其他区域中创建集群。
- 使用自动选择可用区展示位置:使用 Dataproc 自动选择可用区展示位置功能自动选择具有容量的可用区。
- 调整机器类型:如果使用的是自定义或专用机器类型,请尝试使用标准机器类型,看看是否能解决问题。
后续步骤
如果您仍然遇到集群故障问题,请执行以下操作:
- 与 Cloud Customer Care 团队联系。
描述集群故障问题以及采取的问题排查步骤。
另请提供以下信息:
- 集群诊断数据
- 以下命令的输出:
gcloud dataproc clusters describe CLUSTER_NAME \ -region=REGION
- 导出的失败集群日志。