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

1. 概要

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

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

学習内容

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

必要なもの

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

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

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

初心者 中級者 上級者

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 ベースの仮想マシンには、必要な開発ツールがすべて用意されています。仮想マシンは Google Cloud で稼働し、永続的なホーム ディレクトリが 5 GB 用意されているため、ネットワークのパフォーマンスと認証が大幅に向上しています。つまり、この 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 Console ダッシュボードで検索します。

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 オプションと、2 つの詳細オプション --scopes--tags が含まれています。これらのオプションが有効にする機能については、以下で説明します。コマンドライン フラグを使用したクラスタ設定のカスタマイズについては、Cloud SDK の gcloud dataproc clusters create コマンドをご覧ください。

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

ジョブは、Cloud Dataproc API の jobs.submit リクエスト、gcloud コマンドライン ツール、または Google Cloud Platform Console から送信できます。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 接続する

インスタンス名が常にクラスタ名に -m が付加されたマスターノードに SSH で接続します。

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

Cloud Shell で ssh コマンドを初めて実行すると、アカウントの 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 Console からシャットダウンできます。

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

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

12. 完了

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

詳細

ライセンス

この作品は、クリエイティブ・コモンズの表示 3.0 汎用ライセンスと Apache 2.0 ライセンスにより使用許諾されています。