AWS Glue ETL ライブラリを使用した ETL スクリプトのローカルでの開発とテスト - AWS Glue

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

AWS Glue ETL ライブラリを使用した ETL スクリプトのローカルでの開発とテスト

AWS Glue Scala ライブラリはパブリック Amazon S3 バケットで使用でき、Apache Maven ビルドシステムで消費できます。これにより、ネットワーク接続を必要とせずに Python および Scala の抽出、変換、ロード (ETL) スクリプトをローカルで開発およびテストできます。

Glueバージョン0.9およびGlueバージョン1.0以降を含む、すべてのGlueバージョンでローカル開発が可能です。AWS Glue で使用できる Python および Apache Spark のバージョンについては、「Glue version job property」を参照してください。

ライブラリは、Amazon ソフトウェアライセンス (https://aws.amazon.com/asl) とともにリリースされています。

ローカル開発の制限

AWS Glue Scala ライブラリを使用してローカルで開発する場合は、次の制限事項に注意してください。

  • AWS Glue ライブラリでアセンブリ jar (「fat jar」または「uber jar」) を作成しないでください。作成すると、次の機能が無効になるためです。

    これらの機能は、AWS Glue ジョブシステム内でのみ使用できます。

Python を使用したローカルでの開発

いくつかの前提条件ステップを完了してから、AWS Glue ユーティリティを使用して Python ETL スクリプトをテストして送信します。

ローカル Python 開発の前提条件

ローカル Python 開発に備えるには、以下の手順を実行します。

  1. github から AWS Glue Python ライブラリをダウンロードします (https://github.com/awslabs/aws-glue-libs)。

  2. 以下のいずれかの操作を行います。

    • Glue バージョン 0.9 の場合は、 master ブランチにとどまります。

    • Glueバージョン1.0以降については、ブランチを確認してください glue-1.0。 これらのバージョンはPython 3をサポートしています。

  3. Apache Maven を https://aws-glue-etl-artifacts.s3.amazonaws.com/glue-common/apache-maven-3.6.0-bin.tar.gz からインストールします。

  4. Apache Spark ディストリビューションを次のいずれかの場所からインストールします。

  5. SPARK_HOME 環境変数をエクスポートし、Spark アーカイブから抽出したルートの場所に設定します。たとえば、 と指定します。

    • Glue バージョン 0.9 の場合: export SPARK_HOME=/home/$USER/spark-2.2.1-bin-hadoop2.7

    • Glueバージョン1.0以降: export SPARK_HOME=/home/$USER/spark-2.4.3-bin-spark-2.4.3-bin-hadoop2.8

Python ETL スクリプトの実行

ローカル開発に使用できる AWS Glue jar ファイルを使用すると、AWS Glue Python パッケージをローカルで実行できます。

Python スクリプトをテストして実行するには、次のユーティリティとフレームワークを使用します。次の表に示すコマンドは、AWS Glue Python パッケージのルートディレクトリから実行されます。

ユーティリティ コマンド: 説明:
Glue Shell ./bin/gluepyspark AWS Glue ETL ライブラリと統合されるシェルで Python スクリプトを入力して実行します。
Glue Submit ./bin/gluesparksubmit 実行のために完全な Python スクリプトを送信します。
Pytest ./bin/gluepytest Python コードのユニットテストを記述して実行します。パイテスト・モジュールは、 PATH。 詳細については、 pytest文書.

Scala を使用したローカルでの開発

いくつかの前提条件ステップを完了してから、Maven コマンドを発行して Scala ETL スクリプトをローカルで実行します。

ローカル Scala 開発の前提条件

ローカルの Scala 開発に備えるには、以下のステップを実行します。

ステップ 1. ソフトウェアのインストール

このステップでは、ソフトウェアをインストールし、必要な環境変数を設定します。

  1. Apache Maven を https://aws-glue-etl-artifacts.s3.amazonaws.com/glue-common/apache-maven-3.6.0-bin.tar.gz からインストールします。

  2. Apache Spark ディストリビューションを次のいずれかの場所からインストールします。

  3. SPARK_HOME 環境変数をエクスポートし、Spark アーカイブから抽出したルートの場所に設定します。たとえば、 と指定します。

    • Glue バージョン 0.9 の場合: export SPARK_HOME=/home/$USER/spark-2.2.1-bin-hadoop2.7

    • Glueバージョン1.0以降: export SPARK_HOME=/home/$USER/spark-2.4.3-bin-spark-2.4.3-bin-hadoop2.8

ステップ 2. Maven プロジェクトの構成

AWS Glue Scala アプリケーションのテンプレートとして次の pom.xml ファイルを使用します。これには、必須の dependenciesrepositoriesplugins 要素が含まれています。交換する Glue version 文字列と 2.0.0 Glueバージョン2.0では 1.0.0 Glueバージョン1.0用、または 0.9.0 Glueバージョン0.9用。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.amazonaws</groupId> <artifactId>AWSGlueApp</artifactId> <version>1.0-SNAPSHOT</version> <name>${project.artifactId}</name> <description>AWS Glue ETL application</description> <properties> <scala.version>2.11.1</scala.version> </properties> <dependencies> <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-library</artifactId> <version>${scala.version}</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>AWSGlueETL</artifactId> <version>Glue version</version> </dependency> </dependencies> <repositories> <repository> <id>aws-glue-etl-artifacts</id> <url>https://aws-glue-etl-artifacts.s3.amazonaws.com/release/</url> </repository> </repositories> <build> <sourceDirectory>src/main/scala</sourceDirectory> <plugins> <plugin> <!-- see http://davidb.github.com/scala-maven-plugin --> <groupId>net.alchim31.maven</groupId> <artifactId>scala-maven-plugin</artifactId> <version>3.4.0</version> <executions> <execution> <goals> <goal>compile</goal> <goal>testCompile</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.6.0</version> <executions> <execution> <goals> <goal>java</goal> </goals> </execution> </executions> <configuration> <systemProperties> <systemProperty> <key>spark.master</key> <value>local[*]</value> </systemProperty> <systemProperty> <key>spark.app.name</key> <value>localrun</value> </systemProperty> <systemProperty> <key>org.xerial.snappy.lib.name</key> <value>libsnappyjava.jnilib</value> </systemProperty> </systemProperties> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <version>3.0.0-M2</version> <executions> <execution> <id>enforce-maven</id> <goals> <goal>enforce</goal> </goals> <configuration> <rules> <requireMavenVersion> <version>3.5.3</version> </requireMavenVersion> </rules> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>

Scala ETL スクリプトの実行

Maven プロジェクトのルートディレクトリから次のコマンドを実行して、Scala ETL スクリプトを実行します。

mvn exec:java -Dexec.mainClass="mainClass" -Dexec.args="--JOB-NAME jobName"

Replace (置換) mainClass スクリプトのメイン クラスの完全修飾クラス名。Replace (置換) jobName 希望するジョブ名で指定します。