Amazon EMR クラスターに Python ライブラリをインストールする際の問題をトラブルシューティングしたい
簡単な説明
EMR クラスターに Python ライブラリをインストールしようとしていますが、次のいずれかの問題が発生しています。
- EMR クラスターに Python ライブラリをインストールできません。
- Python パッケージは Amazon EMR ではご利用いただけません。
- インストールされた Python パッケージは、新しくプロビジョニングされたコアノードまたはタスクノードでは使用できません。
Python ライブラリを EMR クラスターにインストールするには、ブートストラップアクションを使用するか、各ノードに手動でログインします。ブートストラップアクションを使用して Python ライブラリをインストールし、クラスターのプロビジョニングとクラスターのサイズ変更中にライブラリがすべてのノードに自動的にインストールされるようにします。
解決方法
EMR クラスターに Python ライブラリをインストールできない、または Python パッケージが Amazon EMR で利用できない
パッケージが見つからないエラーが発生したノードにログインします。次に、次のコマンドを使用して Python ライブラリがインストールされていることを確認します。
$ sudo pip3 freeze | grep pandas
pandas==1.3.5
$ sudo pip3 freeze | grep numpy
numpy==1.21.6
または、Python ライブラリが Python シェルからインストールされていることを確認します。
$ python
Python 3.7.15 (default, Oct 31 2022, 22:44:31)
[GCC 7.3.1 20180712 (Red Hat 7.3.1-15)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas as pd
>>> import numpy as np
上記のコマンドが ModuleNotFoundError: No module named 'python_library' などのエラーを返す場合、ライブラリはインストールされていません。
次の例に示すように、pip コマンドを使用して EMR クラスターに Python ライブラリをインストールできます。
sudo pip3 install pandas scipy sklearn
sudo pip3 install file://requirements.txt
前述の例では、requirements.txt はインストールする必要がある Python パッケージとライブラリのリストです。
詳細については、次を参照してください。
追加のカスタムライブラリをインストールするには、pip install コマンドを使用します。
Python はデフォルトで Amazon EMR にインストールされます。ただし、すべての Python ライブラリがインストールされているわけではありません。詳細については、「カーネルとライブラリのインストールと使用」を参照してください。
クラスターにインストールされている Python ライブラリの一覧を表示するには、sudo pip3 freeze コマンドを使用します。sudo pip3 freeze コマンドの例と出力例を以下に示します。
$ sudo pip3 freeze
aws-cfn-bootstrap==2.0
beautifulsoup4==4.9.3
boto==2.49.0
click==8.1.3
docutils==0.14
jmespath==1.0.1
joblib==1.2.0 l
ockfile==0.11.0
lxml==4.9.1
mysqlclient==1.4.2
nltk==3.7
nose==1.3.4
numpy==1.20.0
py-dateutil==2.2
pystache==0.5.4
python-daemon==2.2.3
python37-sagemaker-pyspark==1.4.2
pytz==2022.6
PyYAML==5.4.1
regex==2021.11.10
simplejson==3.2.0
six==1.13.0
tqdm==4.64.1
windmill==1.6
Python パッケージは、クラスタースケーリング中に新しくプロビジョニングされたコアまたはタスクノードでは使用できません
個々のノードに手動でインストールされた Python パッケージは、クラスターのスケーリング中に新しくプロビジョニングされたコアノードまたはタスクノードでは使用できない場合があります。
新しくプロビジョニングされたノードにパッケージが存在することを確認するには、手動でインストールするのではなく、ブートストラップアクションを使用してライブラリをインストールします。
インストールするブートストラップスクリプトがあるにもかかわらず、目的のパッケージが利用できない場合があります。このような場合は、ブートストラップスクリプトのログを確認して、何が問題だったかを確認します。ブートストラップスクリプトのログを確認するには、次の操作を行います。
新しいインスタンスが実行中の場合:
1. SSH を使用してプライマリノードに接続します。
2. ブートストラップログに次の場所でエラーがないかどうかを確認します。
- /var/log/bootstrap-actions/N/stderr
- /var/log/bootstrap-actions/N/stdout
前述のパスでは、N はブートストラップスクリプト番号 (1、2、3 など) を表します。
新しいインスタンスがプロビジョニングに失敗した場合:
ブートストラップログは、Amazon EMR ログ記録用に設定した Amazon Simple Storage Service (Amazon S3) バケットにキャプチャされます。パスは以下のとおりです。
- s3://DOC-EXAMPLE-LOG-BUCKET/cluster-id/node/instance-id/bootstrap-actions/N/stdout
- s3://DOC-EXAMPLE-LOG-BUCKET/cluster-id/node/instance-id/bootstrap-actions/N/stderr
前述のパスでは、N はブートストラップスクリプト番号 (たとえば、1,2,3 など) を表します。