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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用本地开发和测试 ETL 脚本AmazonETL 库中的 Glue

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

本地开发是可用于所有AmazonGlue 版本,包括AmazonGlue 版本 0.9 及AmazonGlue 版本 1.0 及更高版本。有关可与配合使用的 Python 和 Apache Spark 版本的信息。AmazonGlue,请参阅Glue version job property

该库随 Amazon 软件许可证 (http://www.amazonaws.cn/asl) 一起发布。

本地开发限制

使用时,请记住以下限制。AmazonGlue 卡拉库在本地开发.

  • 避免创建程序集 jar(“胖 jar” 或 “uber jar”),使用AmazonGlue 库,因为它会导致以下功能被禁用:

    这些功能仅在AmazonGlue 作业系统。

使用 Docker 映像进行本地开发

Docker 映像为您提供了一个两步的过程来使用AmazonGlue 二进制文件和朱皮/齐柏林笔记本服务器。有关更多信息,请参阅 。开发Amazon使用容器在本地 Glue 合 ETL 作业

使用 Python 进行本地开发

完成一些先决步骤,然后使用Amazon用于测试和提交您的 Python ETL 脚本的 Glue 工具。

本地 Python 开发的先决条件

完成以下步骤以准备本地 Python 开发:

  1. 克隆Amazon从 GitHub Glue 合 Python 存储库https://github.com/awslabs/aws-glue-libs)。

  2. 请执行下列操作之一:

    • 适用于AmazonGlue 版本 0.9,请继续使用master分支。

    • 适用于AmazonGlue 版本 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 归档文件中提取的根位置。例如:

    • 适用于AmazonGlue 版本 0.9:export SPARK_HOME=/home/$USER/spark-2.2.1-bin-hadoop2.7

    • 适用于AmazonGlue 版本 1.0 及更高版本:export SPARK_HOME=/home/$USER/spark-2.4.3-bin-spark-2.4.3-bin-hadoop2.8

运行您的 Python ETL 脚本

随着Amazon可用于本地开发的 Glue jar 文件,您可以运行AmazonGlue Python 软件包本地。

使用以下实用工具和框架来测试和运行 Python 脚本。下表中列出的命令是从AmazonGlue 蟒蛇包

实用工具 命令 描述
AmazonGlue Shell ./bin/gluepyspark 在与AmazonGlue ETL 库。
Amazon脚本提交 ./bin/gluesparksubmit 提交完整的 Python 脚本以供执行。
Pytest ./bin/gluepytest 编写并运行 Python 代码的单元测试。必须在 PATH 中安装 pytest 模块并使其可用。有关更多信息,请参阅 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 归档文件中提取的根位置。例如:

    • 适用于AmazonGlue 版本 0.9:export SPARK_HOME=/home/$USER/spark-2.2.1-bin-hadoop2.7

    • 适用于AmazonGlue 版本 1.0 及更高版本:export SPARK_HOME=/home/$USER/spark-2.4.3-bin-spark-2.4.3-bin-hadoop2.8

第 2 步:配置您的 Maven 项目

请使用以下pom.xml文件作为您的AmazonGlue 卡拉应用程序. 它包含所需的 dependenciesrepositoriesplugins 元素。将Glue version字符串1.0.0对于 来说为AmazonGlue 版本 1.0 及更高版本,或0.9.0对于 来说为AmazonGlue 版本 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>Amazon 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"

mainClass 替换为脚本主类的完全限定类名。将 jobName 替换为所需的作业名称。

配置测试环境

有关配置本地测试环境的示例,请参阅以下博客文章:

如果要使用开发端点或笔记本电脑测试 ETL 脚本,请参阅使用开发终端节点来开发脚本

注意

开发端点不支持与AmazonGlue 版本 2.0。有关更多信息,请参阅 。运行 Spark ETL 作业,缩短启动时间