【1時間で実装】 Amazon SageMaker Studio の PySpark 実行環境  

# はじめに

Sagemaker studio でとりあえず Pyspark 試したい。。
でも実装するには IAM とか VPC とか細かく設定しなきゃいけないっぽい。。しかも後ろで EMR が動いてるとかもう無理。。

そう思って断念しかけたのですが、とても便利なテンプレートがありました！！！

[こちらの記事](https://aws.amazon.com/jp/blogs/machine-learning/amazon-sagemaker-studio-notebooks-backed-by-spark-in-amazon-emr/)で紹介されている CloudFormation スタックのテンプレートです。

以下のリンクからスタックの作成画面に飛びます。
https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=blog&templateURL=https://aws-ml-blog.s3.amazonaws.com/artifacts/ml-1954/template.yaml

# 実装手順
今回はとにかく最小限の労力で SageMaker Studio で PySpark が使える環境を作ることを目的としています。（なので、権限設定やネットワークについてはデフォルトの設定で行います）

## スタックの作成
以下のテンプレートリンクをクリックして AWS のコンソールにサインインし、スタックの作成画面を開く（サインインしたら自動で遷移します）。「次へ」をクリック。
https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=blog&templateURL=https://aws-ml-blog.s3.amazonaws.com/artifacts/ml-1954/template.yaml

![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618791/9f6bbb8e-48b1-4e06-4be1-5f64743b1799.png)

スタックの詳細を指定の画面。「次へ」をクリック。

![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618791/096f19ae-8c5b-b7c2-30b8-cb490f71b071.png)

スタックオプションの設定の画面。「次へ」をクリック。

![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618791/4664298a-b127-2df0-717e-5a924525b02c.png)

レビューの画面まで来たら一番下までスクロール。

![図4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618791/21743dc4-3577-d8f7-6261-427f9cf413af.png)

「AWS CloudFormation によって IAM リソースがカスタム名で作成される場合があることを承認します。」にチェックを入れ、「スタックの作成」をクリック。

![図5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618791/2a972c6f-8edc-34f8-465e-225a32e97578.png)

スタックの作成の進捗画面です。スタック名の下の「CREATE_IN_PROGRESS」が「CREATE_COMPLETE」になるまで待ちます。大体15分くらいかかります。

![図6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618791/2a05a36c-2a66-b904-1bed-c234ba934b6a.png)

「CREATE_COMPLETE」になりました。

![図7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618791/cbaf89a9-9f75-3457-175d-f0450da73a0e.png)

## SageMaker Studio の起動

次に SageMaker を開きます。コンソールの検索窓に「sagemaker」と入力し、「Amazon SageMaker」をクリック。

![図8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618791/3452df82-206a-3556-b222-ea9b29d55876.png)

「Open SageMaker Studio」をクリック。

![図9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618791/9b117baf-280b-e23d-04ff-ca56d73d6c69.png)

「defaultuser」というユーザーが作成されています。このユーザーの「Studioを開く」をクリック。

![図10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618791/01999aba-9d4c-f4c6-3c1e-692dd58d53bf.png)

ブラウザの別タブで Amazon SageMaker Studio が開いたら「File」→「New」→「Terminal」をクリック。

![図11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618791/c22f6f41-b334-685e-772f-740540ea2bc7.png)

ターミナル画面が開きます。

![図12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618791/4674b0c0-4d3c-12cb-48f2-d57c2934853c.png)

ここに以下のコマンドを打ち込みます。（最後の"."忘れに注意）

```
aws s3 cp s3://aws-ml-blog/artifacts/ml-1954/smstudio-pyspark-hive-sentiment-analysis.ipynb .
```

左のウインドウにノーブックファイルがコピーされていることが確認できます。これを開きます。

![図13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618791/e34a45a1-89f2-65b9-199e-00ad844bc856.png)

ノートブックを開くにはカーネルを選択する必要があります。「PySpark(SparkMagic)」を選択し、「Select」をクリック。

![図14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618791/9b4deb93-6851-2b5c-5a17-4a00040ef606.png)

マネジメントコンソール画面に戻ってEMRの画面を開きます。検索窓に「emr」と入力し「EMR」をクリック。

![図15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618791/16ebfb56-149f-d2fc-c614-f240c6d251ee.png)

クラスターが作成されています。クラスターの「ID」をコピーします。

![図16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618791/41238624-2b39-f632-a7de-e19d8888f768.png)

次に SageMaker Studio の画面に戻り、以下のように記載されているセルの"x-XXXXXXXXXXXX"の部分を先ほどのクラスターの「ID」に書き換えて実行します。

```
%%local
emr_cluster_id="x-XXXXXXXXXXXX"
```

その次に以下のコマンドが書いてあるセルを実行します。

```
%%local
!sm-sparkmagic connect --cluster-id {emr_cluster_id} --user-name "user1"
```

ここまでできたら「Launch terminal icon」をクリック。

![図17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618791/3ae47535-a56c-f545-b66c-11f1841e1acd.png)

ターミナル画面が開くので"kinit user1"と打ち込んで実行。初期パスワードは"pwd1"に設定されています。

任意の新しいパスワードを入力し、そのパスワードを再度入力します。

![図18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618791/c19a9a30-c05d-305f-e8e4-7cc0a3be08d2.png)

ノートブックのタブに戻り、「Restart kernel icon」をクリック。

![図19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618791/885b8c5b-8491-b025-ab82-a0a2586ad87f.png)

カーネルが再起動したら、

```
%%info
```

を実行します。以下のような出力がでていればokです。

```
Current session configs:{'driverMemory': '1000M', 'executorCores': 2, 'kind': 'pyspark'}
No active sessions.
```

## PySpark の実行

SparkSessionを生成します。

```python:
from pyspark.sql import SparkSession

spark = SparkSession.builder.getOrCreate()
```

"SparkSession available as 'spark'"と表示されればokです。

サンプルノートの後続のコードを PySpark でやってみます。

```python:
dbs = spark.sql("show databases")
dbs.show()

tables = spark.sql("show tables")
tables.show()
```

実行可能であることが確認できます。

![図20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618791/6d69ad49-c450-5fb5-15b1-ea0b280dd66a.png)


# おわりに

Amazon SageMaker Studio で PySpark を実行できる環境を作成しました。
テンプレート、ほんとに便利です。。
# 参考

https://aws.amazon.com/jp/blogs/machine-learning/amazon-sagemaker-studio-notebooks-backed-by-spark-in-amazon-emr/

https://docs.aws.amazon.com/sagemaker/latest/dg/studio-emr.html