case-kの備忘録

備忘録です。GCPやデータ分析系のことを呟きます。

【GCP入門】Google Cloud Dataprocで環境構築してみる

今回はGoogle Cloud Dataprocで環境構築をしてみました。Dataproc入門者を対象に記事を書きたいと思います。

本記事の目的

Google Cloud Dataprocの概要やメリットを理解すること
・概念だけではなく環境を自分で構築できるようにすること

Google Cloud Dataprocとは

Dataprocは、HadoopとSaprk のマネージド サービスです。
大規模なデータ分析したいけれども、大規模データを扱うHadoopやSparkの構築が大変。。。挫折。
そんな悩みを抱えたデータサイエンティストを救う、数分で環境構築する方法があります。それが!GCPのDataprocです。
Dataprocは、HadoopやSparkを使った大規模データを取り扱うための環境構築をより簡単に行うために作られました。
環境構築が簡単にできるので、データサイエンティストは分析作業に注力することができます。クラスタを作成するためのマネージド サービスであり、構築したクラスタは、Hadoop やSpark アプリケーションの実行に使用でき、データの解析を行う事が可能です。AWSで言う所のEMRに該当します。

※ Hadoop とは
Google の開発したオープンソースのデータ解析基盤です。
詳細は別途記事を書きたいと思います。

※ Spark とは
Hadoopがデータを分散ファイルシステムである HDFS に置く代わりに、
分散したメモリ上に置かれた分散データセット ( RDD ) の上に置くことで、データ解析にかかる時間を飛躍的に向上させたソフトウェアです。
こちらも詳細は別途記事を書きたいと思います。

※ EMRとは
Hadoopクラスタを自動生成するサービスです。
詳細は別途記事を書きたいと思います。

Dataprocメリット・デメリット

Dataprocのメリットとデメリットをまとめてみました。

メリット
[1] クラスタ管理[作成・削除]が簡単
冒頭で述べたようにHadoop や Spark のクラスタを設定するには、ネットワークの設定やサーバーの設定など環境を作るのに時間がかかりますが、Dataprocであれば数分でできます。環境構築に時間を割くことなく、データサイエンティストが本当に時間を割きたい分析作業に注力できるのが最大のメリットだと思います。

[2] 料金:
Google の分単位の課金制度を利用すれば、最低限のコストでジョブを実行可能です。
クラスタの実行中に使用したリソースだけ課金され、初期費用は不要です。

デメリット
[1]  Google Cloud Dataflowより機能不足
Dataflowってなんだよ?って感じだと思いますが簡単に言うと、Dataprocの強化版です。バッチ処理とストリーム処理を同じように管理できたり、ワークフローベースでコードがかけたりと優れています。デメリットとしては環境を数分で構築!とはいかないです。
データサイエンティストといっても、システムのアーキテクチャを考える開発よりの「エンジニア」と、開発はしないけどSQLやjupyterを使ったビジネスよりの「アナリスト」に分けられると思います。サービスの要件にもよりますが、開発よりはDataflow、分析よりはDataprocで環境を構築するのが望ましいと思います。

クラスタ構築

実際にDataprocのクラスタを構築したいと思います。

手順1. コンソールに移動
https://console.cloud.google.com/

※ 初めての方は無料のトライアルをお試し下さい。
※ プロジェクトにユーザーを追加して下さい。
https://cloud.google.com/compute/docs/access/add-remove-change-permissions-for-team-members?hl=ja&authuser=1


手順2. クラスタの作成と設定
ウェブコンソール左上にある、「Dataproc」を選択し、「クラスタ作成」ボタンをクリックしてください。
小さなクラスタを作成したいと思いますので以下の設定でクラスタを作成して下さい。

※ もし、以下のようなメッセージがでた場合は、プロジェクトにユーザを追加して下さい。
「このプロジェクト内のクラスタを一覧表示する権限がありません。プロジェクトのオーナーに問い合わせて、「dataproc.clusters.list」権限を付与するよう依頼してください。」
※ API の有効かを促された場合は「有効」にして下さい。

クラスタ名:my-first-cluster
ゾーン:us-central1-a
マシンタイプ[マスターノード]:n1-standard1(1vCPU, 3.75GB memory)
マスターノードのメインディスクのサイズ:10 GB
マシンタイプ[ワーカーノード]:n1-standard1(1vCPU, 3.75GB memory)
ワーカーノード数:デフォルトの 2 
ワーカーノードメインディスクのサイズ:10 GB。

用語について簡単に説明します。
ゾーン
ゾーンとはリージョン[地域内 ex 東京]の分離された場所のことです。
asia-northeast1(東京)リージョンは以下のゾーンがあります。
・asia-northeast1-a
・asia-northeast1-b
・asia-northeast1-c
クラスタ
複数のノード[サーバ]を束ねたサーバ群のことを指しています。
以下の記事にあるようなスケールアウト型のサーバをイメージして頂けると理解しやすいと思います。
case-k.hatenablog.com

ノード
クラスタを構成している一つ一つのサーバのことです。
マスターノード
HDFSメタデータ、リソースなどクラスターの管理を担っているサーバです。
ワーカーノード
HDFS のファイルストレージやデータの処理を実際に行う機能を担っています。

手順3. クラスタ マスターに SSH でアクセス
先ほど作成したクラスタに緑のチェックが表示されたら、クラスタ名をクリックします。
f:id:casekblog:20180905235200p:plain
そうするとクラスタの詳細ページが表示されるかと思います。
ここで「VMインスタンス」タブを選択して下さい。
f:id:casekblog:20180905235404p:plain
手順4. SSH接続
クラスタが作成できたのでSSH接続でクラスタにアクセスしたいと思います。
[SSH] ボタンをクリックして、そのマシンに接続します。


手順5. クラスタのセキュリティ管理
IPアドレスの制限をかけたいと思います。IPアドレスの制限をかけることで
外部から不正にアクセスするのを防ぎます。
Dataprocは分析するための環境ですので自分のローカルPCからのみアクセスできるようにしたいと思います。
まず、ローカルPCが接続しているグローバルIPアドレスを調べます。

http://ip4.me/


左側のナビゲーションパネルより、「VPC Network」の「ファイアウォール ルール」をクリックして下さい。
ファイアウォールを作成」を選択し以下の設定をして下さい。

ルール名:my-first-data-proc-access
ターゲット:ネットワーク上のすべてのインスタンス
ソースフィルタ:「IP範囲」を選択
ソース IP の範囲:IPアドレス/32
[先ほど調べたローカルPCのIP アドレスを入力し、末尾に /32 を追加します]
プロトコルとポート:tcp:8088;tcp:9870;tcp:8080

※ この後、TCP ポート 8088(Hadoop)、9870(HDFS)、8080(Datalab)へアクセスできるようになります。

手順6. 作成したクラスタを確認
作成したクラスタのIPとポートを確認し、実際にブラウザで確認したいと思います。
「Dataproc」クラスタをクリックします。「VM インスタンス」をクリックし、マスターノードをクリックすると作成したクラスタの詳細を確認する事ができます。下にスクロールしてマスターノードの外部 IP アドレスを確認し、クリップボードにコピーして下さい。
アクセスする際に先ほど設定したポート番号も付与して下さい。

Hadoop
http://??????????:8088

f:id:casekblog:20180905235458p:plain

HadoopHDFS のブラウザタブが確認されます。
http://??????????:9870
f:id:casekblog:20180905235751p:plain

無事クラスタを作成する事ができました。本当にあっという間ですね(笑)

CLIクラスタを管理

DataprocのクラスタCLIでも作成することができます。

ウェブコンソールから「Dataproc」サービスに移動します。
Google Cloud Shell をアクティブにする」をクリックして下さい。
f:id:casekblog:20180906215123p:plain:w300
ブラウザの下部にCloud Shell ターミナルウィンドウが開きます。
f:id:casekblog:20180906221006p:plain

以下のコマンドを入力し、クラスタを構築してみましょう。

gcloud dataproc clusters create my-cluster --zone us-central1-a \
        --master-machine-type n1-standard-1 --master-boot-disk-size 50 \
        --num-workers 2 --worker-machine-type n1-standard-1 \
        --worker-boot-disk-size 50 --network=default

構築したクラスタは先ほど作ったクラスタと同様の物となります。

クラスタ名:my-second-cluster
ゾーン:us-central1-a
マシンタイプ[マスターノード]:n1-standard-1
スターノードのメインディスクのサイズ:10 GB
マシンタイプ[ワーカーノード]:n1-standard-1
ワーカーノード数:デフォルトの 2 
ワーカーノードメインディスクのサイズ:10 GB。

f:id:casekblog:20180906221545p:plain

「更新」タブを押すと新しくクラスタが構築されたことが確認できると思います。
作成したクラスタは以下のgcloucコマンドで削除することができます。

gcloud dataproc clusters delete my-second-cluster

以上でDataprocを活用したクラスタの構築は完了です。
数分で大規模データを扱えるクラスタを作成できるのはとても良いです。
環境構築は苦手だけど、分析は得意。そんな方にはDataprocはとてもお勧めです!

次は実際にDataprocを活用しジョブを実行したいと思います。

参考:
【GCP入門編・第11回】 Google Cloud Dataproc を使ってデータを解析しよう! | 株式会社トップゲート
リージョンとゾーンについて|clonos|Google Cloud Platform の導入支援、構築、監視、運用代行
https://qiita.com/tetsuyam/items/da05c3520b3ebab43a82