AWS Glue 2.0 ETL ジョブで外部 Python ライブラリを使用するにはどうすればよいですか?

所要時間3分
0

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 モジュールをインストールするには:

  1. AWS Glue コンソールを開きます。
  2. ナビゲーションペインで [ジョブ] を選択します。
  3. Python モジュールを追加するジョブを選択します。
  4. [アクション] を選択してから [ジョブの編集] を選択します。
  5. セキュリティ設定、スクリプトライブラリ、およびジョブパラメータ (オプション)」セクションを展開します。
  6. [ジョブパラメータ] で、以下を行います。
    [キー] に「--addtional-python-modules」と入力します。
    [値] に「pymysql==1.0.2、s3://aws-glue-add-modules/nltk-3.6.2-py3-none-any.whl」と入力します。
  7. [保存] を選択します。

以下の手順は、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** オプションを使用してサポートされています。ただし、spacygrpc など 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 ライブラリを使用するにはどうすればよいですか?」を参照してください。


関連情報

AWS Glue で Python ライブラリを使用する

AWS公式
AWS公式更新しました 2年前
コメントはありません