case-kの備忘録

日々の備忘録です。データ分析とか基盤系に興味あります。

DataprocでJupyterを使ったPySpark実行環境を作る

DataprocのJupyter環境を構築します。個人的にはDatalabよりJupyterの方が使いやすい印象があります。(Datalabを使いこなせてないのはありますがライブラリのインストール方法やDLなど。GCPとの連携もJupyterでもできるのでいいかなって思ってます)。
PySparkはインタラクティブに結果を返してくれるので分散処理が必要となるデータをインタラクティブに分析するにはいいかもです。Sparkはメモリを多く消費するのでメモリの多いインスタンスタイプを選んでみます。ディスク容量はデフォルトだと50GBと小さめなので300GBで設定してみます。マスターノード1に対しワーカーノードは4台です。プリエンティティブなインスタンスだと高いスペックのマシンを安く使えるので2台はプリエンティブVMのでn1-highmem-8でクラスタを構成します。

Code

github.com

CLIで環境構築

# Set tokyo region 
$ gcloud config set dataproc/region asia-northeast1
Updated property [dataproc/region].

# Create Cluster
$ gcloud beta dataproc clusters create cluster-name2 \
    --optional-components=ANACONDA,JUPYTER \
    --image-version=1.3 \
    --enable-component-gateway \
    --bucket [bucket-name] \
    --project [project-id] \
    --master-machine-type n1-highmem-4 --master-boot-disk-size 300 \
    --num-workers 2 --worker-machine-type n1-highmem-4 \
    --num-preemptible-workers 2 --worker-machine-type n1-highmem-8 \
    --worker-boot-disk-size 300 --network=default 

GCPVMインスタンスよりクラスタが構成されたのを確認。
f:id:casekblog:20190926054406p:plain

以下の記事でPySparkの実行サンプルがあるので試せます。このサンプルではクラスタ構成の効力は確認できませんが、データサイズが大きい場合は高速化が実感できるはずです。
www.case-k.jp

所感

PySparkはインタラクティブに実行結果を取得できるので、Jupyter環境での実行と相性がいいかもしれません。
クラスタ構成の調整が必要ですがPoolとパフォーマンスを比較してみたいと思います。
Kaggleとかで使えそうだと思いつつ、Kaggleやってないなあと反省・・

参考
マシンタイプ
cloud.google.com
プリエンティブVM
cloud.google.com
Dataproc & Jupyter
cloud.google.com