翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
EMR Studio で magic コマンドを使用してカーネルを強化する
概要
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 コマンドをリストする」を参照してください。
考慮事項と制限事項
-
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 コマンドをリストする
使用可能な magic コマンドを一覧表示するには、次のコマンドを使用します。
-
%lsmagic
は、現在使用可能なすべての magic 関数をリストします。 -
%%help
は、Sparkmagic パッケージが提供する現在使用可能な Spark 関連の magic 関数をリストします。
%%configure
を使用して Spark を設定する
Sparkmagic コマンドの中でも特に便利なコマンドの 1 つは、%%configure
コマンドです。このコマンドは、セッション作成パラメータを設定します。conf
設定を使用すると、Apache Spark の設定ドキュメント
例 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" } }
例 : 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
を実行する
%%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 ユーザーおよびジョブのアクティビティをモニタリングするためのユーザー偽装の有効化」を参照してください。
%%display
を使用して Spark データフレームを視覚化する
%%display
magic を使用して Spark データフレームを視覚化できます。この magic を使用するには、次のコマンドを実行します。
%%display df
以下の図のように、結果を表形式で表示することを選択します。

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

EMR Notebooks magic を使用する
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 オブジェクトのノートブック出力に一時的なダウンロードリンクを生成します。
前提条件
EMR Notebooks magic をインストールする前に、次のタスクを完了します。
-
クラスター EC2 インスタンスのサービスロール (EC2 インスタンスプロファイル) が Amazon S3 の読み取りアクセス権を備えていることを確認してください。
EMR_EC2_DefaultRole
とAmazonElasticMapReduceforEC2Role
マネージドポリシーを使用すると、この要件が満たされます。カスタムロールまたはポリシーを使用する場合は、必要な S3 アクセス許可があることを確認してください。注記
EMR Notebooks magic は、ノートブックユーザーとしてクラスター上で実行され、EC2 インスタンスプロファイルを使用して Amazon S3 と対話します。EMR クラスターに Workspace ディレクトリをマウントすると、そのクラスターにアタッチするアクセス許可を持つすべての Workspace および EMR Notebooks が、マウントされたディレクトリにアクセスできます。
デフォルトでは、ディレクトリは読み取り専用としてマウントされます。
s3fs-fuse
およびgoofys
は読み取り/書き込みマウントを許可しますが、読み取り/書き込みモードでディレクトリをマウントするようにマウントパラメータを変更しないことを強くお勧めします。書き込みアクセスを許可すると、ディレクトリに加えられたすべての変更が S3 バケットに書き込まれます。誤って削除したり上書きしたりしないように、S3 バケットのバージョニングを有効にできます。詳細については、「S3 バケットでのバージョニングの使用」を参照してください。 -
クラスターで次のいずれかのスクリプトを実行して、EMR Notebooks magic の依存関係をインストールします。スクリプトを実行するには、「カスタムブートストラップアクションの使用」を行うか、すでに実行中のクラスターがある場合は「Amazon EMR クラスターでのコマンドとスクリプトの実行」の手順に従うことができます。
インストールする依存関係を選択できます。s3fs-Fuse
と 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
の指示に従って 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 をインストールする
注記
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 をインストールするには、次の手順を実行します。
-
ノートブックで以下のコマンドを実行して
emr-notebooks-magics
パッケージをインストールします。 %pip install boto3 --upgrade %pip install botocore --upgrade %pip install emr-notebooks-magics --upgrade
-
カーネルを再起動して EMR Notebooks の magic をロードします。
-
次のコマンドを使用してインストールを検証します。これにより、
%mount_workspace_dir
の出力ヘルプテキストが表示されます。%mount_workspace_dir?
%mount_workspace_dir
を使用してWorkspace ディレクトリをマウントする
%mount_workspace_dir
magic を使用すると、Workspace ディレクトリを EMR クラスターにマウントして、ディレクトリに保存されている他のファイル、モジュール、またはパッケージをインポートして実行できます。
次の例では、Workspace ディレクトリ全体をクラスターにマウントし、オプションの
引数を指定してディレクトリのマウントに goofys を使用しています。<--fuse-type>
%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 オブジェクトをダウンロードする
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
を使用してノートブックをヘッドレスモードで実行する
%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 がインスタンスロールを共有する場合、ロールには以下の追加のアクセス許可が必要です。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:StartNotebookExecution", "elasticmapreduce:DescribeNotebookExecution", "ec2:DescribeInstances" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::<AccoundId>:role/EMR_Notebooks_DefaultRole" } ] }
注記
%execute_notebook
magic を使用するには、バージョン 0.2.3 以降の emr-notebooks-magics
パッケージをインストールします。