AWS Glue 2.0 ETL ジョブで外部 Python ライブラリを使用するにはどうすればよいですか?
AWS Glue 2.0 の抽出、変換、ロード (ETL) ジョブで外部 Python ライブラリを使用したいと考えています。
解決策
AWS Glue バージョン 2.0 では、追加の Python モジュールまたは異なるバージョンをジョブレベルでインストールできます。新しいモジュールを追加したり、既存のモジュールのバージョンを変更したりするには、--additional-python-modules ジョブパラメータキーを使用して、Python モジュールのコンマ区切りリストを含む値を指定します。これにより、AWS Glue 2.0 ETL ジョブは Python パッケージインストーラ (pip3) を使用して追加のモジュールをインストールできます。
AWS Glue ジョブに追加の Python モジュールをインストールするには:
- AWS Glue コンソールを開きます。
- ナビゲーションペインで [ジョブ] を選択します。
- Python モジュールを追加するジョブを選択します。
- [アクション] を選択してから [ジョブの編集] を選択します。
- 「セキュリティ設定、スクリプトライブラリ、およびジョブパラメータ (オプション)」セクションを展開します。
- [ジョブパラメータ] で、以下を行います。
[キー] に「--addtional-python-modules」と入力します。
[値] に「pymysql==1.0.2、s3://aws-glue-add-modules/nltk-3.6.2-py3-none-any.whl」と入力します。 - [保存] を選択します。
以下の手順は、2 つの異なるモジュールをインストールする例を示しています。
- インターネット経由の PyMySQL
- Amazon Simple Storage Service (Amazon S3) の wheel ファイルからの自然言語ツールキット (NLTK)
新しいモジュールをインストールしたり、既存のモジュールを更新したりするには、モジュール関連の依存関係をダウンロードする必要があります。つまり、これらのタスクのいずれを完了するにも、インターネットにアクセスできる必要があります。インターネットにアクセスできない場合は、「AWS Glue 2.0 を使用した Spark ETL ワークロード用の wheel から Python モジュールを構築する」を参照してください。
AWS Glue 2.0 で既に提供されているその他の Python モジュールのリストについては、「AWS Glue バージョン 2.0 で既に提供されている Python モジュール」を参照してください。
C で記述されたライブラリと拡張モジュールは、AWS Glue 2.0 でも**--additional-python-modules** オプションを使用してサポートされています。ただし、spacy や grpc など Python モジュールのサブセットをインストールするにはルート権限が必要です。ルート権限がないと、インストール中にこれらのモジュールのコンパイルが失敗します。AWS Glue は、パッケージのインストール中にルートアクセスを提供しません。解決方法は、バイナリを AWS Glue と互換性のある wheel にプリコンパイルし、その wheel をインストールすることです。
ライブラリを C ベースの言語でコンパイルするには、コンパイラがターゲットのオペレーティングシステムおよびプロセッサアーキテクチャと互換性がある必要があります。ライブラリが別のオペレーティングシステムまたはプロセッサアーキテクチャでコンパイルされている場合、wheel は AWS Glue にインストールされません。AWS Glue はマネージドサービスであるため、クラスターにアクセスしてこれらの依存関係を開発することはできません。ルート権限を必要とする C ベースの Python モジュールをプリコンパイルするには、以下を実行します。
**注:**以下に grpcio モジュールをインストールする例の手順を示します。
1. ライブラリ用に十分なボリュームスペースがある Amazon Elastic Compute Cloud (Amazon EC2) Linux インスタンスを起動します。
2. インスタンスに Docker コンテナをインストールし、非 sudo アクセスを設定して、Docker を起動します。
sudo yum install docker -y sudo usermod -a -G docker ec2-user sudo service docker start
3. 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
4. docker build を実行して Dockerfile をビルドします。以下のコマンドを実行して Docker デーモンを再起動します。
$ sudo service docker restart $ docker build -f dockerfile_grpcio .
docker build コマンドが完了すると、Docker イメージ ID を含む成功メッセージが表示されます。例:「1111222233334444が正常にビルドされました。」 次のステップで使用するために Docker イメージ ID をメモしておきます。
5. Docker コンテナから wheel ファイルを抽出します。次のコマンドを実行して .whl ファイルを抽出します。
# Get the docker image ID $ docker image ls # Run the container $ docker run -dit 111122223334444 # Verify the location of the wheel file and retrieve the name of the wheel file $ docker exec -t -i 5555666677778888 ls /root/wheel_dir/ # Copy the wheel out of docker to EC2 $ docker cp 5555666677778888:/root/wheel_dir/doc-example-wheel .
前述のコマンドで次の値を必ず置き換えてください。
- 1111222233334444 をDocker イメージ ID で置き換える
- 5555666677778888 をコンテナ ID で置き換える
- doc-example-wheel を生成されたホイールファイルの名前で置き換える
6. 次のコマンドを実行して、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/
前述のコマンドで次の値を必ず置き換えてください。
- doc-example-wheel を生成されたホイールファイルの名前で置き換える
- grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl を Python パッケージファイルの名前で置き換える
7. AWS Glue ETL ジョブの場合は、AWS Glue コンソールの [ジョブパラメータ] で次の操作を行います。 [キー] に「--addtional-python-modules」と入力します。
[値] に「s3://aws-glue-add-modules/grpcio/grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl」と入力します。
**注:**必ず grpcio-1.32.0-cp37-cp37-linux_x86_64.whl を Python パッケージファイルの名前で置き換えてください。
**重要:**AWS Glue バージョン 0.9 および 1.0 は C で記述された Python モジュールをサポートしていません。AWS Glue 0.9 および 1.0 に外部 Python ライブラリをインストールするには、「AWS Glue 1.0 または 0.9 の ETL ジョブで外部 Python ライブラリを使用するにはどうすればよいですか?」を参照してください。
関連情報
関連するコンテンツ
- 質問済み 8ヶ月前lg...
- 質問済み 6ヶ月前lg...
- 質問済み 2ヶ月前lg...
- 承認された回答質問済み 4ヶ月前lg...
- AWS公式更新しました 3年前
- AWS公式更新しました 2年前