Como posso solucionar falhas no trabalho do EMR ao tentar me conectar ao Catálogo de Dados do Glue?

4 minuto de leitura
0

Não é possível conectar meus trabalhos do Amazon EMR ao Catálogo de Dados do AWS Glue.

Breve descrição

O Amazon EMR usa o catálogo de dados como um metastore permanente ao usar o Apache Spark, o Apache Hive ou o Presto/Trino. É possível compartilhar o catálogo de dados em diferentes clusters, serviços, aplicações ou contas da AWS.

No entanto, a conexão com o catálogo de dados pode apresentar falhas devido aos seguintes motivos:

  • Permissões insuficientes para o Catálogo de Dados do Glue.
  • Permissões insuficientes para os objetos do Amazon Simple Storage Service (Amazon S3) especificados como o local 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 de parâmetros de clusters do EMR ausente ou incorreta.
  • Formatação incorreta para a consulta.

Resolução

O perfil de instância do EC2 não tem permissões suficientes para o catálogo de dados ou o bucket do S3

Para acessar o catálogo de dados da mesma conta ou entre contas, você deve conceder permissões para 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 (IAM) que chama o catálogo de dados.

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 catálogo de dados da mesma conta, verifique as permissões do perfil de instância ou do usuário do IAM.

Para solucionar problemas relacionados ao acesso entre contas para o catálogo de dados, verifique todas as permissões da conta que realiza a chamada e suas configurações. Em seguida, verifique se o acesso entre contas para o S3 é fornecido.

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

Se o catálogo de dados for criptografado usando uma chave gerenciada pelo cliente, o perfil de instância do EC2 deverá ter as permissões necessárias para acessar a chave. Se as permissões estiverem ausentes, você poderá ver um erro semelhante ao seguinte. O erro aparecerá em seu console do EMR se você estiver usando o spark-shell, a CLI do Hive ou a CLI do Presto/Trino. O erro aparecerá em seus logs de 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 necessárias do AWS KMS para permitir o acesso à chave.

Se a conta da AWS que chama o serviço não for a mesma conta em que o catálogo de dados está presente, faça o seguinte:

O perfil de 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 catálogo de dados são gerenciadas ou registradas no AWS Lake Formation, o perfil deve ter permissões do Lake Formation no objeto. Se as permissões do Lake Formation estiverem ausentes no perfil, você poderá 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 ao perfil para o perfil de instância do EC2. Além disso, forneça concessões para as tabelas do Glue ou para o banco de dados em conjunto 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 OFICIAL
AWS OFICIALAtualizada há um ano