Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Desarrollo y prueba de scripts de trabajos de AWS Glue a nivel local
Cuando desarrolle y pruebe sus scripts de trabajo Spark de AWS Glue, hay varias opciones disponibles:
Consola de AWS Glue Studio
Visual editor (Editor visual)
Editor de scripts
Cuaderno de AWS Glue Studio
Sesiones interactivas
Cuadernos de Jupyter
Imagen de Docker
Desarrollo local
Desarrollo remoto
Biblioteca de ETL AWS Glue Studio
Desarrollo local
Puede elegir cualquiera de las opciones anteriores en función de sus requisitos.
Si prefiere no tener código o menos experiencia en código, el editor visual de AWS Glue Studio es una buena opción.
Si prefiere una experiencia de cuaderno interactiva, el cuaderno de AWS Glue Studio es una buena opción. Para obtener más información, consulte Uso de los cuadernos con AWS Glue Studio y AWS Glue. Si desea utilizar su propio entorno local, las sesiones interactivas son una buena opción. Para obtener más información, consulte Uso de sesiones interactivas con AWS Glue.
Si prefiere la experiencia de desarrollo local o remoto, la imagen de Docker es una buena opción. Esto le ayuda a desarrollar y probar el script de trabajo Spark de AWS Glue en cualquier lugar que prefiera sin tener que incurrir en costos de AWS Glue.
Si prefiere el desarrollo local sin Docker, instalar el directorio de bibliotecas ETL de AWS Glue en forma local es una buena opción.
Desarrollo mediante AWS Glue Studio
El editor visual AWS Glue Studio es una interfaz gráfica que facilita la creación, ejecución y supervisión de los trabajos de extracción, transformación y carga (ETL) en AWS Glue. Puede componer visualmente flujos de trabajo de transformación de datos y ejecutarlos sin problemas en el motor de ETL sin servidor basado en Apache Spark de AWS Glue. Puede inspeccionar los resultados de esquema y datos en cada paso del trabajo. Para obtener más información, consulte la Guía del usuario de AWS Glue Studio.
Desarrollo mediante sesiones interactivas
Las sesiones interactivas le permiten crear y probar aplicaciones desde el entorno que elija. Para obtener más información, consulte Uso de sesiones interactivas con AWS Glue.
Desarrollo mediante una imagen de Docker
nota
No se han realizado pruebas de las instrucciones de esta sección en los sistemas operativos Microsoft Windows.
Para el desarrollo local y las pruebas en plataformas Windows, consulte el blog Building an AWS Glue ETL pipeline locally without an AWS account (Creación de una canalización de ETL de AWS Glue en forma local sin una cuenta AWS)
Para una plataforma de datos lista para producción, el proceso de desarrollo y la canalización de CI/CD para trabajos de AWS Glue es un tema clave. Puede desarrollar y probar trabajos de AWS Glue de manera flexible en un contenedor de Docker. AWS Glue aloja las imágenes de Docker en Docker Hub para configurar el entorno de desarrollo con utilidades adicionales. Puede utilizar su IDE, cuaderno o REPL preferidos mediante la biblioteca de ETL de AWS Glue. En este tema, se describe cómo desarrollar y probar trabajos de versión 4.0 AWS Glue en un contenedor de Docker mediante la utilización de una imagen de Docker.
Las siguientes imágenes de Docker están disponibles para AWS Glue en Docker Hub.
Para la versión 4.0 AWS Glue:
amazon/aws-glue-libs:glue_libs_4.0.0_image_01
Para la versión 3.0 de AWS Glue:
amazon/aws-glue-libs:glue_libs_3.0.0_image_01
Para la versión 2.0 de AWS Glue:
amazon/aws-glue-libs:glue_libs_2.0.0_image_01
Estas imágenes son para x86_64. Se recomienda realizar pruebas en esta arquitectura. Sin embargo, es posible rediseñar una solución de desarrollo local a partir de imágenes base no compatibles.
Este ejemplo describe el uso de amazon/aws-glue-libs:glue_libs_4.0.0_image_01
y la ejecución del contenedor en un equipo local. Esta imagen de contenedor ha sido probada para trabajos de versión 3.3 de Spark de AWS Glue. Esta imagen contiene lo siguiente:
Amazon Linux
Biblioteca de ETL de AWS Glue (aws-glue-libs
) Apache Spark 3.3.0
Servidor de historial de Spark
Laboratorio de Jupyter
Livy
Otras dependencias de biblioteca (el mismo conjunto que las del sistema de trabajo de AWS Glue)
Complete una de las siguientes secciones de acuerdo con sus requisitos:
Configurar el contenedor para usar spark-submit
Configurar el contenedor para usar el intérprete de comandos REPL (PySpark)
Configurar el contenedor para utilizar Pytest
Configurar el contenedor para usar Jupyter Lab
Configurar el contenedor para utilizar Visual Studio Code
Requisitos previos
Antes de empezar, asegúrese de que Docker esté instalado y que el daemon Docker se esté ejecutando. Para ver las instrucciones de instalación, consulte la documentación de Docker para Mac
Para obtener más información sobre las restricciones en el momento de desarollar el código AWS Glue en forma local, consulte Restricciones de desarrollo local.
Configuración de AWS
Para habilitar llamadas a la API de AWS desde el contenedor, configure las credenciales de AWS siguiendo estos pasos. En las siguientes secciones, utilizaremos este perfil con nombre AWS.
-
Configure la AWS CLI, con un perfil con nombre. Para obtener más información sobre la configuración de AWS CLI, consulte Opciones de los archivos de configuración y credenciales en la documentación de AWS CLI.
Ejecute el siguiente comando en un terminal:
PROFILE_NAME="
<your_profile_name>
"
Es posible que también necesite configurar la variable de entorno AWS_REGION para especificar la Región de AWS a la cual se enviarán las solicitudes.
Configuración y ejecución del contenedor
La configuración del contenedor para que ejecute el código de PySpark a través del comando spark-submit incluye los siguientes pasos de alto nivel:
Para extraer la imagen de Docker Hub.
Ejecute el contenedor.
Extracción de la imagen desde Docker Hub
Ejecute el siguiente comando para extraer la imagen del Docker Hub:
docker pull amazon/aws-glue-libs:glue_libs_4.0.0_image_01
Ejecución del contenedor
Ahora puede ejecutar un contenedor mediante esta imagen. Puede elegir cualquiera de los siguientes según sus requisitos.
spark-submit
Puede ejecutar un script de trabajo de AWS Glue ejecutando el comando spark-submit
en el contenedor.
Escriba el script y guárdelo como
sample1.py
en el directorio/local_path_to_workspace
. El código de muestra se incluye como apéndice de este tema.$ WORKSPACE_LOCATION=/local_path_to_workspace $ SCRIPT_FILE_NAME=sample.py $ mkdir -p ${WORKSPACE_LOCATION}/src $ vim ${WORKSPACE_LOCATION}/src/${SCRIPT_FILE_NAME}
Ejecute el siguiente comando para ejecutar el comando
spark-submit
en el contenedor para enviar una nueva aplicación Spark:$ docker run -it -v ~/.aws:/home/glue_user/.aws -v $WORKSPACE_LOCATION:/home/glue_user/workspace/ -e AWS_PROFILE=$PROFILE_NAME -e DISABLE_SSL=true --rm -p 4040:4040 -p 18080:18080 --name glue_spark_submit amazon/aws-glue-libs:glue_libs_4.0.0_image_01 spark-submit /home/glue_user/workspace/src/$SCRIPT_FILE_NAME ...22/01/26 09:08:55 INFO DAGScheduler: Job 0 finished: fromRDD at DynamicFrame.scala:305, took 3.639886 s root |-- family_name: string |-- name: string |-- links: array | |-- element: struct | | |-- note: string | | |-- url: string |-- gender: string |-- image: string |-- identifiers: array | |-- element: struct | | |-- scheme: string | | |-- identifier: string |-- other_names: array | |-- element: struct | | |-- lang: string | | |-- note: string | | |-- name: string |-- sort_name: string |-- images: array | |-- element: struct | | |-- url: string |-- given_name: string |-- birth_date: string |-- id: string |-- contact_details: array | |-- element: struct | | |-- type: string | | |-- value: string |-- death_date: string ...
-
(Opcionalmente) Configure
spark-submit
para que se adapte a su entorno. Por ejemplo, puede transferir sus dependencias con la configuración de--jars
. Para obtener más información, consulte Carga dinámica de propiedades de Sparken la documentación de Spark.
Intérprete de comandos REPL (Pyspark)
Puede ejecutar el intérprete de comandos REPL (bucles de read-eval-print) para desarrollo interactivo.
Ejecute el siguiente comando para ejecutar el comando PySpark en el contenedor e iniciar el intérprete de comandos REPL:
$ docker run -it -v ~/.aws:/home/glue_user/.aws -e AWS_PROFILE=$PROFILE_NAME -e DISABLE_SSL=true --rm -p 4040:4040 -p 18080:18080 --name glue_pyspark amazon/aws-glue-libs:glue_libs_4.0.0_image_01 pyspark ... ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ `/ __/ '_/ /__ / .__/\_,_/_/ /_/\_\ version 3.1.1-amzn-0 /_/ Using Python version 3.7.10 (default, Jun 3 2021 00:02:01) Spark context Web UI available at http://56e99d000c99:4040 Spark context available as 'sc' (master = local[*], app id = local-1643011860812). SparkSession available as 'spark'. >>>
Pytest
Para pruebas de unidad, puede utilizar pytest para scripts de trabajo Spark de AWS Glue.
Ejecute los comandos siguientes para la preparación.
$ WORKSPACE_LOCATION=/local_path_to_workspace $ SCRIPT_FILE_NAME=sample.py $ UNIT_TEST_FILE_NAME=test_sample.py $ mkdir -p ${WORKSPACE_LOCATION}/tests $ vim ${WORKSPACE_LOCATION}/tests/${UNIT_TEST_FILE_NAME}
Ejecute el siguiente comando para ejecutar pytest
en el conjunto de pruebas:
$ docker run -it -v ~/.aws:/home/glue_user/.aws -v $WORKSPACE_LOCATION:/home/glue_user/workspace/ -e AWS_PROFILE=$PROFILE_NAME -e DISABLE_SSL=true --rm -p 4040:4040 -p 18080:18080 --name glue_pytest amazon/aws-glue-libs:glue_libs_4.0.0_image_01 -c "python3 -m pytest" starting org.apache.spark.deploy.history.HistoryServer, logging to /home/glue_user/spark/logs/spark-glue_user-org.apache.spark.deploy.history.HistoryServer-1-5168f209bd78.out *============================================================= test session starts ============================================================= *platform linux -- Python 3.7.10, pytest-6.2.3, py-1.11.0, pluggy-0.13.1 rootdir: /home/glue_user/workspace plugins: anyio-3.4.0 *collected 1 item * tests/test_sample.py . [100%] ============================================================== warnings summary =============================================================== tests/test_sample.py::test_counts /home/glue_user/spark/python/pyspark/sql/context.py:79: DeprecationWarning: Deprecated in 3.0.0. Use SparkSession.builder.getOrCreate() instead. DeprecationWarning) -- Docs: https://docs.pytest.org/en/stable/warnings.html ======================================================== 1 passed, *1 warning* in 21.07s ========================================================
Laboratorio de Jupyter
Puede iniciar Jupyter para desarrollo interactivo y consultas ad hoc en los cuadernos.
Ejecute el siguiente comando para iniciar Jupyter Lab:
$ JUPYTER_WORKSPACE_LOCATION=/local_path_to_workspace/jupyter_workspace/ $ docker run -it -v ~/.aws:/home/glue_user/.aws -v $JUPYTER_WORKSPACE_LOCATION:/home/glue_user/workspace/jupyter_workspace/ -e AWS_PROFILE=$PROFILE_NAME -e DISABLE_SSL=true --rm -p 4040:4040 -p 18080:18080 -p 8998:8998 -p 8888:8888 --name glue_jupyter_lab amazon/aws-glue-libs:glue_libs_4.0.0_image_01 /home/glue_user/jupyter/jupyter_start.sh ... [I 2022-01-24 08:19:21.368 ServerApp] Serving notebooks from local directory: /home/glue_user/workspace/jupyter_workspace [I 2022-01-24 08:19:21.368 ServerApp] Jupyter Server 1.13.1 is running at: [I 2022-01-24 08:19:21.368 ServerApp] http://faa541f8f99f:8888/lab [I 2022-01-24 08:19:21.368 ServerApp] or http://127.0.0.1:8888/lab [I 2022-01-24 08:19:21.368 ServerApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
Abra http://127.0.0.1:8888/lab en el navegador web de su máquina local para ver la interfaz de usuario de Jupyter lab.
Elija Glue Spark Local (PySpark) en Notebook (Cuaderno). Puede comenzar a desarrollar el código en la interfaz de usuario interactiva del cuaderno de Jupyter.
Configuración del contenedor para utilizar Visual Studio Code
Requisitos previos:
Instale Visual Studio Code.
Instalación de Python
. Abra la carpeta de WorkSpace en Visual Studio Code.
Elija Configuración.
Elija WorkSpace.
Elija Abrir Settings (JSON) (Abrir configuración).
Pegue el siguiente JSON y guárdelo.
{ "python.defaultInterpreterPath": "/usr/bin/python3", "python.analysis.extraPaths": [ "/home/glue_user/aws-glue-libs/PyGlue.zip:/home/glue_user/spark/python/lib/py4j-0.10.9.5-src.zip:/home/glue_user/spark/python/", ] }
Pasos:
Ejecute el contenedor Docker.
$ docker run -it -v ~/.aws:/home/glue_user/.aws -v $WORKSPACE_LOCATION:/home/glue_user/workspace/ -e AWS_PROFILE=$PROFILE_NAME -e DISABLE_SSL=true --rm -p 4040:4040 -p 18080:18080 --name glue_pyspark amazon/aws-glue-libs:glue_libs_4.0.0_image_01 pyspark
Inicie Visual Studio Code.
Elija Remote Explorer (Explorador remoto) en el menú de la izquierda y elija
amazon/aws-glue-libs:glue_libs_4.0.0_image_01
.Haga clic con el botón derecho y elija Attach to Container (Adjuntar al contenedor). Si aparece un cuadro de diálogo, elija Got it (Entendido).
Abra
/home/glue_user/workspace/
.Cree un script de Glue PySpark y elija Run (Ejecutar).
Verá la ejecución correcta del script.
Apéndice: código de muestra de trabajo de AWS Glue para pruebas
Este apéndice proporciona scripts como código de muestra de trabajo de AWS Glue para fines de prueba.
sample.py: código de muestra para utilizar la biblioteca de ETL de AWS Glue con una llamada a la API de Amazon S3
import sys from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.job import Job from awsglue.utils import getResolvedOptions class GluePythonSampleTest: def __init__(self): params = [] if '--JOB_NAME' in sys.argv: params.append('JOB_NAME') args = getResolvedOptions(sys.argv, params) self.context = GlueContext(SparkContext.getOrCreate()) self.job = Job(self.context) if 'JOB_NAME' in args: jobname = args['JOB_NAME'] else: jobname = "test" self.job.init(jobname, args) def run(self): dyf = read_json(self.context, "s3://awsglue-datasets/examples/us-legislators/all/persons.json") dyf.printSchema() self.job.commit() def read_json(glue_context, path): dynamicframe = glue_context.create_dynamic_frame.from_options( connection_type='s3', connection_options={ 'paths': [path], 'recurse': True }, format='json' ) return dynamicframe if __name__ == '__main__': GluePythonSampleTest().run()
El código anterior requiere permisos de Amazon S3 en IAM de AWS. Debe conceder la política administrada de IAM de arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
o una política personalizada de IAM que le permite llamar a ListBucket
y GetObject
para la ruta de Amazon S3.
test_sample.py: Código de muestra para la prueba de unidad de sample.py.
import pytest from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.job import Job from awsglue.utils import getResolvedOptions import sys from src import sample @pytest.fixture(scope="module", autouse=True) def glue_context(): sys.argv.append('--JOB_NAME') sys.argv.append('test_count') args = getResolvedOptions(sys.argv, ['JOB_NAME']) context = GlueContext(SparkContext.getOrCreate()) job = Job(context) job.init(args['JOB_NAME'], args) yield(context) job.commit() def test_counts(glue_context): dyf = sample.read_json(glue_context, "s3://awsglue-datasets/examples/us-legislators/all/persons.json") assert dyf.toDF().count() == 1961
Desarrollo mediante la biblioteca de ETL de AWS Glue
La biblioteca ETL de AWS Glue se encuentra disponible en un bucket público de Amazon S3, y puede utilizarla el sistema de compilación Apache Maven. Esto le permite desarrollar y probar localmente sus scripts de extracción, transformación y carga (ETL) de Python y Scala, sin necesidad de una conexión de red. Se recomienda el desarrollo local con la imagen de Docker, ya que proporciona un entorno correctamente configurado para el uso de esta biblioteca.
El desarrollo local se encuentra disponible para todas las versiones de AWS Glue, incluso las versiones 0.9, 1.0, 2.0 y posteriores de AWS Glue. Para obtener información acerca de las versiones de Python y Apache Spark que están disponibles con AWS Glue, consulte la Glue version job property.
La biblioteca es accesible entrega con la licencia de software de Amazon (https://aws.amazon.com/asl
Restricciones de desarrollo local
Tenga en cuenta las siguientes restricciones al utilizar la biblioteca Scala de AWS Glue para desarrollar localmente.
-
Evite crear un jar de ensamblado (“fat jar” o “uber jar”) con la biblioteca de AWS Glue, porque esto hará que se deshabiliten las siguientes características:
-
Escritor de AWS Glue Parquet (Uso del formato Parquet en AWS Glue)
Estas características solo están disponibles en el sistema de trabajos de AWS Glue.
-
No se admite la transformación FindMatches en el desarrollo local.
-
El lector vectorizado SIMD CSV no es compatible con el desarrollo local.
-
El desarrollo local no admite la propiedad customJdbcDriverS3Path para cargar el controlador JDBC desde una ruta S3. Como alternativa, puede descargar el controlador JDBC en su local y cargarlo desde allí.
-
La Calidad de datos de Glue no se admite en el desarrollo local.
Desarrollo a nivel local con Python
Complete algunos pasos de requisitos previos y, a continuación, use las utilidades de AWS Glue para probar y enviar el script de ETL de Python.
Requisitos previos para el desarrollo local de Python
Complete estos pasos para prepararse para el desarrollo local de Python:
-
Clonar el repositorio de AWS Glue Python desde GitHub (https://github.com/awslabs/aws-glue-libs
). -
Realice una de las siguientes acciones siguientes:
Para la versión 0.9 de AWS Glue, consulte la ramificación
glue-0.9
.Para las versiones 1.0 de AWS Glue, consulte la ramificación
glue-1.0
. Todas las versiones de AWS Glue posteriores a 0.9 admiten Python 3.Para las versiones 2.0 de AWS Glue, consulte la ramificación
glue-2.0
.Para las versiones 3.0 de AWS Glue, consulte la ramificación
glue-3.0
.Para la versión 4.0 de AWS Glue, consulte la ramificación
master
.
-
Instale Apache Maven desde la siguiente ubicación: https://aws-glue-etl-artifacts.s3.amazonaws.com/glue-common/apache-maven-3.6.0-bin.tar.gz
. -
Instale la distribución de Apache Spark desde una de las siguientes ubicaciones:
Para la versión 0.9 de AWS Glue: https://aws-glue-etl-artifacts.s3.amazonaws.com/glue-0.9/spark-2.2.1-bin-hadoop2.7.tgz
Para la versión 1.0 de AWS Glue: https://aws-glue-etl-artifacts.s3.amazonaws.com/glue-1.0/spark-2.4.3-bin-hadoop2.8.tgz
Para la versión 2.0 de AWS Glue: https://aws-glue-etl-artifacts.s3.amazonaws.com/glue-2.0/spark-2.4.3-bin-hadoop2.8.tgz
Para la versión 3.0 de AWS Glue: https://aws-glue-etl-artifacts.s3.amazonaws.com/glue-3.0/spark-3.1.1-amzn-0-bin-3.2.1-amzn-3.tgz
Para la versión 4.0 AWS Glue: https://aws-glue-etl-artifacts.s3.amazonaws.com/glue-4.0/spark-3.3.0-amzn-1-bin-3.3.3-amzn-0.tgz
-
Exporte la variable de entorno
SPARK_HOME
, estableciéndola en la ubicación raíz extraída del archivo Spark. Por ejemplo:Para la versión 0.9 de AWS Glue:
export SPARK_HOME=/home/$USER/spark-2.2.1-bin-hadoop2.7
Para las versiones 1.0 y 2.0 de AWS Glue:
export SPARK_HOME=/home/$USER/spark-2.4.3-bin-spark-2.4.3-bin-hadoop2.8
Para la versión 3.0 de AWS Glue:
export SPARK_HOME=/home/$USER/spark-3.1.1-amzn-0-bin-3.2.1-amzn-3
Para la versión 4.0 AWS Glue:
export SPARK_HOME=/home/$USER/spark-3.3.0-amzn-1-bin-3.3.3-amzn-0
Ejecución del script de ETL de Python
Con los archivos jar de AWS Glue disponibles para desarrollo local, puede ejecutar localmente el paquete AWS Glue Python.
Utilice las siguientes utilidades y marcos de trabajo para probar y ejecutar el script de Python. Los comandos enumerados en la siguiente tabla se ejecutan desde el directorio raíz del paquete AWS Glue Python
Utilidad | Comando | Descripción |
---|---|---|
Intérprete de comandos de AWS Glue | ./bin/gluepyspark |
Escribe y ejecuta scripts de Python en un intérprete de comandos que se integra con bibliotecas de ETL de AWS Glue. |
AWS Glue Submit (Enviar). | ./bin/gluesparksubmit |
Envía un script de Python completo para su ejecución. |
Pytest | ./bin/gluepytest |
Escribe y ejecuta pruebas unitarias de su código Python. El módulo pytest debe estar instalado y disponible en PATH . Para obtener más información, consulte la documentación de pytest |
Desarrollo a nivel local con Scala
Complete algunos pasos de requisitos de previos y, a continuación, emita un comando Maven para ejecutar localmente el script de ETL de Scala.
Requisitos previos para el desarrollo local de Scala
Complete estos pasos a fin de prepararse para el desarrollo local de Scala.
Paso 1: Instalar el software
En este paso, instalará el software y establecerá la variable de entorno necesaria.
-
Instale Apache Maven desde la siguiente ubicación: https://aws-glue-etl-artifacts.s3.amazonaws.com/glue-common/apache-maven-3.6.0-bin.tar.gz
. -
Instale la distribución de Apache Spark desde una de las siguientes ubicaciones:
Para la versión 0.9 de AWS Glue: https://aws-glue-etl-artifacts.s3.amazonaws.com/glue-0.9/spark-2.2.1-bin-hadoop2.7.tgz
Para la versión 1.0 de AWS Glue: https://aws-glue-etl-artifacts.s3.amazonaws.com/glue-1.0/spark-2.4.3-bin-hadoop2.8.tgz
Para la versión 2.0 de AWS Glue: https://aws-glue-etl-artifacts.s3.amazonaws.com/glue-2.0/spark-2.4.3-bin-hadoop2.8.tgz
Para la versión 3.0 de AWS Glue: https://aws-glue-etl-artifacts.s3.amazonaws.com/glue-3.0/spark-3.1.1-amzn-0-bin-3.2.1-amzn-3.tgz
Para la versión 4.0 AWS Glue: https://aws-glue-etl-artifacts.s3.amazonaws.com/glue-4.0/spark-3.3.0-amzn-1-bin-3.3.3-amzn-0.tgz
-
Exporte la variable de entorno
SPARK_HOME
, estableciéndola en la ubicación raíz extraída del archivo Spark. Por ejemplo:Para la versión 0.9 de AWS Glue:
export SPARK_HOME=/home/$USER/spark-2.2.1-bin-hadoop2.7
Para las versiones 1.0 y 2.0 de AWS Glue:
export SPARK_HOME=/home/$USER/spark-2.4.3-bin-spark-2.4.3-bin-hadoop2.8
Para la versión 3.0 de AWS Glue:
export SPARK_HOME=/home/$USER/spark-3.1.1-amzn-0-bin-3.2.1-amzn-3
Para la versión 4.0 AWS Glue:
export SPARK_HOME=/home/$USER/spark-3.3.0-amzn-1-bin-3.3.3-amzn-0
Paso 2: Configurar su proyecto de Maven
Utilice el siguiente archivo pom.xml
como plantilla para sus aplicaciones de Scala de AWS Glue. Contiene los elementos dependencies
, repositories
y plugins
necesarios. Reemplace la cadena de Glue version
por uno de los siguientes valores:
-
4.0.0
para la versión 4.0 de AWS Glue -
Para la versión 3.0 de AWS Glue:
3.0.0
-
Para las versiones 1.0 y 2.0 de AWS Glue:
1.0.0
-
Para la versión 0.9 de AWS Glue:
0.9.0
<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 ETL application</description> <properties> <scala.version>2.11.1 for AWS Glue 2.0 or below, 2.12.7 for AWS Glue 3.0 and 4.0</scala.version> <glue.version>Glue version with three numbers (as mentioned earlier)</glue.version> </properties> <dependencies> <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-library</artifactId> <version>${scala.version}</version> <!-- A "provided" dependency, this will be ignored when you package your application --> <scope>provided</scope> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>AWSGlueETL</artifactId> <version>${glue.version}</version> <!-- A "provided" dependency, this will be ignored when you package your application --> <scope>provided</scope> </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> <!-- The shade plugin will be helpful in building a uberjar or fatjar. You can use this jar in the AWS Glue runtime environment. For more information, see https://maven.apache.org/plugins/maven-shade-plugin/ --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.4</version> <configuration> <!-- any other shade configurations --> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
Ejecución del script de ETL de Scala
Ejecute el siguiente comando desde el directorio raíz del proyecto Maven para ejecutar el script de ETL de Scala.
mvn exec:java -Dexec.mainClass="
mainClass
" -Dexec.args="--JOB-NAMEjobName
"
Sustituya mainClass
por el nombre de clase completo de la clase principal del script. Sustituya jobName
por el nombre de trabajo que desee.
Configuración de un entorno de pruebas
Para obtener ejemplos acerca de cómo configurar un entorno local de pruebas, consulte los siguientes artículos de blog:
-
Building an AWS Glue ETL pipeline locally without an AWS account
(Creación local de una canalización de ETL de AWS Glue sin una cuenta de AWS) -
Developing AWS Glue ETL jobs locally using a container
(Desarrollo local de trabajos de ETL de AWS Glue con un contenedor)
Si desea utilizar puntos de enlace de desarrollo o cuaderno para probar sus scripts ETL, consulte Desarrollo de scripts usando puntos de conexión de desarrollo.
nota
Los trabajos de la versión 2.0 de AWS Glue no soportan el uso de puntos de enlace desarrollo. Para obtener más información, consulte Ejecución de trabajos de ETL de Spark con tiempos de inicio reducidos.