始める前に
まだ設定していない場合は、Google Cloud プロジェクトと 2 つの Cloud Storage バケットを設定します。
プロジェクトを設定する
- Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Dataproc, Compute Engine, Cloud Storage, and Cloud Functions API を有効にします。
- Google Cloud CLI をインストールします。
-
gcloud CLI を初期化するには:
gcloud init
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Dataproc, Compute Engine, Cloud Storage, and Cloud Functions API を有効にします。
- Google Cloud CLI をインストールします。
-
gcloud CLI を初期化するには:
gcloud init
プロジェクトで 2 つの Cloud Storage バケットを作成または使用する
プロジェクトには、入力ファイル用と出力ファイル用の 2 つの Cloud Storage バケットが必要です。
- Google Cloud コンソールで、Cloud Storage の [バケット] ページに移動します。
- [バケットを作成] をクリックします。
- [バケットの作成] ページでユーザーのバケット情報を入力します。次のステップに進むには、[続行] をクリックします。
- [作成] をクリックします。
ワークフロー テンプレートを作成する
ローカル ターミナルウィンドウまたは Cloud Shell で以下に表示されているコマンドをコピーして実行し、ワークフロー テンプレートを作成して定義します。
注:
- このコマンドでは、「us-central1」リージョンを指定しています。以前に
gcloud config set compute/region
を実行してリージョン プロパティを設定した場合は、別のリージョンを指定するか、--region
フラグを削除できます。 - 「-- 」(ダッシュ、ダッシュ、スペース)シーケンスは、jar ファイルに引数を渡します。
wordcount input_bucket output_dir
コマンドは、Cloud Storageinput_bucket
に含まれるテキスト ファイルに対して、jar のワードカウント アプリケーションを実行し、ワードカウント ファイルをoutput_bucket
に出力します。関数でこの引数を指定できるように、ワードカウントの入力バケット引数をパラメータ化します。
- ワークフロー テンプレートを作成します。
gcloud dataproc workflow-templates create wordcount-template \ --region=us-central1
- ワードカウント ジョブをワークフロー テンプレートに追加します。
-
コマンドを実行する前に output-bucket-name を指定します(関数は入力バケットを提供します)。出力バケット名を挿入すると、出力バケット引数は
gs://your-output-bucket/wordcount-output"
のようになります。 - 「count」ステップ ID は必須です。追加された Hadoop ジョブを識別します。
gcloud dataproc workflow-templates add-job hadoop \ --workflow-template=wordcount-template \ --step-id=count \ --jar=file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar \ --region=us-central1 \ -- wordcount gs://input-bucket gs://output-bucket-name/wordcount-output
-
コマンドを実行する前に output-bucket-name を指定します(関数は入力バケットを提供します)。出力バケット名を挿入すると、出力バケット引数は
- ワークフローを実行するには、マネージドの単一ノードクラスタを使用します。Dataproc によってクラスタが作成され、ワークフローがクラスタ上で実行され、ワークフローの完了時にクラスタが削除されます。
gcloud dataproc workflow-templates set-managed-cluster wordcount-template \ --cluster-name=wordcount \ --single-node \ --region=us-central1
- Google Cloud コンソールの [Dataproc ワークフロー] ページで
wordcount-template
名をクリックし、[ワークフロー テンプレートの詳細] ページを開きます。「wordcount-template」属性を確認します。
ワークフロー テンプレートをパラメータ化する
ワークフロー テンプレートに渡す入力バケット変数をパラメータ化します。
- パラメータ化のために、ワークフロー テンプレートを
wordcount.yaml
テキスト ファイルにエクスポートします。gcloud dataproc workflow-templates export wordcount-template \ --destination=wordcount.yaml \ --region=us-central1
- テキスト エディタを使用して
wordcount.yaml
を開き、ワークフローがトリガーされた際に、ワードカウント バイナリにargs[1]
として Cloud Storage の INPUT_BUCKET_URI が渡されるようにするため、YAML ファイルの末尾にparameters
ブロックを追加します。エクスポートされた YAML ファイルの例を以下に示します。テンプレートを更新する方法は次の 2 つがあります。このうちの 1 つを選びます。
- your-output_bucket を出力バケット名に置き換えたあと、エクスポートした
wordcount.yaml
を置き換えるため、ファイル全体をコピーして貼り付けます。 - エクスポートした
wordcount.yaml
ファイルの末尾に、parameters
セクションのみをコピーして貼り付けます。
jobs: - hadoopJob: args: - wordcount - gs://input-bucket - gs://your-output-bucket/wordcount-output mainJarFileUri: file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar stepId: count placement: managedCluster: clusterName: wordcount config: softwareConfig: properties: dataproc:dataproc.allow.zero.workers: 'true' parameters: - name: INPUT_BUCKET_URI description: wordcount input bucket URI fields: - jobs['count'].hadoopJob.args[1]
- your-output_bucket を出力バケット名に置き換えたあと、エクスポートした
- パラメータ化された
wordcount.yaml
テキスト ファイルをインポートします。テンプレートを上書きするように求められたら、「Y」(Yes の Y)を入力します。gcloud dataproc workflow-templates import wordcount-template \ --source=wordcount.yaml \ --region=us-central1
関数を作成する
Google Cloud コンソールで [Cloud Functions] ページを開き、[関数の作成] をクリックします。
[関数の作成] ページで、次の情報を入力または選択します。
- [名前]: wordcount
- [メモリ割り当て]: デフォルトの選択のままにします。
- [トリガー]:
- クラウド ストレージ
- [イベント タイプ]: 確定 / 作成
- [バケット]: 入力バケットを選択します(プロジェクトで Cloud Storage バケットを作成するを参照)。このバケットにファイルが追加されると、この関数はワークフローをトリガーします。ワークフローでワードカウント アプリケーションが実行され、バケット内のすべてのテキスト ファイルが処理されます。
ソースコード:
- インライン エディタ
- [ランタイム]: Node.js 8
- [
INDEX.JS
タブ]: デフォルトのコード スニペットを、次のコードに置き換えます。そして、-your-project-id-(先頭または末尾に「-」がないもの)を指定するようにconst projectId
行を編集します。
const dataproc = require('@google-cloud/dataproc').v1; exports.startWorkflow = (data) => { const projectId = '-your-project-id-' const region = 'us-central1' const workflowTemplate = 'wordcount-template' const client = new dataproc.WorkflowTemplateServiceClient({ apiEndpoint: `${region}-dataproc.googleapis.com`, }); const file = data; console.log("Event: ", file); const inputBucketUri = `gs://${file.bucket}/${file.name}`; const request = { name: client.projectRegionWorkflowTemplatePath(projectId, region, workflowTemplate), parameters: {"INPUT_BUCKET_URI": inputBucketUri} }; client.instantiateWorkflowTemplate(request) .then(responses => { console.log("Launched Dataproc Workflow:", responses[1]); }) .catch(err => { console.error(err); }); };
- [
PACKAGE.JSON
タブ]: デフォルトのコード スニペットを、次のコードに置き換えます。
{ "name": "dataproc-workflow", "version": "1.0.0", "dependencies":{ "@google-cloud/dataproc": ">=1.0.0"} }
- 実行する関数: 「startWorkflow」を挿入します。
[作成] をクリックします。
関数をテストする
公開ファイル
rose.txt
をバケットにコピーして、関数をトリガーします。コマンドに your-input-bucket-name(関数のトリガーに使用されるバケット)を挿入します。gsutil cp gs://pub/shakespeare/rose.txt gs://your-input-bucket-name
30 秒待ってから、次のコマンドを実行して関数が正常に完了したことを確認します。
gcloud functions logs read wordcount
... Function execution took 1348 ms, finished with status: 'ok'
Google Cloud コンソールの [関数リスト] ページから関数ログを表示するには、
wordcount
関数名をクリックし、[関数の詳細] ページで [ログを表示] をクリックします。出力バケットの
wordcount-output
フォルダは、Google Cloud コンソールの [ストレージ ブラウザ] ページから表示できます。ワークフローが完了すると、ジョブの詳細は Google Cloud コンソールに残ります。Dataproc の [ジョブ] ページに表示されている
count...
ジョブをクリックして、ワークフロー ジョブの詳細を表示します。
クリーンアップ
このチュートリアルのワークフローでは、ワークフローが完了するとマネージド クラスタが削除されます。繰り返し費用が発生しないようにするには、このチュートリアルに関連する他のリソースを削除します。
プロジェクトの削除
- Google Cloud コンソールで、[リソースの管理] ページに移動します。
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。
Cloud Storage バケットの削除
- Google Cloud コンソールで、Cloud Storage の [ブラウザ] ページに移動します。
- 削除するバケットのチェックボックスをクリックします。
- バケットを削除するには、 [削除] をクリックして、指示に沿って操作します。
ワークフロー テンプレートの削除
gcloud dataproc workflow-templates delete wordcount-template \ --region=us-central1
Cloud Functions の関数の削除
Google Cloud コンソールで Cloud Functions ページを開き、wordcount
関数の左側にあるボックスを選択して、[削除] をクリックします。
次のステップ