gpt4 book ai didi

java - 如何使用 Java SDK 在 Dataproc 的 GceClusterConfig 中指定 ZoneUri

转载 作者:行者123 更新时间:2023-12-01 21:11:29 25 4
gpt4 key购买 nike

当尝试使用 Dataproc 创建新的计算集群时,它提示当我指定“真实”区域(例如“us-west1-a”或“us-central1-f”)时,我收到一条错误消息:该端点不支持指定的区域。 (请参阅下面的错误文本)

正如您所看到的,根据错误,它期望该区域是“全局”的。但是,将其指定为全局会生成“全局”不是有效区域的错误。做一些愚蠢的事情,比如将其指定为“[global]”,只会生成无效的 URI 格式。不指定区域会导致它提示必须设置区域。

因此消除了所有逻辑可能值,这表明必须采取其他步骤来解决此问题。

错误:

Reason: 400 Bad Request
{
"errors" : [
{
"reason" : "badRequest",
"domain" : "global",
"message" : "Region us-central1-f invalid or not supported by this endpoint; permitted regions: [global]"
}
],
"status" : "INVALID_ARGUMENT",
"code" : 400,
"message" : "Region us-central1-f invalid or not supported by this endpoint; permitted regions: [global]"
}

生成此代码的代码片段:

Cluster cluster = createClusterSpec();
createOp = dataproc.projects().regions().clusters()
.create(projectId, region, cluster);
createOp.setBearerToken(credentials.getAccessToken().getTokenValue());
createOp.execute();

// I'm cheating here: the actual code pulls the config from various
// inputs and properties, but we can replicate with hard-coded values.
private Cluster createClusterSpec() {
GceClusterConfig computeEngineConfig = new GceClusterConfig();
// ZONE_URI_FORMAT =
// "https://www.googleapis.com/compute/v1/projects/%s/zones/%s"
computeEngineConfig.setZoneUri(
String.format(ZONE_URI_FORMAT, "funny-project-001",
"us-central1-f"));
InstanceGroupConfig masterConfig = new InstanceGroupConfig();
masterConfig.setMachineTypeUri(
String.format(MACHINE_TYPE_URI_FORMAT,
"funny-project-001", "us-central1-f",
"n1-standard-1"))
.setNumInstances(1);
InstanceGroupConfig workerConfig = new InstanceGroupConfig();
workerConfig.setMachineTypeUri(
String.format(MACHINE_TYPE_URI_FORMAT,
"funny-project-001", "us-central1-f",
"n1-standard-1"))

.setNumInstances(1);


ClusterConfig googClusterConfig = new ClusterConfig();
googClusterConfig.setGceClusterConfig(computeEngineConfig);
googClusterConfig.setMasterConfig(masterConfig);
googClusterConfig.setWorkerConfig(workerConfig);
Cluster returnVal = new Cluster();
returnVal.setProjectId("funny-project-001");
returnVal.setConfig(googClusterConfig);
returnVal.setClusterName("mrfoo");
return returnVal;
}

最佳答案

Dataproc 区域是独立于 Compute Engine“区域”指定的,尽管两者之间确实存在关系。目前,您确实只与“全局”Dataproc 区域对话,该区域知道如何为所有 GCE 区域提供服务。因此,您只需指定“global”作为参数即可:

createOp = dataproc.projects().regions().clusters()
.create(projectId, "global", cluster);

然后将您的 GCE 区域指定为特定的 us-central1-f 或您想要的任何内容。如果您使用 Dataproc 的 UI 选择创建集群的选项,则可以在 console.cloud.google.com 中使用底层 JSON REST 表示形式,然后在最底部有一个“等效 REST”链接。

您会看到类似以下内容:

POST /v1/projects/foo-project/regions/global/clusters/
{
...
"gceClusterConfig": {
"zoneUri": "https://www.googleapis.com/compute/v1/projects/foo-project/zones/us-west1-a"
...
}
...
}

POST URI 中的 regions/global 是 SDK 的 create(project, Region, cluster) 方法中区域参数所在的位置,而 的正文>gceClusterConfig 是您显式设置 zoneUri 的位置。

关于java - 如何使用 Java SDK 在 Dataproc 的 GceClusterConfig 中指定 ZoneUri,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41052004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com