Migración de trabajos de AWS Glue para Spark a la versión 3.0 de AWS Glue
Este tema describe los cambios entre las versiones 0.9, 1.0, 2.0 y 3.0 de AWS Glue para permitirle migrar sus aplicaciones de Spark y trabajos de ETL a AWS Glue 3.0.
Para usar esta función con sus trabajos de ETL de AWS Glue, elija 3.0
para la Glue version
cuando cree sus trabajos.
Temas
- Características nuevas admitidas
- Acciones para migrar a AWS Glue 3.0
- Lista de comprobación de migración
- Migrar de AWS Glue 0.9 a AWS Glue 3.0
- Migrar de AWS Glue 1.0 a AWS Glue 3.0
- Migrar de AWS Glue 2.0 a AWS Glue 3.0
- Apéndice A: actualizaciones de dependencias importantes
- Apéndice B: actualizaciones de controladores JDBC
Características nuevas admitidas
En esta sección se describen las nuevas características y ventajas de AWS Glue, versión 3.0.
Se basa en Apache Spark 3.1.1, que cuenta con optimizaciones de Spark de código abierto, desarrollado por los servicios de AWS Glue y EMR, tales como ejecución de consultas adaptativas, lectores vectorizados y combinación de particiones y mezclas aleatorias optimizadas.
Controladores JDBC actualizados para todos los orígenes nativos de Glue, que incluyen MySQL, Microsoft SQL Server, Oracle, PostgreSQL, MongoDB, y bibliotecas y dependencias de Spark actualizadas introducidas por Spark 3.1.1.
Acceso optimizado a Amazon S3 con EMRFS mejorado y confirmadores de salida optimizados de Amazon S3 de forma predeterminada.
Acceso optimizado al Data Catalog con índices de partición, predicados de inserción, lista de particiones y cliente de metaalmacén de Hive actualizado.
Integración con Lake Formation para tablas de catálogo gobernadas con filtrado a nivel de celda y transacciones de lago de datos.
Experiencia de interfaz de usuario de Spark mejorada con Spark 3.1.1 con nuevas métricas de memoria del ejecutor de Spark y métricas de streaming estructuradas de Spark.
Reducción de la latencia de inicio que mejora los tiempos generales de finalización del trabajo y la interactividad, similar a AWS Glue 2.0.
Los trabajos de Spark se facturan en incrementos de 1 segundo con una duración mínima de facturación 10 veces menor, de un mínimo de 10 minutos a un mínimo de 1 minuto, similar a AWS Glue 2.0.
Acciones para migrar a AWS Glue 3.0
Para los trabajos existentes, cambie la Glue version
de la versión anterior a Glue 3.0
en la configuración del trabajo.
En la consola, elija
Spark 3.1, Python 3 (Glue Version 3.0) or Spark 3.1, Scala 2 (Glue Version 3.0)
enGlue version
.En AWS Glue Studio, elija
Glue 3.0 - Supports spark 3.1, Scala 2, Python 3
enGlue version
.En la API, elija
3.0
en el parámetroGlueVersion
en la API deUpdateJob
.
Para nuevos trabajos, elija Glue 3.0
cuando cree un trabajo.
En la consola, elija
Spark 3.1, Python 3 (Glue Version 3.0) or Spark 3.1, Scala 2 (Glue Version 3.0)
enGlue version
.En AWS Glue Studio, elija
Glue 3.0 - Supports spark 3.1, Scala 2, Python 3
enGlue version
.En la API, elija
3.0
en el parámetroGlueVersion
en la API deCreateJob
.
Para ver los registros de eventos de Spark de AWS Glue 3.0, lanzar un servidor de historial de Spark actualizado para Glue 3.0 mediante CloudFormation o Docker.
Lista de comprobación de migración
Revise esta lista de comprobación para la migración.
¿Su trabajo depende de HDFS? En caso afirmativo, intente reemplazar HDFS por S3.
Buscar en la ruta del sistema de archivos comenzando con
hdfs://
o/
como ruta DFS en el código del script del trabajo.Compruebe si su sistema de archivos predeterminado no está configurado con HDFS. Si está explícitamente configurado, debe eliminar la configuración
fs.defaultFS
.Compruebe si su trabajo contiene parámetros
dfs.*
. Si contiene alguno, debe verificar que es correcto desactivar los parámetros.
¿Su trabajo depende de YARN? En caso afirmativo, verifique los impactos al comprobar si su trabajo contiene los siguientes parámetros. Si contiene alguno, debe verificar que es correcto desactivar los parámetros.
spark.yarn.*
Por ejemplo:
spark.yarn.executor.memoryOverhead spark.yarn.driver.memoryOverhead spark.yarn.scheduler.reporterThread.maxFailures
yarn.*
Por ejemplo:
yarn.scheduler.maximum-allocation-mb yarn.nodemanager.resource.memory-mb
¿Su trabajo depende de Spark 2.2.1 o Spark 2.4.3? En caso afirmativo, verifique los impactos al comprobar si su trabajo utiliza características que se modificaron en Spark 3.1.1.
https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-22-to-23
Por ejemplo: la función
percentile_approx
, oSparkSession
conSparkSession.builder.getOrCreate()
cuando hay unSparkContext
existente.https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-23-to-24
Por ejemplo: la función
array_contains
, oCURRENT_DATE
, funciónCURRENT_TIMESTAMP
conspark.sql.caseSensitive=true
.
¿Los archivos JAR adicionales de su trabajo entran en conflicto en Glue 3.0?
A partir de AWS Glue 0.9/1.0: los archivos JAR adicionales suministrados en trabajos existentes de AWS Glue 0.9/1.0 pueden provocar conflictos de classpath debido a dependencias actualizadas o nuevas disponibles en Glue 3.0. Puede evitar conflictos de classpath en AWS Glue 3.0 con el parámetro de trabajo
--user-jars-first
de AWS Glue o al sombrear sus dependencias.A partir de AWS Glue 2.0: puede evitar conflictos de classpath en AWS Glue 3.0 con el parámetro de trabajo
--user-jars-first
de AWS Glue o al sombrear sus dependencias.
¿Dependen sus trabajo de Scala 2.11?
AWS Glue 3.0 usa Scala 2.12, por lo que necesita reconstruir sus bibliotecas con Scala 2.12, si las mismas dependen de Scala 2.11.
¿Las bibliotecas externas de Python de su trabajo dependen de Python 2.7/3.6?
Use el parámetro
--additional-python-modules
en lugar de establecer el archivo egg/wheel/zip en la ruta de la biblioteca de Python.Actualice las bibliotecas dependientes de Python 2.7/3.6 a Python 3.7 ya que Spark 3.1.1 eliminó el soporte de Python 2.7.
Migrar de AWS Glue 0.9 a AWS Glue 3.0
Tenga en cuenta los siguientes cambios al migrar:
AWS Glue 0.9 utiliza Spark 2.2.1 y AWS Glue 3.0 utiliza Spark 3.1.1 optimizado para EMR.
Varios cambios de Spark por sí solos pueden requerir la revisión de sus scripts para garantizar que no se haga referencia a las características eliminadas.
Por ejemplo, Spark 3.1.1 no habilita UDF sin tipo Scala, pero Spark 2.2 sí los permite.
Todos los trabajos en AWS Glue 3.0 se ejecutarán con tiempos de inicio significativamente mejorados. Los trabajos de Spark se facturarán en incrementos de 1 segundo con una duración mínima de facturación 10 veces menor, ya que la latencia de inicio pasará de 10 minutos máximo a 1 minuto máximo.
El comportamiento de registro se ha modificado desde AWS Glue 2.0.
Varias actualizaciones de dependencias, destacadas en Apéndice A: actualizaciones de dependencias importantes.
Scala también se actualiza a 2.12 desde 2.11, y Scala 2.12 no es compatible con Scala 2.11.
Python 3.7 es también la versión predeterminada utilizada para los scripts de Python, ya que AWS Glue 0.9 solo utilizaba Python 2.
Spark 3.1.1. no soporta Python 2.7.
Se encuentra disponible un nuevo mecanismo para instalar módulos adicionales de Python.
AWS Glue 3.0 no se ejecuta en Apache YARN, por lo que la configuración de YARN no se aplica.
AWS Glue 3.0 no tiene un sistema de archivos distribuido Hadoop Distributed File System (HDFS).
Cualquier archivo JAR adicional suministrado en trabajos de AWS Glue 0.9 puede traer dependencias conflictivas ya que hubo actualizaciones en varias dependencias en 3.0 con respecto a 0.9. Puede evitar conflictos de classpath en AWS Glue 3.0 con el parámetro de trabajo
--user-jars-first
de AWS Glue.AWS Glue 3.0 no utiliza asignación dinámica, por lo tanto, las métricas ExecutorAllocationManager no están disponibles.
Para trabajos de AWS Glue, versión 3.0, debe especificar el número de empleados y el tipo de empleado, pero no la
maxCapacity
.Los trabajos de la versión 3.0 de AWS Glue no soportan transformaciones de machine learning.
AWS Glue 3.0 aún no soporta puntos de enlace de desarrollo.
Consulte la documentación de migración de Spark:
Migrar de AWS Glue 1.0 a AWS Glue 3.0
Tenga en cuenta los siguientes cambios al migrar:
AWS Glue 1.0 utiliza Spark 2.4 de código abierto y AWS Glue 3.0 utiliza Spark 3.1.1 optimizado para EMR.
Varios cambios de Spark por sí solos pueden requerir la revisión de sus scripts para garantizar que no se haga referencia a las características eliminadas.
Por ejemplo, Spark 3.1.1 no habilita UDF sin tipo Scala, pero Spark 2.4 sí los permite.
Todos los trabajos en AWS Glue 3.0 se ejecutarán con tiempos de inicio significativamente mejorados. Los trabajos de Spark se facturarán en incrementos de 1 segundo con una duración mínima de facturación 10 veces menor, ya que la latencia de inicio pasará de 10 minutos máximo a 1 minuto máximo.
El comportamiento de registro se ha modificado desde AWS Glue 2.0.
Varias actualizaciones de dependencias, destacadas en
Scala también se actualiza a 2.12 desde 2.11, y Scala 2.12 no es compatible con Scala 2.11.
Python 3.7 es también la versión predeterminada utilizada para los scripts de Python, ya que AWS Glue 0.9 solo utilizaba Python 2.
Spark 3.1.1. no soporta Python 2.7.
Se encuentra disponible un nuevo mecanismo para instalar módulos adicionales de Python.
AWS Glue 3.0 no se ejecuta en Apache YARN, por lo que la configuración de YARN no se aplica.
AWS Glue 3.0 no tiene un sistema de archivos distribuido Hadoop Distributed File System (HDFS).
Cualquier archivo JAR adicional suministrado en trabajos de AWS Glue 1.0 puede traer dependencias conflictivas ya que hubo actualizaciones en varias dependencias en 3.0 con respecto a 1.0. Puede evitar conflictos de classpath en AWS Glue 3.0 con el parámetro de trabajo
--user-jars-first
de AWS Glue.AWS Glue 3.0 no utiliza asignación dinámica, por lo tanto, las métricas ExecutorAllocationManager no están disponibles.
Para trabajos de AWS Glue, versión 3.0, debe especificar el número de empleados y el tipo de empleado, pero no la
maxCapacity
.Los trabajos de la versión 3.0 de AWS Glue no soportan transformaciones de machine learning.
AWS Glue 3.0 aún no soporta puntos de enlace de desarrollo.
Consulte la documentación de migración de Spark:
Migrar de AWS Glue 2.0 a AWS Glue 3.0
Tenga en cuenta los siguientes cambios al migrar:
Todos los parámetros de trabajo existentes y las principales características que existen en AWS Glue 2.0 existirá en AWS Glue 3.0.
El compromiso optimizado para S3 de EMRFS para la escritura de datos de Parquet en Amazon S3 está habilitado de forma predeterminada en AWS Glue 3.0. Sin embargo, todavía puede desactivarlo mediante la configuración de
--enable-s3-parquet-optimized-committer
afalse
.
AWS Glue 2.0 utiliza Spark 2.4 de código abierto y AWS Glue 3.0 utiliza Spark 3.1.1 optimizado para EMR.
Varios cambios de Spark por sí solos pueden requerir la revisión de sus scripts para garantizar que no se haga referencia a las características eliminadas.
Por ejemplo, Spark 3.1.1 no habilita UDF sin tipo Scala, pero Spark 2.4 sí los permite.
AWS Glue 3.0 también incluye una actualización de EMRFS, controladores JDBC actualizados e inclusiones de optimizaciones adicionales en Spark proporcionadas por AWS Glue.
Todos los trabajos en AWS Glue 3.0 se ejecutarán con tiempos de inicio significativamente mejorados. Los trabajos de Spark se facturarán en incrementos de 1 segundo con una duración mínima de facturación 10 veces menor, ya que la latencia de inicio pasará de 10 minutos máximo a 1 minuto máximo.
Spark 3.1.1. no soporta Python 2.7.
Varias actualizaciones de dependencias, destacadas en Apéndice A: actualizaciones de dependencias importantes.
Scala también se actualiza a 2.12 desde 2.11, y Scala 2.12 no es compatible con Scala 2.11.
Cualquier archivo JAR adicional suministrado en trabajos de AWS Glue 2.0 puede traer dependencias conflictivas ya que hubo actualizaciones en varias dependencias en 3.0 con respecto a 2.0. Puede evitar conflictos de classpath en AWS Glue 3.0 con el parámetro de trabajo
--user-jars-first
de AWS Glue.AWS Glue 3.0 tiene un paralelismo de tareas de Spark diferente para la configuración del controlador/ejecutor en comparación con AWS Glue 2.0. También mejora el rendimiento y utiliza mejor los recursos disponibles. Tanto
spark.driver.cores
comospark.executor.cores
están configurados para el número de núcleos en AWS Glue 3.0 (4 en el estándar y en el empleadoG.1X
, y 8 en el empleadoG.2X
). Estas configuraciones no cambian el tipo de empleado ni el hardware del trabajo de AWS Glue. Puede utilizar estas configuraciones para calcular el número de particiones o divisiones que coinciden con el paralelismo de tareas de Spark en la aplicación Spark.En general, los trabajos tendrán un rendimiento similar o mejorado en comparación con la versión 2.0 de AWS Glue. Si los trabajos se ejecutan más lentamente, puede aumentar el paralelismo entre las tareas a través del siguiente argumento de trabajo:
clave:
--executor-cores
valor: <cantidad deseada de tareas que se pueden ejecutar en paralelo
>El valor no debe superar el doble de la cantidad de vCPU en el tipo de trabajador, es decir, 8 en
G.1X
, 16 enG.2X
, 32 enG.4X
y 64 enG.8X
. Debe tener cuidado al actualizar esta configuración, ya que podría afectar el rendimiento laboral porque el aumento del paralelismo entre las tareas provoca presión en la memoria y el disco y podría limitar los sistemas de origen y destino.
AWS Glue 3.0 utiliza Spark 3.1, que cambia el comportamiento de cargar/guardar marcas de tiempo desde archivos de parquet y hacia ellos. Para obtener más información, consulte Actualización de Spark SQL 3.0 a 3.1
Recomendamos establecer los siguientes parámetros al leer y escribir datos de parquet que contengan columnas de marca temporal. La configuración de estos parámetros puede resolver el problema de incompatibilidad del calendario que se produce durante la actualización de Spark 2 a Spark 3, tanto para el marco dinámico de AWS Glue como para el marco de datos de Spark. Utilice la opción CORRECTED para leer el valor de fecha y hora tal como está; y la opción LEGACY para rebasar los valores de fecha y hora con respecto a la diferencia de calendario durante la lectura.
- Key: --conf - Value: spark.sql.legacy.parquet.int96RebaseModeInRead=[CORRECTED|LEGACY] --conf spark.sql.legacy.parquet.int96RebaseModeInWrite=[CORRECTED|LEGACY] --conf spark.sql.legacy.parquet.datetimeRebaseModeInRead=[CORRECTED|LEGACY]
Consulte la documentación de migración de Spark:
Apéndice A: actualizaciones de dependencias importantes
Las siguientes son las actualizaciones de dependencias:
Dependencia | Versión en AWS Glue 0.9 | Versión en AWS Glue 1.0 | Versión en AWS Glue 2.0 | Versión en AWS Glue 3.0 |
---|---|---|---|---|
Spark | 2.2.1 | 2.4.3 | 2.4.3 | 3.1.1-amzn-0 |
Hadoop | 2.7.3-amzn-6 | 2.8.5-amzn-1 | 2.8.5-amzn-5 | 3.2.1-amzn-3 |
Scala | 2.11 | 2.11 | 2.11 | 2.12 |
Jackson | 2.7.x | 2.7.x | 2.7.x | 2.10.x |
Hive | 1.2 | 1.2 | 1.2 | 2.3.7-amzn-4 |
EMRFS | 2.20.0 | 2.30.0 | 2.38.0 | 2.46.0 |
Json4s | 3.2.x | 3.5.x | 3.5.x | 3.6.6 |
Arrow | N/A | 0.10.0 | 0.10.0 | 2.0.0 |
Cliente de catálogo de AWS Glue | N/A | N/A | 1.10.0 | 3.0.0 |
Apéndice B: actualizaciones de controladores JDBC
Las siguientes son las actualizaciones de controladores JDBC:
Controlador | Versión del controlador JDBC en las versiones de AWS Glue anteriores | Versión del controlador JDBC en AWS Glue 3.0 |
---|---|---|
MySQL | 5.1 | 8.0.23 |
Microsoft SQL Server | 6.1.0 | 7.0.0 |
Oracle Database | 11.2 | 21.1 |
PostgreSQL | 42.1.0 | 42.2.18 |
MongoDB | 2.0.0 | 4.0.0 |