

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# ノートブックを使用して Amazon EMR Spark インスタンスを制御する
<a name="nbi-lifecycle-config-emr"></a>

**重要**  
Amazon SageMaker Studio または Amazon SageMaker Studio Classic に Amazon SageMaker リソースの作成を許可するカスタム IAM ポリシーでは、これらのリソースにタグを追加するアクセス許可も付与する必要があります。Studio と Studio Classic は、作成したリソースに自動的にタグ付けするため、リソースにタグを追加するアクセス許可が必要になります。IAM ポリシーで Studio と Studio Classic によるリソースの作成が許可されていても、タグ付けが許可されていない場合は、リソースを作成しようとしたときに「AccessDenied」エラーが発生する可能性があります。詳細については、「[SageMaker AI リソースにタグ付けのアクセス許可を付与する](security_iam_id-based-policy-examples.md#grant-tagging-permissions)」を参照してください。  
SageMaker リソースを作成するためのアクセス許可を付与する [AWS Amazon SageMaker AI の マネージドポリシー](security-iam-awsmanpol.md) には、それらのリソースの作成中にタグを追加するためのアクセス許可もあらかじめ含まれています。

カスタムライフサイクル設定スクリプトで作成されたノートブックインスタンスを使用して、ノートブックから AWS サービスにアクセスできます。例えば、Sparkmagic でノートブックを使って Amazon EMR インスタンスなどの他の AWS リソースを制御できるスクリプトを作成できます。その後、ノートブックでデータ分析を実行する代わりに、Amazon EMR インスタンスを使ってデータを処理できます。これにより、データを処理するためにインスタンスを使用しないため、より小さなノートブックインスタンスを作成できます。これは、データを処理するために大きなノートブックインスタンスを必要とする大規模なデータセットがある場合に役立ちます。

このプロセスには、Amazon SageMaker AI コンソールを使用した次の 3 つの手順が必要です。
+ Amazon EMR Spark インスタンスを作成する
+ Jupyter ノートブックを作成する
+ ノートブックと Amazon EMR の接続をテストする

**Sparkmagic を使ってノートブックから制御できる Amazon EMR Spark インスタンスを作成するには**

1. Amazon EMR コンソール ([https://console.aws.amazon.com/elasticmapreduce/](https://console.aws.amazon.com/elasticmapreduce/)) を開きます。

1. ナビゲーションペインで、**[クラスターの作成]** を選択します。

1. **[クラスターの作成 - クイックオプション]** ページの **[ソフトウェア設定]** で、**[Spark: Spark 2.4.4 on Hadoop 2.8.5 YARN with Ganglia 3.7.2 and Zeppelin 0.8.2]** を選択します。

1. ページで追加のパラメータを設定し、**[クラスターの作成]** を選択します。

1. **[クラスター]** ページで、作成したクラスター名を選択します。**[マスターパブリック DNS]**、**[EMR マスターのセキュリティグループ]**、EMR クラスターが作成された VPC 名とサブネット ID を書き留めます。上記の値は、ノートブック作成時に使用します。

**Sparkmagic を使って Amazon EMR Spark インスタンスを制御するノートブックを作成するには**

1. Amazon SageMaker AI コンソール ([https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)) を開きます。

1. ナビゲーションペインの **[ノートブックインスタンス]** で、**[ノートブックの作成]** を選択します。

1. ノートブックインスタンス名を入力し、インスタンスタイプを選択します。

1. **[追加設定]** を選択し、**[ライフサイクル設定]** で **[新しいライフサイクル設定の作成]** を選択します。

1. ライフサイクル設定スクリプトに次のコードを追加します。

   ```
   # OVERVIEW
   # This script connects an Amazon EMR cluster to an Amazon SageMaker notebook instance that uses Sparkmagic.
   #
   # Note that this script will fail if the Amazon EMR cluster's master node IP address is not reachable.
   #   1. Ensure that the EMR master node IP is resolvable from the notebook instance.
   #      One way to accomplish this is to have the notebook instance and the Amazon EMR cluster in the same subnet.
   #   2. Ensure the EMR master node security group provides inbound access from the notebook instance security group.
   #       Type        - Protocol - Port - Source
   #       Custom TCP  - TCP      - 8998 - $NOTEBOOK_SECURITY_GROUP
   #   3. Ensure the notebook instance has internet connectivity to fetch the SparkMagic example config.
   #
   # https://aws.amazon.com/blogs/machine-learning/build-amazon-sagemaker-notebooks-backed-by-spark-in-amazon-emr/
   
   # PARAMETERS
   EMR_MASTER_IP=your.emr.master.ip
   
   
   cd /home/ec2-user/.sparkmagic
   
   echo "Fetching Sparkmagic example config from GitHub..."
   wget https://raw.githubusercontent.com/jupyter-incubator/sparkmagic/master/sparkmagic/example_config.json
   
   echo "Replacing EMR master node IP in Sparkmagic config..."
   sed -i -- "s/localhost/$EMR_MASTER_IP/g" example_config.json
   mv example_config.json config.json
   
   echo "Sending a sample request to Livy.."
   curl "$EMR_MASTER_IP:8998/sessions"
   ```

1. スクリプトの `PARAMETERS` セクションで、`your.emr.master.ip` を Amazon EMR インスタンスのマスターパブリック DNS 名に置き換えます。

1. **[設定を作成]** を選択します。

1. **[ノートブックの作成]** ページで、**[ネットワーク - オプション]** を選択します。

1. Amazon EMR インスタンスが存在する VPC とサブネットを選択します。

1. Amazon EMR マスターノードが使うセキュリティグループを選択します。

1. **[Create notebook instance]** (ノートブックインスタンスの作成) を選択します。

ノートブックインスタンスの作成中は、ステータスは **[保留中]** になります。インスタンスが作成され、ライフサイクル設定スクリプトが正常に実行されると、ステータスは **[実行中]** になります。

**注記**  
ノートブックインスタンスが Amazon EMR インスタンスに接続できない場合、SageMaker AI はノートブックインスタンスを作成できません。Amazon EMR インスタンスとノートブックが同じ VPC とサブネットにない場合、Amazon EMR マスターセキュリティグループがノートブックで使用されていない場合、またはスクリプトのマスターパブリック DNS 名が間違っている場合、接続が失敗する可能性があります。

**Amazon EMR インスタンスとノートブック間の接続をテストするには**

1.  ノートブックのステータスが **[実行中]** のときに、**[Jupyter を開く]** を選択してノートブックを開きます。

1. **[新規]** を選択して、**[Sparkmagic (PySpark)]** を選択します。

1. コードセルで、**%%info** を入力し、セルを実行します。

   出力は次の例のようになります

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