実行環境、Conda 環境隔離、または PEX パッケージングを使用して、サードパーティの Python ライブラリを EMR Serverless Spark に統合できます。各方法は、分散コンピューティングのシナリオにおいて依存関係の安定性と柔軟性を確保します。
背景情報
ご自身の要件に最も適した方法を選択してください。
|
メソッド |
シナリオ |
|
コンソールで |
|
|
Conda はクロスプラットフォームのパッケージおよび環境管理システムであり、それぞれ独自の Python バージョンとライブラリ依存関係を持つ隔離された環境を作成できます。 |
|
|
PEX (Python EXecutable) は、Python アプリケーションとそのすべての依存関係を単一の実行可能ファイルにパッケージ化します。 |
前提条件
ワークスペースが作成されました。詳細については、「ワークスペースを作成する」をご参照ください。
制限事項
Python 3.8 以降がインストールされている必要があります。本トピックの例では Python 3.8 を使用しています。
操作手順
メソッド 1:実行環境を使用する
ステップ 1:実行環境の作成
-
環境ページに移動します。
-
E-MapReduce コンソールにログインします。
-
左側のナビゲーションウィンドウで、EMR Serverless > Spark を選択します。
-
Spark ページで、対象のワークスペース名をクリックします。
-
EMR Serverless Spark ページの左ナビゲーションバーで、Environment を選択します。
-
-
Create Environment をクリックします。
-
Create Environment ページで、Add Library をクリックします。
パラメーターの詳細については、「実行環境の管理」をご参照ください。
-
New Library ダイアログボックスで、ソースタイプを PyPI に設定し、PyPI Package パラメーターを構成してから、OK をクリックします。
PyPI Package フィールドには、ライブラリ名とバージョンを入力します。バージョンを指定しない場合、デフォルトで最新バージョンがインストールされます。
この例では、
fakerおよびgeopyライブラリを追加します。 -
create をクリックします。
[作成] をクリックすると、環境の初期化が開始されます。
ステップ 2:リソースを OSS にアップロードする
-
pyspark_third_party_libs_demo.py をクリックして、必要なリソースファイルをダウンロードします。
この例では、サードパーティのライブラリを使用した PySpark により合成データを生成し、地理空間分析を実行します。
fakerライブラリはランダムな位置情報を含む合成ユーザーデータを生成し、geopyライブラリは各位置とエッフェル塔との距離を計算して、10 キロメートル圏内にいるユーザーを特定します。以下の内容で
pyspark_third_party_libs_demo.pyというサンプルスクリプトを作成することもできます。 -
pyspark_third_party_libs_demo.pyを OSS にアップロードします。手順については、「シンプルアップロード」をご参照ください。
ステップ 3:タスクの開発と実行
-
EMR Serverless Spark ページの左側ナビゲーションウィンドウで、Development をクリックします。
-
Development タブで、
アイコンをクリックします。 -
Create ダイアログボックスで、名前を入力し、タイプとして を選択してから、OK をクリックします。
-
右上隅でキューを選択します。
-
新しい開発タブで、以下のパラメーターを構成し、他のパラメーターはデフォルト設定のままにしてから、実行 をクリックします。
パラメーター
説明
Main Python Resources
OSS を選択し、
pyspark_third_party_libs_demo.pyの OSS パスを入力します。例:oss://<yourBucketName>/pyspark_third_party_libs_demo.pyEnvironment
ドロップダウンリストから、作成した実行環境を選択します。
-
タスク実行後、Execution Records セクションに移動し、タスクの [操作] 列で Log Exploration をクリックします。
-
Log Exploration タブで、ログ情報を確認します。
たとえば、Driver Log の Stdout タブでは、次のような情報が表示されます。
Generated sample data: +--------------------+-------------------+------------------+------------------+ | user_id| name| latitude| longitude| +--------------------+-------------------+------------------+------------------+ |73d4565c-8cdf-4bc...| Garrett Robertson| 48.81845614776422|2.4087517234236064| |0fc364b1-6759-416...| Dawn Gonzalez| 48.68654896170054|2.4708555780468013| |2ab1f0aa-5552-4e1...|Alexander Gallagher| 48.87603770688707|2.1209399987431246| |1cabbdde-e703-4a8...| David Morris|48.656356532418116|2.2503952330408175| |8b7938a0-b283-401...| Shannon Perkins| 48.82915001905855| 2.410743969589327| +--------------------+-------------------+------------------+------------------+ only showing top 5 rows Found 24 users within a 10-kilometer range: +-----------------+------------------+------------------+-----------+ | name| latitude| longitude|distance_km| +-----------------+------------------+------------------+-----------+ |Garrett Robertson| 48.81845614776422|2.4087517234236064| 9.490705| | Shannon Perkins| 48.82915001905855| 2.410743969589327| 9.131355| | Alex Harris| 48.82547383207313|2.3579336032430027| 5.923493| | Tammy Ramos| 48.84668267431606|2.3606455536493574| 5.026109| | Ivan Christian| 48.89224239228342|2.2811025348668195| 3.8897192| | Vernon Humphrey| 48.93142188723839| 2.306957802222233| 8.171813| | Shawn Rodriguez|48.919907710882654|2.2270993307836044| 8.439087| | Robert Fisher|48.794216103154646|2.3699024070507906| 9.033209| | Heather Collier|48.822957591865205|2.2993033803043454| 3.957171| | Dawn White|48.877816307255586|2.3743880390928878| 6.246059| +-----------------+------------------+------------------+-----------+ only showing top 10 rows
メソッド 2:Conda で環境を管理する
ステップ 1:Conda 環境の構築とデプロイ
-
Alibaba Cloud Linux 3 を実行し、パブリック IP アドレスを持ち、x86 アーキテクチャを使用する ECS インスタンスを作成します。詳細については、「ウィザードを使用したインスタンスの作成」をご参照ください。
説明既存の EMR on ECS クラスターにアイドル状態のノードがある場合は、x86 アーキテクチャを使用している限り、そのノードを利用できます。
-
以下のコマンドを実行して Miniconda をインストールします。
wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh chmod +x Miniconda3-latest-Linux-x86_64.sh ./Miniconda3-latest-Linux-x86_64.sh -b source miniconda3/bin/activate -
Python 3.8 と NumPy を使用する Conda 環境を構築します。
conda create -y -n pyspark_conda_env -c conda-forge conda-pack numpy python=3.8 conda activate pyspark_conda_env conda pack -f -o pyspark_conda_env.tar.gz
ステップ 2:リソースを OSS にアップロードする
-
kmeans.py および kmeans_data.txt をクリックして、必要なリソースファイルをダウンロードします。
以下の内容でサンプルスクリプト
kmeans.pyおよびデータファイルkmeans_data.txtを作成することもできます。 -
pyspark_conda_env.tar.gz、kmeans.py、およびkmeans_data.txtを OSS にアップロードします。手順については、「シンプルアップロード」をご参照ください。
ステップ 3:タスクの開発と実行
-
EMR Serverless Spark ページの左側ナビゲーションウィンドウで、Development をクリックします。
-
Development タブで、
アイコンをクリックします。 -
Create ダイアログボックスで、名前を入力し、タイプとして を選択してから、OK をクリックします。
-
右上隅でキューを選択します。
-
新しい開発タブで、以下のパラメーターを構成し、他のパラメーターはデフォルト設定のままにしてから、実行 をクリックします。
パラメーター
説明
Main Python Resources
OSS を選択し、
kmeans.pyの OSS パスを入力します。例:oss://<yourBucketName>/kmeans.pyExecution Parameters
実行パラメーターとして、
kmeans_data.txtの OSS パスとクラスター数を入力します。例:
oss://<yourBucketName>/kmeans_data.txt 2Archive Resources
OSS を選択し、
pyspark_conda_env.tar.gzの OSS パスを入力します。次の形式を使用します:
oss://<yourBucketName>/pyspark_conda_env.tar.gz#condaenvSpark Configuration
spark.pyspark.driver.python ./condaenv/bin/python spark.pyspark.python ./condaenv/bin/python -
タスク実行後、下部の Execution Records エリアで、タスクの [操作] 列にある Log Exploration をクリックします。
-
Log Exploration タブで、ログ情報を確認します。
たとえば、Driver Log の Stdout タブでは、次のような出力が表示されます。
Final centers: [array([0.1, 0.1, 0.1]), array([9.1, 9.1, 9.1])] Total Cost: 0.11999999999999958
メソッド 3:PEX で依存関係をパッケージ化する
ステップ 1:PEX パッケージの作成
-
Alibaba Cloud Linux 3 を実行し、パブリック IP アドレスを持ち、x86 アーキテクチャを使用する ECS インスタンスを作成します。詳細については、「ウィザードを使用したインスタンスの作成」をご参照ください。
説明既存の EMR on ECS クラスターにアイドル状態のノードがある場合は、x86 アーキテクチャを使用している限り、そのノードを利用できます。
-
PEX および wheel ツールをインストールします。
pip3.8 install --user pex wheel \ --trusted-host mirrors.cloud.aliyuncs.com \ -i http://mirrors.cloud.aliyuncs.com/pypi/simple/ -
必要なライブラリの wheel ファイルを一時ディレクトリにダウンロードします。
pip3.8 wheel -w /tmp/wheel \ pyspark==3.3.1 pandas==1.5.3 pyarrow==15.0.1 numpy==1.24.4 \ --trusted-host mirrors.cloud.aliyuncs.com \ -i http://mirrors.cloud.aliyuncs.com/pypi/simple/ -
PEX ファイルを生成します。
pex -f /tmp/wheel --no-index \ pyspark==3.3.1 pandas==1.5.3 pyarrow==15.0.1 numpy==1.24.4 \ -o spark331_pandas153.pex
ステップ 2:PEX ファイルを OSS にアップロードする
-
kmeans.py および kmeans_data.txt をクリックして、必要なリソースファイルをダウンロードします。
-
spark331_pandas153.pex、kmeans.py、およびkmeans_data.txtを OSS にアップロードします。手順については、「シンプルアップロード」をご参照ください。説明この例では、Spark 3.3.1 と pandas、pyarrow、numpy を使用しています。選択するエンジンバージョンに基づいて、他の PySpark バージョンをパッケージ化できます。エンジンバージョンの詳細については、「エンジンバージョン」をご参照ください。
ステップ 3:タスクの開発と実行
-
EMR Serverless Spark ページの左側ナビゲーションウィンドウで、Development をクリックします。
-
Development タブで、
アイコンをクリックします。 -
Create ダイアログボックスで、名前を入力し、タイプとして を選択してから、OK をクリックします。
-
右上隅でキューを選択します。
-
新しい開発タブで、以下のパラメーターを構成し、他のパラメーターはデフォルト設定のままにしてから、実行 をクリックします。
パラメーター
説明
Main Python Resources
OSS を選択し、
kmeans.pyの OSS パスを入力します。例:oss://<yourBucketName>/kmeans.pyExecution Parameters
実行パラメーターとして、
kmeans_data.txtの OSS パスとクラスター数を入力します。例:
oss://<yourBucketName>/kmeans_data.txt 2File Resource
OSS を選択し、
spark331_pandas153.pexの OSS パスを入力します。例:oss://<yourBucketName>/spark331_pandas153.pexSpark Configuration
spark.pyspark.driver.python ./spark331_pandas153.pex spark.pyspark.python ./spark331_pandas153.pex -
タスク実行後、Execution Records セクションに移動し、タスクの [操作] 列で Log Exploration をクリックします。
-
Log Exploration タブで、ログ情報を確認します。
たとえば、Driver Log の Stdout タブでは、次のような出力が表示されます。
Final centers: [array([0.1, 0.1, 0.1]), array([9.1, 9.1, 9.1])] Total Cost: 0.11999999999999958
関連ドキュメント
その他の開発方法については、「バッチまたはストリーミングタスクの開発」をご参照ください。