Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Dataproc';使用Java SDK的GceClusterConfig_Java_Google Cloud Dataproc - Fatal编程技术网

如何在Dataproc';使用Java SDK的GceClusterConfig

如何在Dataproc';使用Java SDK的GceClusterConfig,java,google-cloud-dataproc,Java,Google Cloud Dataproc,当尝试使用Dataproc创建新的计算集群时,它抱怨说,当我指定一个“真实”区域(如“us-west1-a”或“us-central1-f”)时,我收到一条错误消息,表示该端点不支持指定的区域。(请参阅下面的错误文本) 正如您所看到的,根据错误,它期望该区域是“全局的”。但是,将其指定为全局会生成错误,即“全局”不是有效区域。做一些愚蠢的事情,比如将其指定为“[global]”,只会生成无效的URI格式。未指定区域会导致它抱怨必须设置区域 因此,所有逻辑上可能的值都被消除,这表明必须采取其他步骤

当尝试使用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区域是独立于计算引擎“区域”指定的,即使两者之间确实存在关系。目前,您实际上只与“全球”Dataproc区域进行对话,该区域知道如何为所有GCE区域提供服务。因此,您只需将“global”指定为以下参数:

createOp = dataproc.projects().regions().clusters()
       .create(projectId, "global", cluster);
然后将您的GCE区域指定为特定的
us-central1-f
或任何您想要的区域。如果您使用Dataproc的UI选择创建集群的选项,然后在最底层有一个“等效REST”链接,那么您可以在console.cloud.google.com中使用底层JSON 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)
方法中region参数所在的位置,而
gceClusterConfig
的主体是显式设置
zoneUri
的位置。

Dataproc区域是独立于计算引擎“区域”指定的尽管两者之间确实存在某种关系。目前,您实际上只与“全球”Dataproc区域进行对话,该区域知道如何为所有GCE区域提供服务。因此,您只需将“global”指定为以下参数:

createOp = dataproc.projects().regions().clusters()
       .create(projectId, "global", cluster);
然后将您的GCE区域指定为特定的
us-central1-f
或任何您想要的区域。如果您使用Dataproc的UI选择创建集群的选项,然后在最底层有一个“等效REST”链接,那么您可以在console.cloud.google.com中使用底层JSON 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)
方法中region参数所在的位置,而
gceClusterConfig
的主体是显式设置
zoneUri
的位置