本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 AWS Glue ETL 库在本地开发和测试 ETL 脚本
AWS Glue Scala 库在公共 Amazon S3 存储桶中可用,并且可以由 Apache Maven 构建系统使用。这使您可以在本地开发和测试 Python 和 Scala 提取、转换和加载 (ETL) 脚本,而无需网络连接。
本地开发适用于所有 AWS Glue 版本,包括 AWS Glue 版本 0.9 和 AWS Glue 版本 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 Parquet 写入器 (format="glueparquet")
这些功能仅在 AWS Glue 作业系统内可用。
使用 Docker 映像在本地开发
Docker 映像为您提供了一个两步过程来设置具有 AWS Glue 二进制文件和 Jupyter/Zeppelin 笔记本服务器的容器。有关更多信息,请参阅使用容器在本地开发 AWS Glue ETL 作业
使用 Python 进行本地开发
完成一些先决步骤,然后使用 AWS Glue 实用工具来测试和提交您的 Python ETL 脚本。
本地 Python 开发的先决条件
完成以下步骤以准备本地 Python 开发:
-
从 github (AWS Glue) 下载 https://github.com/awslabs/aws-glue-libs
Python 库。 -
执行以下任一操作:
-
对于 AWS Glue 版本 0.9,请保持在
master
分支上。 -
对于 AWS Glue 版本 1.0 及更高版本,请签出分支
glue-1.0
。 这些版本支持 Python 3。
-
-
从以下位置安装 Apache Maven:https://aws-glue-etl-artifacts.s3.amazonaws.com/glue-common/apache-maven-3.6.0-bin.tar.gz
。 -
从下列位置之一安装 Apache Spark 分发:
-
对于 AWS Glue 版本 0.9:https://aws-glue-etl-artifacts.s3.amazonaws.com/glue-0.9/spark-2.2.1-bin-hadoop2.7.tgz
-
对于 AWS Glue 版本 1.0 及更高版本:https://aws-glue-etl-artifacts.s3.amazonaws.com/glue-1.0/spark-2.4.3-bin-hadoop2.8.tgz
-
-
导出
SPARK_HOME
环境变量,将其设置为从 Spark 归档文件中提取的根位置。例如:-
对于 AWS Glue 版本 0.9:
export SPARK_HOME=/home/$USER/spark-2.2.1-bin-hadoop2.7
-
对于 AWS 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 程序包
实用工具 | 命令 | 描述 |
---|---|---|
AWS Glue Shell | ./bin/gluepyspark |
在与 AWS Glue ETL 库集成的 shell 中输入并运行 Python 脚本。 |
AWS Glue 提交 | ./bin/gluesparksubmit |
提交完整的 Python 脚本以供执行。 |
Pytest | ./bin/gluepytest |
编写并运行 Python 代码的单元测试。必须在 PATH 中安装 pytest 模块并使其可用。 有关更多信息,请参阅 pytest 文档 |
使用 Scala 在本地开发
完成一些先决步骤,然后发出 Maven 命令以在本地运行 Scala ETL 脚本。
本地 Scala 开发的先决条件
完成这些步骤以准备本地 Scala 开发。
步骤 1:安装软件
在此步骤中,您将安装软件并设置所需的环境变量。
-
从以下位置安装 Apache Maven:https://aws-glue-etl-artifacts.s3.amazonaws.com/glue-common/apache-maven-3.6.0-bin.tar.gz
。 -
从下列位置之一安装 Apache Spark 分发:
-
对于 AWS Glue 版本 0.9:https://aws-glue-etl-artifacts.s3.amazonaws.com/glue-0.9/spark-2.2.1-bin-hadoop2.7.tgz
-
对于 AWS Glue 版本 1.0 及更高版本:https://aws-glue-etl-artifacts.s3.amazonaws.com/glue-1.0/spark-2.4.3-bin-hadoop2.8.tgz
-
-
导出
SPARK_HOME
环境变量,将其设置为从 Spark 归档文件中提取的根位置。例如:-
对于 AWS Glue 版本 0.9:
export SPARK_HOME=/home/$USER/spark-2.2.1-bin-hadoop2.7
-
对于 AWS Glue 版本 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 应用程序的模板。它包含所需的 dependencies
、repositories
和 plugins
元素。将 Glue
version
字符串替换为 1.0.0
(对于 AWS Glue 版本 1.0 及更高版本)或 0.9.0
(对于 AWS 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-NAMEjobName
"
Replace mainClass
替换为脚本主类的完全限定类名。Replace jobName
替换为所需的作业名称。
配置测试环境
有关配置本地测试环境的示例,请参阅以下博客文章:
如果要使用开发终端节点或笔记本来测试 ETL 脚本,请参阅使用开发终端节点来开发脚本。
不支持将开发终端节点用于 AWS Glue 版本 2.0 作业。有关更多信息,请参阅运行具有较少启动时间的 Spark ETL 作业。