Cloud Dataproc でのマネージド Hadoop/Spark クラスタのプロビジョニングと使用(コマンドライン)

1. 概要

Cloud Dataproc は、オープンソースのデータツールを利用してバッチ処理、クエリ実行、ストリーミング、機械学習を行えるマネージド Spark / Hadoop サービスです。Cloud Dataproc の自動化機能を利用すると、クラスタを速やかに作成し、簡単に管理し、必要ないときには無効にして費用を節約できます。管理にかかる時間と費用が削減されるので、自分の仕事とデータに集中できます。

このチュートリアルは、https://cloud.google.com/dataproc/overview を基に作成されています。

学習内容

  • マネージド Cloud Dataproc クラスタを作成する方法(Apache Spark がプリインストール済み
  • Spark ジョブを送信する方法
  • クラスタのサイズ変更の方法
  • Dataproc クラスタのマスターノードに SSH で接続する方法
  • gcloud を使用してクラスタ、ジョブ、ファイアウォール ルールを調べる方法
  • クラスタをシャットダウンする方法

必要なもの

このチュートリアルをどのように使用しますか?

通読するのみ 通読し、演習を行う

Google Cloud Platform サービスのご利用経験についてどのように評価されますか?

<ph type="x-smartling-placeholder"></ph> 初心者 中級 上達 をご覧ください。

2. 設定と要件

セルフペース型の環境設定

  1. Cloud Console にログインし、新しいプロジェクトを作成するか、既存のプロジェクトを再利用します(Gmail アカウントまたは G Suite アカウントをお持ちでない場合は、アカウントを作成する必要があります)。

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

プロジェクト ID を忘れないようにしてください。プロジェクト ID はすべての Google Cloud プロジェクトを通じて一意の名前にする必要があります(上記の名前はすでに使用されているので使用できません)。以降、このコードラボでは PROJECT_ID と呼びます。

  1. 次に、Google Cloud リソースを使用するために、Cloud Console で課金を有効にする必要があります。

このコードラボを実行しても、費用はほとんどかからないはずです。このチュートリアル以外で請求が発生しないように、リソースのシャットダウン方法を説明する「クリーンアップ」セクションの手順に従うようにしてください。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。

3. Cloud Dataproc API と Google Compute Engine API を有効にする

画面の左上にあるメニュー アイコンをクリックします。

2bfc27ef9ba2ec7d.png

プルダウンから [API Manager] を選択します。

408af5f32c4b7c25.png

[API とサービスの有効化] をクリックします。

a9c0e84296a7ba5b.png

「Compute Engine」を検索します。」と入力します。[Google Compute Engine API] をクリックします。結果のリストに表示されます。

b6adf859758d76b3.png

[Google Compute Engine] ページで [有効にする] をクリックします。

da5584a1cbc77104.png

有効になったら、左の矢印をクリックして戻ります。

「Google Cloud Dataproc API」を検索します。有効にする必要があります

f782195d8e3d732a.png

4. Cloud Shell を起動する

この Debian ベースの仮想マシンには、必要な開発ツールがすべて揃っています。永続的なホーム ディレクトリが 5 GB 用意されており、Google Cloud で稼働するため、ネットワークのパフォーマンスと認証が大幅に向上しています。つまり、この Codelab に必要なのはブラウザだけです(はい、Chromebook で動作します)。

  1. Cloud Console から Cloud Shell を有効にするには、[Cloud Shell をアクティブにする] fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7zSwz7p6ItNgx4tXqQjag7BfWPcZN5kP-X3Q をクリックします(環境のプロビジョニングと接続に若干時間を要します)。

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

Screen Shot 2017-06-14 at 10.13.43 PM.png

Cloud Shell に接続すると、すでに認証は完了しており、プロジェクトに各自の PROJECT_ID が設定されていることがわかります。

gcloud auth list

コマンド出力

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

コマンド出力

[core]
project = <PROJECT_ID>

なんらかの理由でプロジェクトが設定されていない場合は、次のコマンドを実行します。

gcloud config set project <PROJECT_ID>

PROJECT_ID が見つからない場合は、設定手順で使用した ID を確認するか、Cloud コンソール ダッシュボードで確認します。

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

Cloud Shell では、デフォルトで環境変数もいくつか設定されます。これらの変数は、以降のコマンドを実行する際に有用なものです。

echo $GOOGLE_CLOUD_PROJECT

コマンド出力

<PROJECT_ID>
  1. 最後に、デフォルトのゾーンとプロジェクト構成を設定します。
gcloud config set compute/zone us-central1-f

さまざまなゾーンを選択できます。詳しくは、リージョンとゾーン

5. Cloud Dataproc クラスタを作成する

Cloud Shell が起動したら、コマンドラインを使用して、Cloud SDK gcloud コマンドや、仮想マシン インスタンスで利用可能なその他のツールを呼び出すことができます。

このラボで使用するクラスタ名を選択します。

$ CLUSTERNAME=${USER}-dplab

まず、新しいクラスタを作成します。

$ gcloud dataproc clusters create ${CLUSTERNAME} \
  --region=us-central1 \
  --scopes=cloud-platform \
  --tags codelab \
  --zone=us-central1-c

このチュートリアルでは、2 つのワーカーノードを含むデフォルトのクラスタ設定で十分です。上記のコマンドには、クラスタが作成される地理的ゾーンを指定する --zone オプションと、--scopes--tags の 2 つの詳細オプションが含まれています。これらのオプションは、有効にする機能を使用する場合に以下で説明します。コマンドライン フラグを使用してクラスタ設定をカスタマイズする方法については、Cloud SDK の gcloud dataproc clusters create コマンドをご覧ください。

6. Spark ジョブをクラスタに送信する

ジョブは、Cloud Dataproc API の jobs.submit リクエスト、gcloud コマンドライン ツール、Google Cloud Platform コンソールから送信できます。SSH を使用してクラスタ内のマシン インスタンスに接続し、インスタンスからジョブを実行することもできます。

Cloud Shell コマンドラインから gcloud ツールを使用してジョブを送信しましょう。

$ gcloud dataproc jobs submit spark --cluster ${CLUSTERNAME} \
  --class org.apache.spark.examples.SparkPi \
  --jars file:///usr/lib/spark/examples/jars/spark-examples.jar -- 1000

ジョブが実行されると、Cloud Shell ウィンドウに出力が表示されます。

出力を中断するには、Ctrl+C キーを押します。これにより gcloud コマンドは停止しますが、ジョブは引き続き Dataproc クラスタで実行されます。

7. ジョブの一覧表示と再接続

ジョブのリストを出力します。

$ gcloud dataproc jobs list --cluster ${CLUSTERNAME}

最後に送信されたジョブがリストの一番上に表示されます。ジョブ ID をコピーして「jobId」の部分に貼り付けます使用します。このコマンドは、指定したジョブに再接続し、その出力を表示します。

$ gcloud dataproc jobs wait jobId

ジョブが終了すると、円周率の近似値が出力に含まれます。

493928df54f61386.png

8. クラスタのサイズを変更

大規模な計算を実行する場合は、高速化するためにクラスタにノードを追加することをおすすめします。Dataproc を使用すると、いつでもクラスタに対してノードを追加したり、クラスタからノードを削除したりできます。

クラスタ構成を確認します。

$ gcloud dataproc clusters describe ${CLUSTERNAME}

プリエンプティブル ノードをいくつか追加して、クラスタを大きくします。

$ gcloud dataproc clusters update ${CLUSTERNAME} --num-secondary-workers=2

クラスタを再度確認します。

$ gcloud dataproc clusters describe ${CLUSTERNAME}

元のクラスタ記述の workerConfig に加えて、プリエンプティブル ワーカー用の 2 つの instanceNames を含む secondaryWorkerConfig もあります。新しいノードの起動中は、Dataproc でクラスタのステータスが準備完了と表示されます。

最初は 2 つのノードから 4 つになったので、Spark ジョブの実行速度は約 2 倍になります。

9. クラスタへの SSH 接続

SSH 経由でマスターノードに接続します。このマスターノードのインスタンス名は常にクラスタ名に -m が追加されたものになります。

$ gcloud compute ssh ${CLUSTERNAME}-m --zone=us-central1-c

Cloud Shell で初めて ssh コマンドを実行すると、Cloud Shell でアカウントの SSH 認証鍵が生成されます。パスフレーズを選択するか、まずは空白のパスフレーズを使用し、必要に応じて ssh-keygen を使用して後で変更することができます。

インスタンスで、ホスト名を確認します。

$ hostname

クラスタの作成時に --scopes=cloud-platform を指定したため、クラスタで gcloud コマンドを実行できます。プロジェクト内のクラスタを一覧表示します。

$ gcloud dataproc clusters list

完了したら、SSH 接続からログアウトします。

$ logout

10. タグを調べる

クラスタの作成時に --tags オプションを含めて、クラスタ内の各ノードにタグを追加しました。タグは、ファイアウォール ルールを各ノードに適用するために使用されます。この Codelab では一致するファイアウォール ルールを作成しませんでしたが、ノードのタグとネットワーク上のファイアウォール ルールを確認することはできます。

マスターノードの説明を出力します。

$ gcloud compute instances describe ${CLUSTERNAME}-m --zone us-central1-c

出力の末尾付近で tags: を探し、codelab が含まれていることを確認します。

ファイアウォール ルールを出力します。

$ gcloud compute firewall-rules list

SRC_TAGS 列と TARGET_TAGS 列に注意してください。ファイアウォール ルールにタグを適用すると、そのタグを持つすべてのノードでタグを使用するように指定できます。

11. クラスタをシャットダウンする

クラスタをシャットダウンするには、Cloud Dataproc API の clusters.delete リクエスト、コマンドラインの gcloud dataproc clusters delete 実行可能ファイル、Google Cloud Platform コンソールを使用します。

Cloud Shell コマンドラインを使用してクラスタをシャットダウンします。

$ gcloud dataproc clusters delete ${CLUSTERNAME} --region us-central1

12. 完了

Dataproc クラスタの作成、Spark ジョブの送信、クラスタのサイズ変更、SSH を使用したマスターノードへのログイン、gcloud を使用したクラスタ、ジョブ、ファイアウォール ルールの検証、gcloud を使用したクラスタのシャットダウンを行う方法を学びました。

詳細

ライセンス

このソフトウェアは、クリエイティブ・コモンズの表示 3.0 汎用ライセンス、および Apache 2.0 ライセンスにより使用許諾されています。