클러스터 만들기

Dataproc 클러스터는 Dataproc API clusters.create HTTP 또는 프로그래매틱 요청을 통해 로컬 터미널 창 또는 Cloud Shell에서 Cloud SDK gcloud 명령줄 도구를 사용하거나 로컬 브라우저에 열린 Google Cloud Console에서 만들 수 있습니다. Cloud 클라이언트 라이브러리를 사용하거나 API 요청을 통해 프로그래매틱 방식으로 클러스터를 만들 수도 있습니다.

클러스터 리전: 클러스터에 global 리전 또는 특정 리전을 지정할 수 있습니다. 전역 영역은 사용자가 지정한 Compute Engine 영역에 인스턴스를 배포할 수 있는 특수한 멀티 리전 엔드포인트입니다. us-east1 또는 europe-west1 등의 개별 리전을 지정하여 Dataproc에서 사용하는 리소스(VM 인스턴스 및 Cloud Storage 포함) 및 메타데이터 스토리지 위치를 사용자가 지정한 리전 내에서 분리할 수 있습니다. 전역 엔드포인트와 리전 엔드포인트 간 차이에 대해 자세히 알아보려면 리전 엔드포인트를 참조하세요. 리전 선택에 대한 자세한 내용은 사용 가능한 리전 및 영역을 참조하세요. 또한 gcloud compute regions list 명령어를 실행하여 사용 가능한 리전 목록을 볼 수도 있습니다.

Dataproc 클러스터에서 마스터 및 작업자 VM으로 구성된 Compute Engine 가상 머신 인스턴스를 위해서는 전체 내부 IP 네트워킹이 서로 액세스할 수 있어야 합니다. 클러스터를 만드는 데 사용 가능한(일반적으로 사용되는) default 네트워크를 통해 이 액세스가 보장됩니다. Dataproc 클러스터의 고유한 네트워크 만들기에 대한 자세한 내용은 Dataproc 클러스터 네트워크 구성을 참조하세요.

Dataproc 클러스터 만들기

gcloud

명령줄에 Dataproc 클러스터를 만들려면 터미널 창 또는 Cloud Shell에서 로컬로 Cloud SDK gcloud dataproc clusters create 명령어를 실행합니다.

gcloud dataproc clusters create cluster-name \
    --region=region
위의 명령어는 마스터 및 작업자 가상 머신 인스턴스, 디스크 크기 및 유형, 네트워크 유형, 클러스터가 배포되는 리전 및 영역, 기타 클러스터 설정에 대해 기본 Dataproc 서비스 설정을 사용하여 클러스터를 만듭니다. 명령줄 플래그를 사용하여 클러스터 설정을 맞춤설정하는 방법은 gcloud dataproc clusters create 명령을 참조하세요.

YAML 파일로 클러스터 만들기

  1. 다음 gcloud 명령어를 실행하여 기존 Dataproc 클러스터의 구성을 YAML 파일로 내보냅니다.
    gcloud dataproc clusters export my-existing-cluster --destination cluster.yaml
    
  2. YAML 파일 구성을 가져와서 새 클러스터를 만듭니다.
    gcloud dataproc clusters import my-new-cluster --source cluster.yaml
    

참고: 내보내기 작업 중에 클러스터 관련 필드(예: 클러스터 이름), 출력 전용 필드, 자동으로 적용되는 라벨이 필터링됩니다. 클러스터를 만들 때 사용하는 가져온 YAML 파일에는 이러한 필드가 허용되지 않습니다.

REST 및 명령줄

이 섹션에서는 필수 값과 기본 구성(마스터 1개, 작업자 2개)을 가진 클러스터를 만드는 방법을 보여줍니다.

아래의 요청 데이터를 사용하기 전에 다음을 바꿉니다.

HTTP 메서드 및 URL:

POST https://dataproc.googleapis.com/v1/projects/project-id/regions/region/clusters

JSON 요청 본문:

{
  "clusterName": "cluster-name",
  "config": {}
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
"name": "projects/project-id/regions/region/operations/b5706e31......",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.dataproc.v1.ClusterOperationMetadata",
    "clusterName": "cluster-name",
    "clusterUuid": "5fe882b2-...",
    "status": {
      "state": "PENDING",
      "innerState": "PENDING",
      "stateStartTime": "2019-11-21T00:37:56.220Z"
    },
    "operationType": "CREATE",
    "description": "Create cluster with 2 workers",
    "warnings": [
      "For PD-Standard without local SSDs, we strongly recommend provisioning 1TB ...""
    ]
  }
}

콘솔

브라우저의 Cloud Console에서 Dataproc 클러스터 만들기 페이지를 엽니다.

위의 스크린샷에는 기본 필드가 새로운 'cluster-1' 클러스터에 맞게 자동으로 입력된 클러스터 만들기 페이지가 나와 있습니다. 고급 옵션 패널을 확장하여 클러스터에 하나 이상의 선점형 워커 노드, 스테이징 버킷, 네트워크, Dataproc 이미지 버전, 초기화 작업, 프로젝트 수준 액세스를 지정할 수 있습니다. 해당 값을 입력하는 것은 선택사항입니다.

기본 클러스터를 생성할 때, 선점형 워커 노드, 자동 생성된 스테이징 버킷, 기본 네트워크, 최신 출시된 Dataproc 이미지 버전은 해당 옵션에 대한 설정을 제공하지 않는 한 포함되지 않습니다.

페이지의 모든 필드를 제대로 입력했다면 만들기를 클릭하여 클러스터를 만듭니다. 클러스터가 만들어지면 클러스터 이름이 클러스터 페이지에 표시되고 상태가 '실행 중'으로 업데이트됩니다.

클러스터 이름을 클릭하여 클러스터의 세부정보 페이지를 엽니다. 이 페이지에는 CPU 사용률 그래프가 선택된 개요 탭이 열립니다. 클러스터의 네트워크 및 디스크 그래프를 표시하도록 선택할 수도 있습니다.

클러스터의 작업, 인스턴스, 구성 설정은 다른 탭에서 검토할 수 있습니다. 예를 들어 VM 인스턴스 탭을 사용하면 클러스터의 마스터 노드에 SSH로 연결할 수 있습니다. 구성 탭에서 수정을 클릭하면 클러스터의 설정을 수정할 수 있습니다. 예를 들어 클러스터에서 표준 또는 선점형 작업자 노드의 수를 변경하여 클러스터를 확장하거나 축소할 수 있습니다.

Go

  1. 클라이언트 라이브러리 설치
  2. 애플리케이션 기본 사용자 인증 정보 설정
  3. 코드 실행
    import (
    	"context"
    	"fmt"
    	"io"
    
    	dataproc "cloud.google.com/go/dataproc/apiv1"
    	"google.golang.org/api/option"
    	dataprocpb "google.golang.org/genproto/googleapis/cloud/dataproc/v1"
    )
    
    func createCluster(w io.Writer, projectID, region, clusterName string) error {
    	// projectID := "your-project-id"
    	// region := "us-central1"
    	// clusterName := "your-cluster"
    	ctx := context.Background()
    
    	// Create the cluster client.
    	endpoint := region + "-dataproc.googleapis.com:443"
    	clusterClient, err := dataproc.NewClusterControllerClient(ctx, option.WithEndpoint(endpoint))
    	if err != nil {
    		return fmt.Errorf("dataproc.NewClusterControllerClient: %v", err)
    	}
    
    	// Create the cluster config.
    	req := &dataprocpb.CreateClusterRequest{
    		ProjectId: projectID,
    		Region:    region,
    		Cluster: &dataprocpb.Cluster{
    			ProjectId:   projectID,
    			ClusterName: clusterName,
    			Config: &dataprocpb.ClusterConfig{
    				MasterConfig: &dataprocpb.InstanceGroupConfig{
    					NumInstances:   1,
    					MachineTypeUri: "n1-standard-1",
    				},
    				WorkerConfig: &dataprocpb.InstanceGroupConfig{
    					NumInstances:   2,
    					MachineTypeUri: "n1-standard-1",
    				},
    			},
    		},
    	}
    
    	// Create the cluster.
    	op, err := clusterClient.CreateCluster(ctx, req)
    	if err != nil {
    		return fmt.Errorf("CreateCluster: %v", err)
    	}
    
    	resp, err := op.Wait(ctx)
    	if err != nil {
    		return fmt.Errorf("CreateCluster.Wait: %v", err)
    	}
    
    	// Output a success message.
    	fmt.Fprintf(w, "Cluster created successfully: %s", resp.ClusterName)
    	return nil
    }
    

자바

  1. 클라이언트 라이브러리 설치
  2. 애플리케이션 기본 사용자 인증 정보 설정
  3. 코드 실행
    import com.google.api.gax.longrunning.OperationFuture;
    import com.google.cloud.dataproc.v1.Cluster;
    import com.google.cloud.dataproc.v1.ClusterConfig;
    import com.google.cloud.dataproc.v1.ClusterControllerClient;
    import com.google.cloud.dataproc.v1.ClusterControllerSettings;
    import com.google.cloud.dataproc.v1.ClusterOperationMetadata;
    import com.google.cloud.dataproc.v1.InstanceGroupConfig;
    import java.io.IOException;
    import java.util.concurrent.ExecutionException;
    
    public class CreateCluster {
    
      public static void createCluster() throws IOException, InterruptedException {
        // TODO(developer): Replace these variables before running the sample.
        String projectId = "your-project-id";
        String region = "your-project-region";
        String clusterName = "your-cluster-name";
        createCluster(projectId, region, clusterName);
      }
    
      public static void createCluster(String projectId, String region, String clusterName)
          throws IOException, InterruptedException {
        String myEndpoint = String.format("%s-dataproc.googleapis.com:443", region);
    
        // Configure the settings for the cluster controller client.
        ClusterControllerSettings clusterControllerSettings =
            ClusterControllerSettings.newBuilder().setEndpoint(myEndpoint).build();
    
        // Create a cluster controller client with the configured settings. The client only needs to be
        // created once and can be reused for multiple requests. Using a try-with-resources
        // closes the client, but this can also be done manually with the .close() method.
        try (ClusterControllerClient clusterControllerClient =
            ClusterControllerClient.create(clusterControllerSettings)) {
          // Configure the settings for our cluster.
          InstanceGroupConfig masterConfig =
              InstanceGroupConfig.newBuilder()
                  .setMachineTypeUri("n1-standard-1")
                  .setNumInstances(1)
                  .build();
          InstanceGroupConfig workerConfig =
              InstanceGroupConfig.newBuilder()
                  .setMachineTypeUri("n1-standard-1")
                  .setNumInstances(2)
                  .build();
          ClusterConfig clusterConfig =
              ClusterConfig.newBuilder()
                  .setMasterConfig(masterConfig)
                  .setWorkerConfig(workerConfig)
                  .build();
          // Create the cluster object with the desired cluster config.
          Cluster cluster =
              Cluster.newBuilder().setClusterName(clusterName).setConfig(clusterConfig).build();
    
          // Create the Cloud Dataproc cluster.
          OperationFuture<Cluster, ClusterOperationMetadata> createClusterAsyncRequest =
              clusterControllerClient.createClusterAsync(projectId, region, cluster);
          Cluster response = createClusterAsyncRequest.get();
    
          // Print out a success message.
          System.out.printf("Cluster created successfully: %s", response.getClusterName());
    
        } catch (ExecutionException e) {
          System.err.println(String.format("Error executing createCluster: %s ", e.getMessage()));
        }
      }
    }

Node.js

  1. 클라이언트 라이브러리 설치
  2. 애플리케이션 기본 사용자 인증 정보 설정
  3. 코드 실행
const dataproc = require('@google-cloud/dataproc');

// TODO(developer): Uncomment and set the following variables
// projectId = 'YOUR_PROJECT_ID'
// region = 'YOUR_CLUSTER_REGION'
// clusterName = 'YOUR_CLUSTER_NAME'

// Create a client with the endpoint set to the desired cluster region
const client = new dataproc.v1.ClusterControllerClient({
  apiEndpoint: `${region}-dataproc.googleapis.com`,
  projectId: projectId,
});

async function createCluster() {
  // Create the cluster config
  const request = {
    projectId: projectId,
    region: region,
    cluster: {
      clusterName: clusterName,
      config: {
        masterConfig: {
          numInstances: 1,
          machineTypeUri: 'n1-standard-1',
        },
        workerConfig: {
          numInstances: 2,
          machineTypeUri: 'n1-standard-1',
        },
      },
    },
  };

  // Create the cluster
  const [operation] = await client.createCluster(request);
  const [response] = await operation.promise();

  // Output a success message
  console.log(`Cluster created successfully: ${response.clusterName}`);

Python

  1. 클라이언트 라이브러리 설치
  2. 애플리케이션 기본 사용자 인증 정보 설정
  3. 코드 실행
    from google.cloud import dataproc_v1 as dataproc
    
    def create_cluster(project_id, region, cluster_name):
        """This sample walks a user through creating a Cloud Dataproc cluster
           using the Python client library.
    
           Args:
               project_id (string): Project to use for creating resources.
               region (string): Region where the resources should live.
               cluster_name (string): Name to use for creating a cluster.
        """
    
        # Create a client with the endpoint set to the desired cluster region.
        cluster_client = dataproc.ClusterControllerClient(
            client_options={"api_endpoint": f"{region}-dataproc.googleapis.com:443"}
        )
    
        # Create the cluster config.
        cluster = {
            "project_id": project_id,
            "cluster_name": cluster_name,
            "config": {
                "master_config": {"num_instances": 1, "machine_type_uri": "n1-standard-1"},
                "worker_config": {"num_instances": 2, "machine_type_uri": "n1-standard-1"},
            },
        }
    
        # Create the cluster.
        operation = cluster_client.create_cluster(
            request={"project_id": project_id, "region": region, "cluster": cluster}
        )
        result = operation.result()
    
        # Output a success message.
        print(f"Cluster created successfully: {result.cluster_name}")