Solucionar erros de esquema no AWS Glue - AWS União

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Solucionar erros de esquema no AWS Glue

Se você encontrar erros ao usar blueprints do AWS Glue, utilize as seguintes soluções para ajudar a encontrar a fonte dos problemas e corrigi-los.

Erro: módulo PySpark ausente

O AWS Glue retorna o erro “Unknown error executing layout generator function ModuleNotFoundError: No module named ‘pyspark’” (Erro desconhecido ao executar a função do gerador de layout ModuleNotFounderror: nenhum módulo chamado “pyspark”).

Ao descompactar o arquivo de blueprint, ele pode ser como um dos seguintes:

$ 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

No primeiro caso, todos os arquivos relacionados ao blueprint foram colocados em uma pasta chamada compactação e foi então convertido em um arquivo zip chamado compaction.zip.

No segundo caso, todos os arquivos necessários para o blueprint não foram incluídos em uma pasta e foram adicionados como arquivos raiz no arquivo zip compaction.zip.

Criar um arquivo em qualquer um dos formatos acima é permitido. No entanto, certifique-se de que blueprint.cfg tenha o caminho correto para o nome da função no script que gera o layout.

Exemplos

No caso 1: blueprint.cfg deve ter layoutGenerator como o seguinte:

layoutGenerator": "compaction.layout.generate_layout"

No caso 2: blueprint.cfg deve ter layoutGenerator como o seguinte:

layoutGenerator": "layout.generate_layout"

Se esse caminho não estiver incluído corretamente, você poderá ver um erro conforme indicado. Por exemplo, se tiver a estrutura de pastas conforme mencionado no caso 2 e tiver layoutGenerator indicado como no caso 1, você poderá ver o erro acima.

Erro: arquivo de configuração do blueprint ausente

O AWS Glue retorna o erro “Unknown error executing layout generator function FileNotFoundError: [Errno 2] No such file or directory: ‘/tmp/compaction/blueprint.cfg’” (Erro desconhecido executando a função do gerador de layout FileNotFoundError: [Errno 2] Nenhum arquivo ou diretório: “/tmp/compaction/blueprint.cfg”).

O blueprint.cfg deve ser colocado no nível raiz do arquivo ZIP ou dentro de uma pasta que tenha o mesmo nome que o arquivo ZIP.

Quando extraímos o arquivo ZIP do blueprint, blueprint.cfg deve ser encontrado em um dos seguintes caminhos. Se não for encontrado em um dos seguintes caminhos, você poderá ver o erro acima.

$ unzip compaction.zip Archive: compaction.zip creating: compaction/ inflating: compaction/blueprint.cfg $ unzip compaction.zip Archive: compaction.zip inflating: blueprint.cfg

Erro: arquivo importado ausente

O AWS Glue retorna o erro “Unknown error executing layout generator function FileNotFoundError: [Errno 2] No such file or directory: ‘demo-project/foo.py’” (Erro desconhecido executando a função do gerador de layout FileNotFoundError: [Errno 2] Nenhum arquivo ou diretório: “demo-project/foo.py”).

Se o script de geração de layout tiver funcionalidade para ler outros arquivos, certifique-se de fornecer um caminho completo para que o arquivo seja importado. Por exemplo, o script Conversion.py pode ser referenciado em Layout.py. Para obter mais informações, consulte Projeto de esquema de exemplo.

Error: not authorized to perform iamPassRole on resource (Erro: não autorizado a executar iamPassRole no recurso)

O AWS Glue retorna o erro “User: arn:aws:sts:: 123456789012:Assumed-Role/AWSGlueservicerole/Gluesession is not authorized to perform: iam:PassRole on resource: arn:aws:iam:: 123456789012:Role/AWSGlueservicerole” (Usuário: arn:aws:sts:: 123456789012:Assumed-Role/AWSGlueservicerole/Gluesession não está autorizado a realizar: iam:PassRole no recurso: arn:aws:iam:: 123456789012:Role/AWSGlueservicerole)

Se os trabalhos e os crawlers no fluxo de trabalho assumirem a mesma função que aquela passada para criar o fluxo de trabalho do blueprint, a função do blueprint precisará incluir a permissão iam:PassRole em si mesma.

Se os trabalhos e os crawlers no fluxo de trabalho assumirem uma função diferente da função passada para criar as entidades do fluxo de trabalho do blueprint, a função do blueprint precisará incluir a propriedade iam:PassRole nessa outra função em vez de na função do blueprint.

Para obter mais informações, consulte Permissões para perfis de esquema.

Erro: programação cron. inválida

O AWS Glue retorna o erro “The schedule cron(0 0 * * * *) is invalid” (A programação cron(0 0 * * * *) é inválida).

Forneça uma expressão cron. válida. Para obter mais informações, consulte Programações baseadas em hora para tarefas e crawlers.

Erro: já existe um acionador com o mesmo nome

O AWS Glue retorna o erro “Trigger with name 'foo_starting_trigger' already submitted with different configuration” (Acionador com o nome ‘foo_starting_trigger’ já enviado com configuração diferente).

Um blueprint não exige que você defina acionadores no script de layout para a criação do fluxo de trabalho. A criação do acionador é gerenciada pela biblioteca do blueprint com base nas dependências definidas entre duas ações.

A nomeação para os acionadores é a seguinte:

  • Para o acionador inicial no fluxo de trabalho, a nomeação é <workflow_name>_starting_trigger.

  • Para um nó (trabalho/crawler) no fluxo de trabalho que depende da conclusão de um ou vários nós upstream, o AWS Glue define um acionador com o nome <workflow_name>_<node_name>_trigger

Este erro significa que já existe um acionador com o mesmo nome. Você pode excluir o acionador existente e executar novamente a criação do fluxo de trabalho.

nota

Excluir um fluxo de trabalho não exclui os nós dentro do fluxo de trabalho. É possível que, embora o fluxo de trabalho seja excluído, os acionadores sejam deixados para trás. Devido a isso, você pode não receber um erro “workflow already exists” (o fluxo de trabalho já existe), mas você pode receber um erro “trigger already exists” (o acionador já existe) em um caso em que você cria um fluxo de trabalho, exclui e, em seguida, tenta recriá-lo com o mesmo nome do mesmo blueprint.

Erro: workflow with name: foo already exists (o fluxo de trabalho com nome: foo já existe).

O nome do fluxo de trabalho deve ser exclusivo. Tente com outro nome.

Erro: módulo não encontrado no caminho layoutGenerator especificado

O AWS Glue retorna o erro “Unknown error executing layout generator function ModuleNotFoundError: No module named ‘crawl_s3_locations’” (Erro desconhecido ao executar a função do gerador de layout ModuleNotFounderror: nenhum módulo chamado “crawl_s3_locations”).

layoutGenerator": "crawl_s3_locations.layout.generate_layout"

Por exemplo, se você tiver o caminho layoutGenerator acima, quando descompactar o arquivo de blueprint, ele precisará se parecer com o seguinte:

$ 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

Ao descompactar o arquivo, se o arquivo de blueprint se parecer com o seguinte, então você poderá obter o erro acima.

$ unzip crawl_s3_locations.zip Archive: crawl_s3_locations.zip inflating: blueprint.cfg inflating: layout.py inflating: README.md

Você pode ver que não há nenhuma pasta chamada crawl_s3_locations e, quando o caminho layoutGenerator refere-se ao arquivo de layout por meio do módulo crawl_s3_locations, você pode obter o erro acima.

Erro: erro de validação no campo Connections (Conexões)

O AWS Glue retorna o erro “Unknown error executing layout generator function TypeError: Value ['foo'] for key Connections should be of type <class 'dict'>!” (Erro desconhecido ao executar a função do gerador de layout TypeError: Valor ['foo'] para chave Conexões deve ser do tipo <class 'dict'>!).

Este é um erro de validação. O campo Connections na classe Job está esperando um dicionário e, em vez disso, uma lista de valores é fornecida, causando o erro.

User input was list of values Connections= ['string'] Should be a dict like the following Connections*=*{'Connections': ['string']}

Para evitar esses erros de runtime ao criar um fluxo de trabalho de um esquema, você pode validar as definições de fluxo de trabalho, trabalho e crawler, conforme descrito em Testar um esquema.

Consulte a sintaxe na Referência de classes de esquema do AWS Glue para definir o trabalho, crawler e fluxo de trabalho do AWS Glue no script de layout.