Ir para o conteúdo

Como posso solucionar falhas de trabalho do EMR ao tentar me conectar ao Glue Data Catalog?

4 minuto de leitura
0

Meus trabalhos do Amazon EMR não conseguem se conectar ao AWS Glue Data Catalog.

Breve descrição

O Amazon EMR usa o Data Catalog como um meta armazenamento persistente ao usar o Apache Spark, o Apache Hive ou o Presto/Trino. É possível compartilhar o Data Catalog em diferentes clusters, serviços, aplicações ou contas da AWS.

No entanto, a conexão com o Data Catalog pode falhar pelos seguintes motivos:

  • Permissões insuficientes para o Glue Data Catalog.
  • Permissões insuficientes para os objetos do Amazon Simple Storage Service (Amazon S3) especificados como localização da tabela.
  • Permissões insuficientes para o serviço do AWS Key Management Service (AWS KMS) para objetos criptografados.
  • Permissões insuficientes no AWS Lake Formation.
  • Configuração ausente ou incorreta dos parâmetros do cluster do EMR.
  • Formatação de consulta incorreta.

Resolução

O perfil de instância do EC2 não tem permissões suficientes para o Data Catalog ou o bucket do S3

Para acessar o Data Catalog da mesma conta ou de várias contas, os seguintes devem ter permissões para as ações do AWS Glue e para o bucket do S3:

  • O perfil de instância do Amazon Elastic Compute Cloud (Amazon EC2).
  • O perfil do AWS Identity and Access Management (AWS IAM) que chama o Data Catalog.

Se as permissões estiverem ausentes, você verá um erro semelhante ao seguinte:

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 ao acessar o Data Catalog da mesma conta, verifique as permissões do perfil da instância ou do usuário do IAM.

Para solucionar problemas ao acessar as contas cruzadas do Data Catalog, verifique todas as permissões da conta chamadora e da configuração. Em seguida, verifique se o acesso do S3 entre contas foi fornecido.

O perfil da instância do EC2 não tem as permissões necessárias do AWS KMS

Se o Data Catalog for criptografado usando uma chave gerenciada pelo cliente, o perfil da instância do EC2 deverá ter as permissões necessárias para acessar a chave. Se as permissões estiverem ausentes, será possível ver um erro semelhante ao seguinte. O erro aparece no console do EMR se você estiver usando o spark-shell, o Hive CLI ou o Presto/Trino CLI. O erro aparece nos logs do contêiner se você estiver enviando seu código programaticamente.

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 o erro anterior, adicione as permissões do AWS KMS necessárias para permitir o acesso à chave.

Se a conta da AWS que está chamando o serviço não for a mesma conta em que o Data Catalog está presente, faça o seguinte:

O perfil da instância não tem acesso ao AWS Lake Formation ou as tabelas do Glue não têm as concessões necessárias

Quando as permissões do Data Catalog são gerenciadas ou registradas no AWS Lake Formation, o perfil deve ter permissões de Lake Formation no objeto. Se as permissões do Lake Formation estiverem ausentes no perfil, será possível ver o seguinte erro:

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 o erro anterior, adicione as concessões necessárias à função de perfil de instância do EC2. E forneça subsídios para as tabelas do Glue ou para o banco de dados junto com as permissões da tabela.

O cluster do EMR não tem as configurações corretas ou a string de consulta está incorreta

Se as permissões estiverem corretas, mas a configuração estiver incorreta, você verá o seguinte erro no spark-shell ao tentar acessar o Glue entre contas:

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

ou

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

Para resolver esse erro, adicione todos os parâmetros necessários para as respectivas configurações.


AWS OFICIALAtualizada há 3 anos