クラスタの作成

Dataproc クラスタは、Cloud SDK gcloud コマンドライン ツール、Dataproc API、または Google Cloud Console を使用して作成できます。また、Cloud クライアント ライブラリを使用して、クラスタをプログラムで作成することもできます。

クラスタ名: クラスタは小文字で始まり、最大 54 文字の小文字、数字、ハイフンで構成します。末尾にハイフンは置けません。

クラスタ リージョン: クラスタに対して、global リージョンや特定のリージョンを指定できます。グローバル リージョンとは、ユーザー指定の Compute Engine ゾーンにインスタンスをデプロイできる、特別なマルチリージョンのエンドポイントのことです。また、異なったリージョン(us-east1europe-west1 など)を複数指定することで、Dataproc によって利用されるリソース(VM インスタンス、Google Cloud Storage など)とメタデータの保存場所を、ユーザーが指定したリージョンに分離することもできます。グローバル エンドポイントとリージョン エンドポイントの違いについては、リージョン エンドポイントをご覧ください。リージョンの選択については、利用可能なリージョンとゾーンをご覧ください。gcloud compute regions list コマンドを実行して、利用可能なリージョンのリストを表示することもできます。

Dataproc クラスタ内の Compute Engine 仮想マシン インスタンス(VM)は、マスター VM とワーカー VM で構成され、相互に対する完全な内部 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 ...""
    ]
  }
}

Console

ブラウザで Cloud Console から Dataproc の [クラスタの作成] ページを開きます。デフォルト値がフィールドに入力されている [クラスタの設定] パネルが選択されています。各パネルを選択し、デフォルト値を確認するか、変更してクラスタをカスタマイズします。

[作成] をクリックしてクラスタを作成します。クラスタ名が [クラスタ] ページに表示され、クラスタがプロビジョニングされると、そのステータスは [実行中] に更新されます。クラスタ名をクリックするとクラスタ詳細ページが開き、クラスタのジョブ、インスタンス、構成設定を確認して、クラスタで実行されているウェブ インターフェースに接続できます。

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)
    	}
    	defer clusterClient.Close()
    
    	// 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-2",
    				},
    				WorkerConfig: &dataprocpb.InstanceGroupConfig{
    					NumInstances:   2,
    					MachineTypeUri: "n1-standard-2",
    				},
    			},
    		},
    	}
    
    	// 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
    }
    

Java

  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-2")
                  .setNumInstances(1)
                  .build();
          InstanceGroupConfig workerConfig =
              InstanceGroupConfig.newBuilder()
                  .setMachineTypeUri("n1-standard-2")
                  .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-2',
        },
        workerConfig: {
          numInstances: 2,
          machineTypeUri: 'n1-standard-2',
        },
      },
    },
  };

  // 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-2"},
                "worker_config": {"num_instances": 2, "machine_type_uri": "n1-standard-2"},
            },
        }
    
        # 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}")