Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
AWS Glue の ETL ジョブで外部 Python ライブラリを使用する方法を教えてください。
AWS Glue の抽出、変換、ロード (ETL) ジョブで外部 Python ライブラリを使用したいと考えています。
簡単な説明
AWS Glue バージョン 2.0、3.0、4.0 を使用する場合、ジョブレベルで追加の Python モジュールや別々のモジュールバージョンをインストールできます。新しいモジュールを追加したり、既存のモジュールのバージョンを変更したりするには、ジョブパラメータキー --additional-python-modules を使用します。キーの値は、カンマで区切られた Python モジュール名のリストです。このパラメータを使用すると、AWS Glue ETL ジョブは Python パッケージインストーラ (pip3) を使用して追加のモジュールをインストールします。
--additional-python-modules パラメーターを使用して、C ベースの言語で記述された Python ライブラリをインストールすることもできます。
解決策
Python モジュールのインストールまたは更新
AWS Glue ジョブに追加の Python モジュールをインストールするには、次の手順を実行します。
- AWS Glue コンソールを開きます。
- ナビゲーションペインで [ジョブ] を選択します。
- Python モジュールを追加するジョブを選択します。
- [アクション] を選択してから [ジョブの編集] を選択します。
- 「セキュリティ設定、スクリプトライブラリ、およびジョブパラメータ (オプション)」セクションを展開します。
- [ジョブパラメータ] で、以下を行います。
[キー] に「--addtional-python-modules」と入力します。
[値] に、追加するモジュールのコンマ区切りリストを入力します。 - [保存] を選択します。
たとえば、PyMySQL のバージョン 1.0.2 と Natural Language Toolkit (NLTK) のバージョン 3.6.2 という、2 つの新しいモジュールを追加するとします。PyMySQL モジュールはインターネットからインストールし、NLTK モジュールは Amazon Simple Storage Service (Amazon S3) バケットからインストールします。その場合、パラメータキー --additional-python-modules の値は pymysql==1.0.2, s3://aws-glue-add-modules/nltk-3.6.2-py3-none-any.whl になります。
一部のモジュールには、他のモジュールへの依存関係があります。このようなモジュールをインストールまたは更新する場合、そのモジュールが依存する他のモジュールもダウンロードする必要があります。したがって、モジュールをインストールまたは更新するためには、インターネットにアクセスできる必要があります。インターネットにアクセスできない場合は、「AWS Glue 2.0 を使用して Spark ETL ワークロード用の wheel から Python モジュールを構築する」を参照してください。
AWS Glue の各バージョンにデフォルトで含まれている Python モジュールのリストについては、「AWS Glue で提供済みの Python モジュール」を参照してください。
C ベースの Python モジュールをインストールする
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
AWS Glue は、--additional-python-modules パラメータのある、C で記述されたライブラリと拡張機能もサポートしています。ただし、spacy や grpc などの一部の Python モジュールのインストールには root 権限が必要です。AWS Glue は、パッケージのインストール中に root アクセス許可を提供しません。バイナリを AWS Glue と互換性のある wheel に事前コンパイルし、その wheel をインストールすると、この問題を解決できます。
ライブラリを C ベースの言語でコンパイルするには、コンパイラがターゲットのオペレーティングシステムおよびプロセッサアーキテクチャと互換性がある必要があります。ライブラリが別のオペレーティングシステムまたはプロセッサアーキテクチャでコンパイルされている場合、wheel は AWS Glue にインストールされません。AWS Glue はマネージドサービスであるため、クラスターにアクセスしてこれらの依存関係を作成することはできません。
root 権限を必要とする C ベースの Python モジュールを事前コンパイルするには、次の手順を実行します。
-
ライブラリ用に十分なボリュームスペースがある Amazon Elastic Compute Cloud (Amazon EC2) Linux インスタンスを起動します。
-
EC2 インスタンスに Docker をインストールし、sudo 以外のアクセスを設定して、Docker を起動します。上記を行うには、以下のコマンドを実行します。
Docker をインストールします。
sudo yum install docker -y
sudo 以外のアクセスを設定します。
sudo usermod -a -G docker ec2-user
Docker を起動します。
sudo service docker start
-
モジュール用の Dockerfile ファイルを作成します。たとえば、grpcio モジュールをインストールするには、dockerfile_grpcio というファイルを作成し、次の内容をそのファイルにコピーします。
\# Base for AWS Glue FROM amazonlinux RUN yum update -y RUN yum install shadow-utils.x86\_64 -y RUN yum install -y java-1.8.0-openjdk.x86\_64 RUN yum install -y python3 RUN yum install -y cython doxygen numpy scipy gcc autoconf automake libtool zlib-devel openssl-devel maven wget protobuf-compiler cmake make gcc-c++ # Additional components needed for grpcio WORKDIR /root RUN yum install python3-devel -y RUN yum install python-devel -y RUN pip3 install wheel # Install grpcio and related modules RUN pip3 install Cython RUN pip3 install cmake scikit-build RUN pip3 install grpcio # Create a directory for the wheel RUN mkdir wheel\_dir # Create the wheel RUN pip3 wheel grpcio -w wheel\_dir
-
docker build を実行して Dockerfile をビルドします。
docker build -f dockerfile\_grpcio .
-
Docker デーモンを再起動します。
sudo service docker restart
docker build コマンドが完了すると、Docker イメージ ID を含む成功メッセージが表示されます。(「1111222233334444が正常にビルドされました」など。)次のステップで使用するために Docker イメージ ID を書き留めておきます。
-
Docker コンテナから wheel ファイル (.whl) を抽出します。上記を行うには、以下のコマンドを実行します。
Docker イメージ ID を取得します。
docker image ls
コンテナを実行します。1111222233334444 は、実際の Docker イメージ ID に置き換えます。
docker run -dit 111122223334444
wheel ファイルの場所を確認し、wheel ファイル名を取得します。5555666677778888 は、実際のコンテナ ID に置き換えます。
docker exec -t -i 5555666677778888 ls /root/wheel\_dir/
wheel を Docker コンテナから Amazon EC2 にコピーします。
docker cp 5555666677778888:/root/wheel\_dir/doc-example-wheel .
注: doc-example-wheel は、生成された wheel ファイル名に置き換えます。
-
wheel を Amazon S3 にアップロードするために、次のコマンドを実行します。
aws s3 cp doc-example-wheel s3://path/to/wheel/
aws s3 cp grpcio-1.32.0-cp37-cp37m-linux\_x86\_64.whl s3://aws-glue-add-modules/grpcio/
注: grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl は、お使いの Python パッケージファイル名に置き換えます。
-
AWS Glue コンソールを開きます。
-
AWS Glue ETL ジョブの [ジョブパラメータ] に、以下を入力します。
[キー] に「--addtional-python-modules」と入力します。
[値] に s3://aws-glue-add-modules/grpcio/grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl と入力します。
関連情報
関連するコンテンツ
- 質問済み 2ヶ月前lg...
- 質問済み 4ヶ月前lg...
- 質問済み 2ヶ月前lg...
- 質問済み 2年前lg...
- 質問済み 1年前lg...
- AWS公式更新しました 2ヶ月前
- AWS公式更新しました 3年前