使用 AWS Glue ETL 库在本地开发和测试 ETL 脚本 - AWS Glue
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

使用 AWS Glue ETL 库在本地开发和测试 ETL 脚本

AWS Glue Scala 库在公共 Amazon S3 存储桶中可用,并且可以由 Apache Maven 构建系统使用。这使您可以在本地开发和测试 Python 和 Scala 提取、转换和加载 (ETL) 脚本,而无需网络连接。

本地开发适用于所有胶粘版本,包括胶粘版本0.9和胶水1.0及更高版本。有关可与 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 (https://github.com/awslabs/aws-glue-libs) 下载 AWS Glue Python 库。

  2. 执行以下任一操作

    • 对于 Glue 版本 0.9,请继续使用 master 分支。

    • 用于1.0及更高版本的胶水,请检查分支 glue-1.0。这些版本支持Python3。

  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

    • 对于胶水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 程序包的根目录运行的。

实用工具 Command Description
Glue Shell ./bin/gluepyspark 在与 AWS Glue ETL 库集成的 shell 中输入并运行 Python 脚本。
脚本提交 ./bin/gluesparksubmit 提交完整的 Python 脚本以供执行。
Pytest ./bin/gluepytest 编写并运行 Python 代码的单元测试。PYTEST模块必须安装在 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

    • 对于胶水1.0和更高版本: export SPARK_HOME=/home/$USER/spark-2.4.3-bin-spark-2.4.3-bin-hadoop2.8

步骤 2. 配置Maven项目

使用以下 pom.xml 文件作为 AWS Glue Scala 应用程序的模板。它包含所需的 dependenciesrepositoriesplugins 元素。更换 Glue version 字符串 2.0.0 对于胶粘版本2.0, 1.0.0 适用于GLUE1.0版,或 0.9.0 适用于胶水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 使用所需的职位名称。