¿Cómo puedo solucionar los errores en las tareas de EMR al intentar conectar al catálogo de datos de Glue?

4 minutos de lectura
0

Mis trabajos de Amazon EMR no se pueden conectar al catálogo de datos de AWS Glue.

Descripción breve

Amazon EMR usa el catálogo de datos como un metaalmacén persistente cuando utiliza Apache Spark, Apache Hive o Presto/Trino. Puede compartir el catálogo de datos entre diferentes clústeres, servicios, aplicaciones o cuentas de AWS.

Sin embargo, la conexión al catálogo de datos puede fallar por los siguientes motivos:

  • Permisos insuficientes para el catálogo de datos de Glue.
  • Permisos insuficientes para los objetos de Amazon Simple Storage Service (Amazon S3) especificados como ubicación de la tabla.
  • Permisos insuficientes para el servicio AWS Key Management Service (AWS KMS) para objetos cifrados.
  • Permisos insuficientes en AWS Lake Formation.
  • Configuración de los parámetros del clúster de EMR faltante o incorrecta.
  • Formato de consulta incorrecto.

Resolución

El perfil de instancia de EC2 no tiene permisos suficientes para el catálogo de datos o el bucket de S3

Para acceder al catálogo de datos desde la misma cuenta o desde varias cuentas, lo siguiente debe tener permisos para las acciones de AWS Glue y para el bucket de S3:

  • El perfil de instancia de Amazon Elastic Compute Cloud (Amazon EC2).
  • El rol de AWS Identity and Access Management (IAM) para el catálogo de datos.

Si faltan permisos, aparecerá un error similar al siguiente:

Unable to verify existence of default database: com.amazonaws.services.glue.model.AccessDeniedException: 
User: arn:aws:sts::Acct-id:assumed-role/Role/instance-id is not authorized to perform: glue:GetDatabase on resource: arn:aws:glue:region:Acct-id:catalog because no identity-based policy allows the glue:GetDatabase action 
(Service: AWSGlue; Status Code: 400; Error Code: AccessDeniedException; Request ID: request-id; Proxy: null

Para solucionar problemas al acceder al catálogo de datos desde la misma cuenta, compruebe los permisos del perfil de instancia o del usuario de IAM.

Para solucionar problemas al acceder al catálogo de datos entre cuentas, compruebe todos los permisos y configuración de la cuenta que llama. A continuación, compruebe que se proporciona acceso a S3 entre cuentas.

El perfil de instancia de EC2 no tiene los permisos de AWS KMS necesarios.

Si el catálogo de datos se cifra mediante una clave administrada por el cliente, el perfil de instancia de EC2 debe tener los permisos necesarios para acceder a la clave. Si faltan permisos, es posible que aparezca un error similar al siguiente. El error aparece en la consola de EMR si utiliza spark-shell, la CLI de Hive o la CLI de Presto/Trino. El error aparece en los registros del contenedor si envía el código mediante programación.

Caused by: MetaException(message:User: arn:aws:sts::acct-id:assumed-role/Role/instance-id is not authorized to perform: kms:GenerateDataKey on resource: arn:aws:kms:region:acct-id:key/fe90458f-beba-460e-8cae-25782ea9f8b3 because no identity-based policy allows the kms:GenerateDataKey action (Service: AWSKMS; Status Code: 400; Error Code: AccessDeniedException; Request ID: request-id; Proxy: null) 
(Service: AWSGlue; Status Code: 400; Error Code: GlueEncryptionException; Request ID: request-id; Proxy: null))

Para evitar el error anterior, agregue los permisos de AWS KMS necesarios para permitir el acceso a la clave.

Si la cuenta de AWS que llama al servicio no es la misma cuenta en la que se encuentra el catálogo de datos, haga lo siguiente:

El perfil de instancia no tiene acceso a AWS Lake Formation o las tablas de Glue no tienen los beneficiarios necesarios.

Cuando los permisos del catálogo de datos se administran o registran en AWS Lake Formation, el rol debe tener permisos de Lake Formation en el objeto. Si faltan los permisos de Lake Formation en el rol, es posible que aparezca el siguiente error:

pyspark.sql.utils.AnalysisException: Unable to verify existence of default database: com.amazonaws.services glue.model.AccessDeniedException: 
Insufficient Lake Formation permission(s) on default (Service: AWSGlue; Status Code: 400; Error Code: AccessDeniedException; Request ID: request-id; Proxy: null)

Para resolver el error anterior, agregue los beneficiarios necesarios al rol de perfil de instancia de EC2. Además, otorgue permisos a las tablas de Glue o a la base de datos junto con los permisos de la tabla.

El clúster de EMR no tiene las configuraciones correctas o la cadena de consulta es incorrecta

Si los permisos son correctos, pero la configuración es incorrecta, aparecerá el siguiente error en spark-shell al intentar acceder a Glue entre cuentas:

An error occurred (EntityNotFoundException) when calling the GetTables operation: Database db-name not found.

o bien

org.apache.spark.sql.AnalysisException: Table or view not found: acct-id/db.table-name line 2 pos 14

Para resolver este error, agregue todos los parámetros necesarios para las configuraciones respectivas.


OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año