Cloud Dataprocチュートリアルを試してみる

今後仕事でCloud Dataprocを使うことが出てきそうなので、個人的に概要をまとめます。
今年はProfessional Cloud Architect（CA）を取得する予定なので、その勉強も兼ねてます。

# Cloud Dataprocとは
「Dataproc は、Apache Spark および Apache Hadoop クラスタを簡単かつコスト効率の高い方法で実行するための高速で使いやすいフルマネージド クラウド サービスです。」
とあります。
HadoopとSparkの話が出てきたので簡単にまとめておきます。

## Apache Hadoopとは
RDBMSで苦手とする「大量のデータ処理」を効率的に処理するために作られた「分散処理」用のフレームワーク。
Googleが2004年に発表した分散処理フレームワークMapReduceを元に作られているらしいです。

特徴としては2つあり、
1つはサーバをスケールアウトさせることで処理能力を高められる「高い拡張性」。
2つ目は複数台のサーバのうち1台が壊れても処理を続けられる「高い安定性」。

## Apache Sparkとは
Sparkは分散処理用のプラットフォームであり、Hadoopの弱点であるリアルタイム処理が得意。（ストリーミングデータの分散処理が可能）
またデータの格納場所をHDD・SSDだけでなく、メモリに格納できることから処理速度も高くできる。
ただしSparkがHadoopの完全上位互換というわけでなく、SparkがHDFS（Hadoopの分散ファイルシステム）を使ったり、データがメモリに乗り切るか否かで変わってくる。

## つまり
つまり、分散処理ツールであるHadoop/Sparkの実行環境をクラウド上で提供してくれるのがDataprocということです。
※あとで知りましたが、SparkR, PySpark, Hive, SparkSql, Pig, Prestoも選べます。

# チュートリアル
[チュートリアル](https://cloud.google.com/dataproc/docs/quickstarts?hl=ja)があるのでそれに従って使ってみます。

## 1. クラスタ作成
指示に従いクラスタの設定をし、作成ボタンを押下。
![スクリーンショット 2020-03-03 7.15.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88176/fb27c925-348b-cb1a-0594-0d53604efbae.png)

しかしエラーに！
![スクリーンショット 2020-03-03 7.15.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88176/0b9aaddf-6cf6-ddfe-5ffe-3e99e5616317.png)

▼エラー内容

```
Multiple validation errors: - Insufficient 'CPUS' quota. Requested 12.0, available 6.0. - Insufficient 'CPUS_ALL_REGIONS' quota. Requested 12.0, available 10.0. - This request exceeds CPU quota. Some things to try: request fewer workers (a minimum of 2 is required), use smaller master and/or worker machine types (such as n1-standard-2).
```

どうやら割り当て上限に引っかかったみたいです。
じゃあ上限上げてみるかと思いきや、GCP無料枠では上限を増やせないとのこと。
しょうがなく作成するクラスタスペックを下げてみることに。
n1-standard-2を推奨されたのでそれを使ってみたら作成できました！
（割り当ての設定画面は[こちら](https://console.cloud.google.com/iam-admin/quotas?hl=ja&_ga=2.160074173.1225819455.1583103043-367630273.1528696183)。）

▼選べる分散処理基盤の種類。いろいろ使えます。
![スクリーンショット 2020-03-03 8.23.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88176/1c90e06a-7eb1-d5c3-a5c9-a43545a8a1a8.png)

## 2. ジョブ送信
クラスタを作成したので、次は作ったクラスタでPi計算のジョブを流してみます。
（ジョブ実行じゃなくジョブ送信なんですね。なんか日本語に違和感。）

▼ジョブ設定画面
![スクリーンショット 2020-03-03 8.25.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88176/0dc8b204-7760-084d-c93b-501718b060cd.png)
ジョブタイプはいくつか選べるのですが、今回はSparkを使ってみます。
ここで予め用意されているPi計算用のJarを指定します。

▼実行結果
![スクリーンショット 2020-03-03 8.26.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88176/a0413145-a438-4bd3-b8c2-8b7868923614.png)
ちゃんと実行されてますね。

## 3. ワーカーノードの変更
そしたら次はワーカーノード数を変えて実行してみようと思ったのですが、変更画面でエラーに。
![スクリーンショット 2020-03-03 8.28.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88176/011e8ceb-3684-2d17-8955-9b0043eee06c.png)

▼エラー内容

```
Multiple validation errors: - Insufficient 'CPUS' quota. Requested 6.0, available 0.0. - Insufficient 'CPUS_ALL_REGIONS' quota. Requested 6.0, available 4.0. - Insufficient 'DISKS_TOTAL_GB' quota. Requested 1500.0, available 528.0. - This request exceeds CPU quota. Some things to try: request fewer workers (a minimum of 2 is required), use smaller master and/or worker machine types (such as n1-standard-2).
```

今の割り当て設定ではワーカーノード数を引き上げられないらしいです。
ちなみにワーカーノードは最低2つ以上必要なので、減らすことも増やすこともできず、変更を試せませんでした。
力及ばず申し訳ないです。

## 4. お片付け
使う前より美しく！
使ったものは消しときましょう。

▼クラスタ削除
![スクリーンショット_2020-03-03_8_33_53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88176/258fb4a5-78f3-6e50-57c4-5dead8ec700e.png)

▼ジョブ削除
![スクリーンショット_2020-03-03_9_03_58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88176/23a81a7e-5ebe-f6d7-b426-c9a942a949ac.png)

▼GCS上に残ったゴミ（Jarファイルやメタデータなど）も削除
![スクリーンショット_2020-03-03_8_40_33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88176/5720495e-3605-792c-632f-14ea7b2f8a80.png)

# まとめ
ざっくりDataprocクラスタ作成からジョブ実行まで試してみました。
大きな流れは分かったので、今度は中身の実装にも手を出していきたいと思います。
ここまで読んで頂きありがとうございました！

# 参考
- [Console を使用したクイックスタート
](https://cloud.google.com/dataproc/docs/quickstarts/quickstart-console?hl=ja)
- [Apache HadoopとSparkの違いとは？ 分散処理フレームワークを基礎からわかりやすく解説！](https://data.wingarc.com/hadoop_spark-20912)