2016-12-09 4 views
0

Dataproc을 사용하여 새로운 Compute 클러스터를 만들려고 할 때 "us-west1-a"또는 "us-central1"과 같은 "실제"영역을 지정할 때 불평합니다 -f ",이 엔드 포인트에서 지정된 영역이 지원되지 않는다는 오류 메시지가 수신됩니다. (아래 오류 텍스트 참조)Java SDK를 사용하여 Dataproc의 GceClusterConfig에서 ZoneUri를 지정하는 방법

오류에 따르면, 영역에 "전역"이 표시 될 것으로 예상됩니다. 그러나 전역으로 지정하면 "전역"이 올바른 영역이 아니라는 오류가 생성됩니다. "[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; 
} 

답변

3

통해 Dataproc 영역 계산할 엔진으로부터 독립적으로 지정된 "구역"둘 사이의 관계는 실제로 존재하더라도. 당분간, 실제로 모든 GCE 영역을 서비스하는 방법을 알고있는 "글로벌"Dataproc 영역에만 이야기하고 있습니다. 그래서 당신은 단순히의 인수로 "지구"를 지정해야합니다

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

그리고이 특정 us-central1-f 또는 당신이 원하는 것을 무엇이든로 GCE 영역을 지정합니다. Dataproc의 UI를 사용하여 클러스터 생성 옵션을 선택한 다음 맨 아래에 "동등한 REST"링크가있는 경우 console.cloud.google.com에서 기본 JSON REST 표현으로 재생할 수 있습니다. 명시 적으로 zoneUri을 설정하는 곳 gceClusterConfig의 몸이 동안이 지역 인수는 SDK의 create(project, region, cluster) 방법에가는 곳 POST URI에

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

regions/global된다

당신은 같은 것을 볼 수 있습니다.