EMR Studio で magic コマンドを使用してカーネルを強化する - Amazon EMR

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

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 の設定ドキュメントで説明されている任意の 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 ユーザーを作成し、コマンドを実行するアクセス許可をユーザーに付与します。

%%display を使用して Spark データフレームを視覚化する

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

%%display df

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

%%display magic を使用して結果を表形式で表示した場合の出力。

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

%%display magic を使用して結果をグラフ形式で表示した場合の出力。

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_DefaultRoleAmazonElasticMapReduceforEC2Role マネージドポリシーを使用すると、この要件が満たされます。カスタムロールまたはポリシーを使用する場合は、必要な S3 アクセス許可があることを確認してください。

    注記

    EMR Notebooks magic は、ノートブックユーザーとしてクラスター上で実行され、EC2 インスタンスプロファイルを使用して Amazon S3 と対話します。EMR クラスターに Workspace ディレクトリをマウントすると、そのクラスターにアタッチするアクセス許可を持つすべての Workspace および EMR Notebooks が、マウントされたディレクトリにアクセスできます。

    デフォルトでは、ディレクトリは読み取り専用としてマウントされます。s3fs-fuse および goofys は読み取り/書き込みマウントを許可しますが、読み取り/書き込みモードでディレクトリをマウントするようにマウントパラメータを変更しないことを強くお勧めします。書き込みアクセスを許可すると、ディレクトリに加えられたすべての変更が S3 バケットに書き込まれます。誤って削除したり上書きしたりしないように、S3 バケットのバージョニングを有効にできます。詳細については、「S3 バケットでのバージョニングの使用」を参照してください。

  • クラスターで次のいずれかのスクリプトを実行して、EMR Notebooks magic の依存関係をインストールします。スクリプトを実行するには、「カスタムブートストラップアクションの使用」を行うか、すでに実行中のクラスターがある場合は「Amazon EMR クラスターでのコマンドとスクリプトの実行」の手順に従うことができます。

    インストールする依存関係を選択できます。s3fs-Fusegoofys はともに、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 をインストールするには、次の手順を実行します。

  1. ノートブックで以下のコマンドを実行して emr-notebooks-magics パッケージをインストールします。

    %pip install boto3 --upgrade %pip install botocore --upgrade %pip install emr-notebooks-magics --upgrade
  2. カーネルを再起動して EMR Notebooks の magic をロードします。

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

    %mount_workspace_dir?

%mount_workspace_dir を使用してWorkspace ディレクトリをマウントする

%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 オブジェクトをダウンロードする

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 パッケージをインストールします。