

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

# EMR Studio で magic コマンドを使用してカーネルを強化する
<a name="emr-studio-magics"></a>

## 概要
<a name="overview-magics"></a>

EMR Studio および EMR Notebooks は magic コマンドをサポートしています。*Magic* コマンド (*magic*) はデータの実行と分析に役立つように IPython カーネルによって提供されている拡張機能です。IPython は Python で構築されたインタラクティブなシェル環境です。

Amazon EMR は Sparkmagic もサポートしています。Sparkmagic は、Spark 関連のカーネル (PySpark、SparkR、Scala カーネル) に特定の magic コマンドを提供し、クラスターで Livy を使用して Spark ジョブを送信するパッケージです。

EMR Notebooks に Python カーネルがある限り、magic コマンドを使用できます。同様に、Spark 関連のカーネルは Sparkmagic コマンドをサポートしています。

Magic コマンド (*magic* とも呼ばれる) には、以下の 2 種類があります:
+ **ライン magic** - これらの magic コマンドは単一の `%` プレフィックスで示され、1 行のコードで動作します。
+ **セル magic** - これらの magic コマンドは二重の `%%` プレフィックスで示され、複数行のコードで動作します。

すべての利用可能な magic については「[magic コマンドと Sparkmagic コマンドをリストする](#accessing-all-magic-commands)」を参照してください。

## 考慮事項と制限事項
<a name="considerations-limitations-magics"></a>
+ EMR Serverless は `%%sh` による `spark-submit` の実行をサポートしていません EMR Notebooks の magic はサポートしていません。
+ Amazon EMR on EKS クラスターは、EMR Studio で Sparkmagic コマンドをサポートしていません。これは、マネージドエンドポイントで使用される Spark カーネルは Kubernetes に組み込まれており、Sparkmagic と Livy ではサポートされていないためです。回避策として、次の例に示すように、Spark 設定を SparkContext オブジェクトに直接設定できます。

  ```
  spark.conf.set("spark.driver.maxResultSize", '6g') 
  ```
+ 以下のmagicコマンドとアクションは、 によって禁止されています AWS。
  + `%alias`
  + `%alias_magic`
  + `%automagic`
  + `%macro`
  + `proxy_user` を使用した `%configure` の変更
  + `KERNEL_USERNAME` または `%env` を使用した `%set_env` の変更

## magic コマンドと Sparkmagic コマンドをリストする
<a name="accessing-all-magic-commands"></a>

使用可能な magic コマンドを一覧表示するには、次のコマンドを使用します。
+ `%lsmagic` は、現在使用可能なすべての magic 関数をリストします。
+ `%%help` は、Sparkmagic パッケージが提供する現在使用可能な Spark 関連の magic 関数をリストします。

## `%%configure` を使用して Spark を設定する
<a name="using-configure-sparkmagic"></a>

Sparkmagic コマンドの中でも特に便利なコマンドの 1 つは、`%%configure` コマンドです。このコマンドは、セッション作成パラメータを設定します。`conf` 設定を使用すると、[Apache Spark の設定ドキュメント](https://spark.apache.org/docs/latest/configuration.html)で説明されている任意の Spark 設定を構成できます。

**Example Maven リポジトリまたは Amazon S3 から EMR Notebooks に外部 JAR ファイルを追加する**  
次のアプローチを使用して、Sparkmagic でサポートされている任意の Spark 関連のカーネルに外部 JAR ファイル依存関係を追加できます。  

```
%%configure -f
{"conf": {
    "spark.jars.packages": "com.jsuereth:scala-arm_2.11:2.0,ml.combust.bundle:bundle-ml_2.11:0.13.0,com.databricks:dbutils-api_2.11:0.0.3",
    "spark.jars": "s3://amzn-s3-demo-bucket/my-jar.jar"
    }
}
```

**Example : Hudi を設定する**  
ノートブックエディタで、Hudi を使用するように EMR Notebooks を設定できます。  

```
%%configure
{ "conf": {
     "spark.jars": "hdfs://apps/hudi/lib/hudi-spark-bundle.jar,hdfs:///apps/hudi/lib/spark-spark-avro.jar", 
     "spark.serializer": "org.apache.spark.serializer.KryoSerializer",
     "spark.sql.hive.convertMetastoreParquet":"false"
     }
}
```

## `%%sh` を使用して `spark-submit` を実行する
<a name="using-sh-sparkmagic"></a>

`%%sh` magic は、アタッチされたクラスターのインスタンスのサブプロセスでシェルコマンドを実行します。通常、Spark 関連のカーネルのいずれかを使用して、アタッチされたクラスターで Spark アプリケーションを実行します。ただし、Python カーネルを使用して Spark アプリケーションを送信する場合は、バケット名を小文字のバケット名に置き換えて、次の magic を使用できます。

```
%%sh
spark-submit --master yarn --deploy-mode cluster s3://amzn-s3-demo-bucket/test.py
```

この例では、クラスターは、`s3://amzn-s3-demo-bucket/test.py` の場所にアクセスできる必要があります。アクセスできないと、コマンドは失敗します。

`%%sh` magic を使用して任意の Linux コマンドを使用できます。Spark コマンドまたは YARN コマンドを実行する場合は、次のいずれかのオプションを使用して、`emr-notebook` Hadoop ユーザーを作成し、コマンドを実行するアクセス許可をユーザーに付与します。
+ 次のコマンドを実行して、新しいユーザーを明示的に作成できます。

  ```
  hadoop fs -mkdir /user/emr-notebook
  hadoop fs -chown emr-notebook /user/emr-notebook
  ```
+ Livy でユーザー偽装を有効にすることができます。これにより、ユーザーが自動的に作成されます。詳細については「[Spark ユーザーおよびジョブのアクティビティをモニタリングするためのユーザー偽装の有効化](emr-managed-notebooks-spark-monitor.md)」を参照してください。

## `%%display` を使用して Spark データフレームを視覚化する
<a name="using-display-sparkmagic"></a>

`%%display` magic を使用して Spark データフレームを視覚化できます。この magic を使用するには、次のコマンドを実行します。

```
%%display df
```

以下の図のように、結果を表形式で表示することを選択します。

![\[%%display magic を使用して結果を表形式で表示した場合の出力。\]](http://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/images/magic-display-table.png)


5 種類のグラフでデータを視覚化することもできます。オプションには、円グラフ、散布図、折れ線グラフ、面グラフ、棒グラフがあります。

![\[%%display magic を使用して結果をグラフ形式で表示した場合の出力。\]](http://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/images/magic-display-chart.png)


## EMR Notebooks magic を使用する
<a name="emr-magics"></a>

Amazon EMR は、Python3 および Spark ベースのカーネルで使用できる次の EMR Notebooks magic を提供しています。
+ `%mount_workspace_dir` – Workspace 内の他のファイルからコードをインポートして実行できるように、Workspace ディレクトリをクラスターにマウントします。
**注記**  
`%mount_workspace_dir` では、Python 3 カーネルのみがローカルファイルシステムにアクセスできます。Spark エグゼキューターは、このカーネルではマウントされたディレクトリにアクセスできません。
+ `%umount_workspace_dir` – Workspace ディレクトリをクラスターからアンマウントします
+ `%generate_s3_download_url` - Amazon S3 オブジェクトのノートブック出力に一時的なダウンロードリンクを生成します。

### 前提条件
<a name="emr-magics-prereqs"></a>

EMR Notebooks magic をインストールする前に、次のタスクを完了します。
+ [クラスター EC2 インスタンスのサービスロール (EC2 インスタンスプロファイル)](emr-iam-role-for-ec2.md) が Amazon S3 の読み取りアクセス権を備えていることを確認してください。`EMR_EC2_DefaultRole` と `AmazonElasticMapReduceforEC2Role` マネージドポリシーを使用すると、この要件が満たされます。カスタムロールまたはポリシーを使用する場合は、必要な S3 アクセス許可があることを確認してください。
**注記**  
EMR Notebooks magic は、ノートブックユーザーとしてクラスター上で実行され、EC2 インスタンスプロファイルを使用して Amazon S3 と対話します。EMR クラスターに Workspace ディレクトリをマウントすると、そのクラスターにアタッチするアクセス許可を持つすべての Workspace および EMR Notebooks が、マウントされたディレクトリにアクセスできます。  
デフォルトでは、ディレクトリは読み取り専用としてマウントされます。`s3fs-fuse` および `goofys` は読み取り/書き込みマウントを許可しますが、読み取り/書き込みモードでディレクトリをマウントするようにマウントパラメータを変更しないことを強くお勧めします。書き込みアクセスを許可すると、ディレクトリに加えられたすべての変更が S3 バケットに書き込まれます。誤って削除したり上書きしたりしないように、S3 バケットのバージョニングを有効にできます。詳細については、「[S3 バケットでのバージョニングの使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html)」を参照してください。
+ クラスターで次のいずれかのスクリプトを実行して、EMR Notebooks magic の依存関係をインストールします。スクリプトを実行するには、「[カスタムブートストラップアクションの使用](emr-plan-bootstrap.md#bootstrapCustom)」を行うか、すでに実行中のクラスターがある場合は「[Amazon EMR クラスターでのコマンドとスクリプトの実行](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-commandrunner.html)」の手順に従うことができます。

  インストールする依存関係を選択できます。[s3fs-Fuse](https://github.com/s3fs-fuse/s3fs-fuse) と [goofys](https://github.com/kahing/goofys) はともに、Amazon S3 バケットをクラスター上のローカルファイルシステムとしてマウントできるようにする FUSE (Filesystem in Userspace) ツールです。`s3fs` ツールは POSIX に似たエクスペリエンスを提供します。`goofys` ツールは、POSIX 準拠のファイルシステムよりもパフォーマンスを優先する場合に適しています。

  Amazon EMR 7.x シリーズは、EPEL リポジトリをサポートしていない Amazon Linux 2023 を使用します。Amazon EMR 7.x を実行している場合は、[s3fs-fuse GitHub](https://github.com/s3fs-fuse/s3fs-fuse/blob/master/COMPILATION.md) の指示に従って `s3fs-fuse` をインストールします。5.x または 6.x シリーズを使用する場合は、次のコマンドを使用して `s3fs-fuse` をインストールします。

  ```
  #!/bin/sh
  
  # Install the s3fs dependency for EMR Notebooks magics 
  sudo amazon-linux-extras install epel -y
  sudo yum install s3fs-fuse -y
  ```

  **または**

  ```
  #!/bin/sh
  
  # Install the goofys dependency for EMR Notebooks magics 
  sudo wget https://github.com/kahing/goofys/releases/latest/download/goofys -P /usr/bin/
  sudo chmod ugo+x /usr/bin/goofys
  ```

### EMR Notebooks magic をインストールする
<a name="emr-magics-install"></a>

**注記**  
Amazon EMR リリース 6.0 から 6.9.0、および 5.0 から 5.36.0 では、`emr-notebooks-magics` パッケージのバージョン 0.2.0 以降のみが `%mount_workspace_dir` magic をサポートしています。

EMR Notebooks magic をインストールするには、次の手順を実行します。

1. ノートブックで以下のコマンドを実行して [https://pypi.org/project/emr-notebooks-magics/](https://pypi.org/project/emr-notebooks-magics/) パッケージをインストールします。

   ```
   %pip install boto3 --upgrade
   %pip install botocore --upgrade
   %pip install emr-notebooks-magics --upgrade
   ```

1. カーネルを再起動して EMR Notebooks の magic をロードします。

1. 次のコマンドを使用してインストールを検証します。これにより、`%mount_workspace_dir` の出力ヘルプテキストが表示されます。

   ```
   %mount_workspace_dir?
   ```

### `%mount_workspace_dir` を使用してWorkspace ディレクトリをマウントする
<a name="emr-magics-mount-workspace"></a>

`%mount_workspace_dir` magic を使用すると、Workspace ディレクトリを EMR クラスターにマウントして、ディレクトリに保存されている他のファイル、モジュール、またはパッケージをインポートして実行できます。

次の例では、Workspace ディレクトリ全体をクラスターにマウントし、オプションの *`<--fuse-type>`* 引数を指定してディレクトリのマウントに goofys を使用しています。

```
%mount_workspace_dir . <--fuse-type goofys>
```

Workspace ディレクトリがマウントされていることを確認するには、次の例のように、`ls` コマンドを使用して現在の作業ディレクトリを表示します。出力には、Workspace 内のすべてのファイルが表示されます。

```
%%sh
ls
```

Workspace での変更が完了したら、次のコマンドを使用して Workspace ディレクトリをアンマウントします。

**注記**  
Workspace が停止またはデタッチされた場合でも、Workspace ディレクトリはクラスターにマウントされたままです。Workspace ディレクトリを明示的にアンマウントする必要があります。

```
%umount_workspace_dir
```

### `%generate_s3_download_url` を使用して Amazon S3 オブジェクトをダウンロードする
<a name="emr-magics-generate-s3-download-url"></a>

`generate_s3_download_url` コマンドは、Amazon S3 に保存されたオブジェクトの署名済み URL を作成します。署名済み URL を使用して、オブジェクトをローカルマシンにダウンロードできます。例えば、`generate_s3_download_url` を実行して、コードが Amazon S3 に書き込む SQL クエリの結果をダウンロードできます。

署名済み URL は、デフォルトで 60 分間有効です。有効期限は、`--expires-in` フラグに秒数を指定することで変更できます。例えば、`--expires-in 1800` は、30 分間有効な URL を作成します。

次の例では、完全な Amazon S3 パス `s3://EXAMPLE-DOC-BUCKET/path/to/my/object` を指定して、オブジェクトのダウンロードリンクを生成しています。

```
%generate_s3_download_url s3://EXAMPLE-DOC-BUCKET/path/to/my/object
```

`generate_s3_download_url` の使用の詳細については、次のコマンドを実行してヘルプテキストを表示してください。

```
%generate_s3_download_url?
```

### `%execute_notebook` を使用してノートブックをヘッドレスモードで実行する
<a name="headless-execution"></a>

`%execute_notebook` magic を使用すると、別のノートブックをヘッドレスモードで実行して、実行した各セルの出力を表示できます。この magic を使用するには、Amazon EMR と Amazon EC2 が共有するインスタンスロールに対する追加のアクセス許可が必要です。追加のアクセス許可を付与する方法の詳細については、`%execute_notebook?` コマンドを実行してください。

長時間かかるジョブの実行中、操作がないためにシステムがスリープ状態になったり、インターネット接続が一時的に切断されたりすることがあります。その結果、ブラウザと Jupyter Server 間の接続が中断される可能性があります。この場合、Jupyter Server から実行して送信したセルの出力が失われる可能性があります。

`%execute_notebook` magic を使用してノートブックをヘッドレスモードで実行すると、ローカルネットワークが中断した場合でも、EMR Notebooks は実行したセルからの出力をキャプチャします。EMR Notebooks は、実行したノートブックと同じ名前の新しいノートブックに出力を増分保存します。その後、EMR Notebooks はノートブックを Workspace 内の新しいフォルダに配置します。ヘッドレス実行は同じクラスターで行われ、`EMR_Notebook_DefaultRole` サービスロールを使用しますが、引数を追加することでデフォルト値を変更できます。

ノートブックをヘッドレスモードで実行するには、以下のコマンドを使用します。

```
%execute_notebook <relative-file-path>
```

ヘッドレス実行のクラスター ID とサービスロールを指定するには、以下のコマンドを使用します。

```
%execute_notebook <notebook_name>.ipynb --cluster-id <emr-cluster-id> --service-role <emr-notebook-service-role>
```

Amazon EMR と Amazon EC2 がインスタンスロールを共有する場合、ロールには以下の追加のアクセス許可が必要です。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "elasticmapreduce:StartNotebookExecution",
        "elasticmapreduce:DescribeNotebookExecution",
        "ec2:DescribeInstances"
      ],
      "Resource": [
        "*"
      ],
      "Sid": "AllowELASTICMAPREDUCEStartnotebookexecution"
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/EMR_Notebooks_DefaultRole"
      ],
      "Sid": "AllowIAMPassrole"
    }
  ]
}
```

------

**注記**  
`%execute_notebook` magic を使用するには、バージョン 0.2.3 以降の `emr-notebooks-magics` パッケージをインストールします。