Solución de errores de esquema en AWS Glue
Si detecta errores al utilizar proyectos en AWS Glue, utilice las siguientes soluciones como ayuda para encontrar la fuente de los problemas y corregirlos.
Temas
- Error: falta el módulo PySpark
- Error: falta el archivo de configuración del proyecto
- Error: falta archivo importado
- Error: no autorizado a realizar iamPassRole en el recurso
- Error: programación cron no válida
- Error: ya existe un desencadenador con ese nombre
- Error: el flujo de trabajo con el nombre: foo ya existe.
- Error: no se encontró el módulo en la ruta de LayoutGenerator especificada
- Error: error de validación en el campo Connections (Conexiones)
Error: falta el módulo PySpark
AWS Glue devuelve el error “Unknown error executing layout generator function ModuleNotFoundError: No module named 'pyspark' (Error desconocido al ejecutar la función del generador de diseño ModuleNotFounderError: no hay módulo llamado 'pyspark')”.
Cuando descomprime el archivo del proyecto, podría suceder cualquiera de los dos casos que figuran a continuación:
$ unzip compaction.zip Archive: compaction.zip creating: compaction/ inflating: compaction/blueprint.cfg inflating: compaction/layout.py inflating: compaction/README.md inflating: compaction/compaction.py $ unzip compaction.zip Archive: compaction.zip inflating: blueprint.cfg inflating: compaction.py inflating: layout.py inflating: README.md
En el primer caso, todos los archivos relacionados con el proyecto se colocaron en una carpeta denominada compaction y luego se convirtió en un archivo zip llamado compaction.zip.
En el segundo caso, todos los archivos necesarios para el proyecto no se incluyeron en una carpeta y se agregaron como archivos raíz en el archivo zip compaction.zip.
Se permite crear un archivo en cualquiera de los formatos anteriores. Sin embargo, asegúrese de que blueprint.cfg
tiene la ruta correcta al nombre de la función en el script que genera el diseño.
Ejemplos
En el caso 1: blueprint.cfg
debería tener layoutGenerator
como lo siguiente:
layoutGenerator": "compaction.layout.generate_layout"
En el caso 2: blueprint.cfg
debería tener layoutGenerator
como lo siguiente
layoutGenerator": "layout.generate_layout"
Si esta ruta no se incluye en forma correcta, podría ver un error como el que se indica. Por ejemplo, si tiene la estructura de carpetas como se menciona en el caso 2 y tiene el layoutGenerator
indicado como en el caso 1, puede ver el error anterior.
Error: falta el archivo de configuración del proyecto
AWS Glue devuelve el error “Unknown error executing layout generator function FileNotFoundError: [Errno 2] No such file or directory: '/tmp/compaction/blueprint.cfg' (Error desconocido al ejecutar la función del generador de diseño FileNotFoundError: [Errno 2] no existe tal archivo o directorio: '/tmp/compaction/blueprint.cfg')”.
El blueprint.cfg debe colocarse en el nivel raíz del archivo ZIP o dentro de una carpeta que tenga el mismo nombre que el archivo ZIP.
Cuando extraemos el archivo ZIP del proyecto, se espera que blueprint.cfg se encuentre en una de las siguientes rutas. Si no se encuentra en una de las siguientes rutas, puede ver el error anterior.
$ unzip compaction.zip Archive: compaction.zip creating: compaction/ inflating: compaction/blueprint.cfg $ unzip compaction.zip Archive: compaction.zip inflating: blueprint.cfg
Error: falta archivo importado
AWS Glue devuelve el error “Unknown error executing layout generator function FileNotFoundError: [Errno 2] No such file or directory:* *'demo-project/foo.py' (Error desconocido al ejecutar la función del generador de diseño FileNotFoundError: [Errno 2] no existe tal archivo o directorio:* *'demo-project/foo.py')”.
Si el script de generación de diseño tiene funcionalidad para leer otros archivos, asegúrese de proporcionar una ruta completa para el archivo que se va a importar. Por ejemplo, se puede hacer referencia al script Conversion.py en Layout.py. Para obtener más información, consulte Esquema de ejemplo.
Error: no autorizado a realizar iamPassRole en el recurso
AWS Glue devuelve el error “User: arn:aws:sts::123456789012:assumed-role/AWSGlueServiceRole/GlueSession is not authorized to perform: iam:PassRole on resource: arn:aws:iam::123456789012:role/AWSGlueServiceRole (Usuario: arn:aws:sts::123456789012:assumed-role/AWSGlueServiceRole/GlueSession no está autorizado para realizar: iam:PassRole en el recurso: arn:aws:iam:: 123456789012:role/AWSGlueServicerole)”
Si los trabajos y rastreadores del flujo de trabajo asumen el mismo rol que el rol transferido para crear el flujo de trabajo a partir del proyecto, el rol del proyecto debe incluir el permiso iam:PassRole
.
Si los trabajos y rastreadores del flujo de trabajo asumen un rol distinto que el rol transferido para crear las entidades del flujo de trabajo a partir del proyecto, el rol del proyecto debe incluir el permiso iam:PassRole
en ese otro rol, en lugar de en el rol del proyecto.
Para obtener más información, consulte Permisos para roles de esquema.
Error: programación cron no válida
AWS Glue devuelve el error “The schedule cron(0 0 * * * *) is invalid [El cron de programación (0 0 * * * *) no es válido]”.
Proporcione una expresión cron
Error: ya existe un desencadenador con ese nombre
AWS Glue devuelve el error “Trigger with name 'foo_starting_trigger' already submitted with different configuration (Desencadenador con nombre 'foo_starting_trigger' ya enviado con una configuración diferente)”.
Un proyecto no requiere que defina desencadenadores en el script de diseño para la creación del flujo de trabajo. La creación de desencadenadores es administrada por la biblioteca de proyectos en función de las dependencias definidas entre dos acciones.
La denominación de los desencadenadores es la siguiente:
Para el desencadenador de inicio en el flujo de trabajo, la denominación es <workflow_name>_starting_trigger.
Para un nodo (trabajo/rastreador) en el flujo de trabajo que depende de la finalización de uno o varios nodos ascendentes; AWS Glue define un desencadenador con el nombre <workflow_name>_<node_name>_trigger
Este error significa que ya existe un desencadenador con ese nombre. Puede eliminar el desencadenador existente y volver a ejecutar la creación del flujo de trabajo.
nota
Al eliminar un flujo de trabajo no se eliminan los nodos del flujo de trabajo. Es posible que aunque se elimine el flujo de trabajo, los desencadenadores permanezcan. Debido a esto, es posible que no reciba un error de “workflow already exists (el flujo de trabajo ya existe)”, pero puede recibir un error de “trigger already exists (el desencadenador ya existe)” en un caso en el que cree un flujo de trabajo, lo elimine y luego intente volver a crearlo con el mismo nombre y a partir del mismo proyecto.
Error: el flujo de trabajo con el nombre: foo ya existe.
El nombre del flujo de trabajo debe ser único. Inténtelo con un nombre diferente.
Error: no se encontró el módulo en la ruta de LayoutGenerator especificada
AWS Glue devuelve el error “Unknown error executing layout generator function ModuleNotFoundError: No module named 'crawl_s3_locations' (Error desconocido al ejecutar la función del generador de diseño ModuleNotFoundError: no hay módulo llamado 'crawl_s3_locations')”.
layoutGenerator": "crawl_s3_locations.layout.generate_layout"
Por ejemplo, si tiene la ruta de acceso LayoutGenerator anterior, cuando descomprima el archivo del proyecto, debe tener el siguiente aspecto:
$ unzip crawl_s3_locations.zip Archive: crawl_s3_locations.zip creating: crawl_s3_locations/ inflating: crawl_s3_locations/blueprint.cfg inflating: crawl_s3_locations/layout.py inflating: crawl_s3_locations/README.md
Cuando descomprime el archivo, si el archivo del proyecto se ve de la siguiente manera, entonces puede obtener el error anterior.
$ unzip crawl_s3_locations.zip Archive: crawl_s3_locations.zip inflating: blueprint.cfg inflating: layout.py inflating: README.md
Puede ver que no hay ninguna carpeta llamada crawl_s3_locations
y cuando la ruta layoutGenerator
se refiere al archivo de diseño a través del módulo crawl_s3_locations
, puede obtener el error anterior.
Error: error de validación en el campo Connections (Conexiones)
AWS Glue devuelve el error “Unknown error executing layout generator function TypeError: Value ['foo'] for key Connections should be of type <class 'dict'>! (Error desconocido al ejecutar la función del generador de diseño TypeError: el valor ['foo'] para las conexiones clave debe ser de tipo <class 'dict'>!)”.
Este es un error de validación. El campo Connections
en la clase Job
espera un diccionario y en su lugar se proporciona una lista de valores que causan el error.
User input was list of values Connections= ['string'] Should be a dict like the following Connections*=*{'Connections': ['string']}
Para evitar estos errores de tiempo de ejecución al crear un flujo de trabajo a partir de un proyecto, puede validar las definiciones de flujo de trabajo, trabajo y rastreador como se describe en Realizar pruebas de un esquema.
Consulte la sintaxis en Referencia a clases de proyectos de AWS Glue para definir el trabajo, rastreador y flujo de trabajo de AWS Glue en el script de diseño.