カーネルとライブラリのインストールと使用 - Amazon EMR

カーネルとライブラリのインストールと使用

注記

EMR Notebooks は、新しいコンソールで EMR Studio Workspace として使用できます。古いコンソールでは既存のノートブックを引き続き使用できますが、古いコンソールでは新しいノートブックを作成できません。この機能は、新しいコンソールの [ワークスペースの作成] ボタンに置き換わります。EMR Notebooks ユーザーが Workspace にアクセスしたり作成したりするには、追加の IAM ロール権限が必要です。詳細については、「Amazon EMR Notebooks are Amazon EMR Studio Workspaces in new console」および「What's new in the console?」を参照してください。

各 EMR notebooks には、プリインストールされたライブラリとカーネルのセットが付属しています。EMR クラスターがカーネルとライブラリのあるリポジトリにアクセスできる場合は、クラスターに追加のライブラリとカーネルをインストールすることができます。たとえば、クラスターがプライベートサブネットにある場合は、ネットワークアドレス変換 (NAT) を設定して、クラスターがパブリックの PyPI リポジトリにアクセスしてライブラリをインストールするためのパスを指定する必要があります。さまざまなネットワーク設定の外部アクセス設定の詳細については、「Amazon VPC ユーザーガイド」の「シナリオと例」を参照してください。

EMR サーバーレスアプリケーションには、Python と PySpark 用の以下のライブラリがプリインストールされています。

  • Python ライブラリ - ggplot、matplotlib、numpy、pandas、plotly、bokeh、scikit-learn、scipy、scipy

  • PySpark ライブラリ - ggplot、matplotlib、numpy、pandas、plotly、bokeh、scikit-learn、scipy、scipy

クラスターのプライマリノードへのカーネルと Python ライブラリのインストール

Amazon EMR リリースバージョン 5.30.0 以降 (6.0.0 を除く) では、クラスターのプライマリノードに追加の Python ライブラリとカーネルをインストールすることができます。インストールしたカーネルとライブラリは、クラスターにアタッチされている EMR notebooks を実行するすべてのユーザーが使用できます。この方法でインストールした Python ライブラリは、プライマリノードで実行されるプロセスでのみ使用できます。ライブラリはコアノードまたはタスクノードにはインストールされず、それらのノードで実行されているエグゼキュターでは使用できません。

注記

Amazon EMR バージョン 5.30.1、5.31.0、および 6.1.0 では、クラスターのプライマリノードにカーネルとライブラリをインストールするためには、追加のステップを実行する必要があります。

この機能を有効にするには、以下の操作を行います。

  1. EMR Notebooks のサービスロールにアタッチされているアクセス許可ポリシーで、次のアクションが許可されていることを確認します。

    elasticmapreduce:ListSteps

    詳細については、「EMR Notebooks のサービスロール」を参照してください。

  2. AWS CLI を使用して、以下の例に示すように、EMR Notebooks をセットアップするクラスターでステップを実行します。ステップ名 EMRNotebooksSetup を使用する必要があります。us-east-1 を、クラスターが存在するリージョンに置き換えます。詳細については、「AWS CLI を使用したクラスターへのステップの追加」を参照してください。

    aws emr add-steps --cluster-id MyClusterID --steps Type=CUSTOM_JAR,Name=EMRNotebooksSetup,ActionOnFailure=CONTINUE,Jar=s3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar,Args=["s3://awssupportdatasvcs.com/bootstrap-actions/EMRNotebooksSetup/emr-notebooks-setup.sh"]

カーネルとライブラリをインストールするには、プライマリノードの /emr/notebook-env/bin ディレクトリで pip または conda を使用します。

例 — Python ライブラリのインストール

Python3 カーネルから、ノートブックセル内から %pip マジックをコマンドとして実行し、Python ライブラリをインストールします。

%pip install pmdarima

更新されたパッケージを使用するには、カーネルの再起動が必要になる場合があります。%%sh Spark マジックを使って pip を呼び出すこともできます。

%%sh /emr/notebook-env/bin/pip install -U matplotlib /emr/notebook-env/bin/pip install -U pmdarima

PySpark カーネルを使用する場合、pip コマンドを使用してクラスターにライブラリをインストールすることも、PySpark ノートブック内からノートブックスコープのライブラリを使用することもできます。

ターミナルからクラスターで pip コマンドを実行するには、以下のコマンドが示すように、まず SSH を使用してプライマリノードに接続します。

sudo pip3 install -U matplotlib sudo pip3 install -U pmdarima

ノートブックスコープのライブラリを使用することもできます。ノートブックスコープのライブラリでは、ライブラリのインストールはセッションの範囲に限定され、すべての Spark エグゼキューターで行われます。詳細については、「ノートブックスコープのライブラリの使用」を参照してください。

PySpark カーネル内に複数の Python ライブラリをパッケージ化する場合は、独立した Python 仮想環境を作成することもできます。例については、「Using Virtualenv」を参照してください。

セッションに Python 仮想環境を作成するには、以下の例に示すように、ノートブックの最初のセルにある %%configure マジックコマンドの Spark spark.yarn.dist.archives プロパティを使用します。

%%configure -f { "conf": { "spark.yarn.appMasterEnv.PYSPARK_PYTHON":"./environment/bin/python", "spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON":"./environment/bin/python", "spark.yarn.dist.archives":"s3://DOC-EXAMPLE-BUCKET/prefix/my_pyspark_venv.tar.gz#environment", "spark.submit.deployMode":"cluster" } }

Spark エグゼキューター環境も同様に作成できます。

%%configure -f { "conf": { "spark.yarn.appMasterEnv.PYSPARK_PYTHON":"./environment/bin/python", "spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON":"./environment/bin/python", "spark.executorEnv.PYSPARK_PYTHON":"./environment/bin/python", "spark.yarn.dist.archives":"s3://DOC-EXAMPLE-BUCKET/prefix/my_pyspark_venv.tar.gz#environment", "spark.submit.deployMode":"cluster" } }

conda を使用して Python ライブラリをインストールすることもできます。conda を使用するのに sudo アクセスは必要ありません。プライマリノードに SSH を使用して接続して、ターミナルから conda を実行する必要があります。詳細については、「SSH を使用してプライマリノードに接続する」を参照してください。

例 - カーネルをインストールする

以下の例は、クラスターのプライマリノードに接続されている間にターミナルコマンドを使用して Kotlin カーネルをインストールする方法を示しています。

sudo /emr/notebook-env/bin/conda install kotlin-jupyter-kernel -c jetbrains
注記

これらの手順では、カーネルの依存関係はインストールされません。カーネルにサードパーティーの依存関係がある場合、ノートブックでカーネルを使用するためには、その前に、追加のセットアップ手順を実行する必要があります。

ノートブックスコープのライブラリの考慮事項および制限

ノートブックスコープのライブラリを使用する場合は、以下の点を考慮してください。

  • ノートブックスコープのライブラリは、Amazon EMR リリース 5.26.0 以降で作成したクラスターで使用できます。

  • ノートブックスコープのライブラリは、PySpark カーネルのみでの使用を意図しています。

  • すべてのユーザーがノートブックのセルから追加のノートブックスコープのライブラリをインストールできます。ノートブックのユーザーは、それらのライブラリを 1 回のノートブックセッションでのみ使用できます。他のユーザーが同じライブラリを必要とする場合や同じユーザーが別のセッションで同じライブラリを必要とする場合は、ライブラリを再インストールする必要があります。

  • アンインストールできるのは、install_pypi_package API を使用してインストールされたライブラリのみです。クラスターにプリインストールされたライブラリをアンインストールすることはできません。

  • 異なるバージョンの同じライブラリがノートブックスコープのライブラリとしてクラスターにインストールされている場合、ノートブックスコープのライブラリのバージョンはクラスター全体のライブラリのバージョンを上書きします。

ノートブックスコープのライブラリの操作

ライブラリをインストールするには、そのライブラリが存在する PyPI リポジトリに Amazon EMR クラスターがアクセスできる必要があります。

以下の例は、PySpark カーネルおよび API を使用してノートブックのセルからライブラリを一覧表示、インストール、アンインストールするシンプルなコマンドを示しています。その他の例については、「AWS Big Data Blog」の記事「Install Python libraries on a running cluster with EMR Notebooks」を参照してください。

例 - 現在のライブラリの一覧表示

以下のコマンドは、現在の Spark ノートブックセッションで使用できる Python パッケージを一覧表示します。これにより、クラスターにインストールされたライブラリと、ノートブックスコープのライブラリが一覧表示されます。

sc.list_packages()
例 - Celery ライブラリのインストール

以下のコマンドは、Celery ライブラリをノートブックスコープのライブラリとしてインストールします。

sc.install_pypi_package("celery")

このライブラリのインストール後、以下のコマンドは、そのライブラリが Spark のドライバーと実行プログラムで使用できることを確認します。

import celery sc.range(1,10000,1,100).map(lambda x: celery.__version__).collect()
例 - Arrow ライブラリのインストール、バージョンとリポジトリの指定

以下のコマンドは、Arrow ライブラリのバージョンとリポジトリ URL を指定して、そのライブラリをノートブックスコープのライブラリとしてインストールします。

sc.install_pypi_package("arrow==0.14.0", "https://pypi.org/simple")
例 - ライブラリのアンインストール

以下のコマンドは、Arrow ライブラリをアンインストールし、現在のセッションからノートブックスコープのライブラリとして削除します。

sc.uninstall_package("arrow")