クラスタの作成

Dataproc クラスタは、Dataproc API の clusters.create HTTP リクエストまたはプログラム リクエストを使用して作成するか、ローカル ターミナル ウィンドウや Cloud Shell で Cloud SDK gcloud コマンドライン ツールを使用して作成するか、ローカル ブラウザで開いた Google Cloud Console から作成できます。Cloud クライアント ライブラリの使用や、API リクエストを使用してクラスタをプログラムで作成することもできます。

クラスタ リージョン: クラスタに対して、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 ...""
    ]
  }
}

コンソール

ブラウザで Cloud Console から Dataproc の [クラスタの作成] ページを開きます。

上のスクリーンショットでは、[クラスタの作成] ページで、デフォルトのフィールドには新しい「cluster-1」クラスタの値が自動的に入力されています。 [詳細オプション] パネルを展開して、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
    }
    

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-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(project_id, region, cluster)
        result = operation.result()
    
        # Output a success message.
        print(f'Cluster created successfully: {result.cluster_name}')