EMR クラスターに Python ライブラリをインストールする際に発生する問題をトラブルシューティングする方法を教えてください。

所要時間2分
0

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 など) を表します。


AWS公式
AWS公式更新しました 1年前