Nesta página, você verá como resolver problemas com o Cloud Data Fusion.
Resolver problemas de pipelines em lote
As orientações a seguir são para pipelines em lote.
Erro de pipeline: arquivo de texto ocupado
O seguinte erro ocorre quando você executa um pipeline em lote, causando a falha:
error=26, Text file busy
Recomendação
Para resolver esse problema, configure um acionador que tente novamente automaticamente um pipeline quando ele falhar.
- Interrompa o pipeline.
- Crie um gatilho. Nesse caso, ao selecionar um evento para execução, escolha Falhas. Para mais informações, consulte Criar um gatilho de entrada em um downstream pipeline.
- Inicie o pipeline.
O pipeline simultâneo está travado
No Cloud Data Fusion, a execução de muitos pipelines em lote simultâneos pode sobrecarregar a instância, fazendo com que os jobs fiquem presos nos estados Starting
, Provisioning
ou Running
. Como resultado, os pipelines não podem ser interrompidos pela interface da Web ou chamadas de API. Quando você executa muitos pipelines ao mesmo tempo, a interface da Web pode ficar lenta ou não responder. Esse problema ocorre devido a várias solicitações UI feitas ao gerenciador HTTP no back-end.
Recomendação
Para resolver esse problema, controle o número de novas solicitações usando o controle de fluxo do Cloud Data Fusion, que está disponível nas instâncias em execução na versão 6.6 e mais recentes.
A conexão SSH atinge o tempo limite durante a execução de um pipeline
O seguinte erro ocorre quando você executa um pipeline em lote:
`java.io.IOException: com.jcraft.jsch.JSchException:
java.net.ConnectException: Connection timed out (Connection timed out)`
Recomendação
Para resolver o erro, verifique os seguintes problemas:
- Verifique se falta uma regra de firewall (normalmente a porta 22). Para criar uma nova regra de firewall, consulte Configuração de rede de cluster do Dataproc.
- Verifique se o aplicador do Compute Engine permite a conexão entre a instância do Cloud Data Fusion e o cluster do Dataproc.
Código de resposta: 401. Erro: erro desconhecido
O seguinte erro ocorre quando você executa um pipeline em lote:
`java.io.IOException: Failed to send message for program run program_run:
Response code: 401. Error: unknown error`
Recomendação
Para resolver esse erro, conceda o papel de executor do Cloud Data Fusion (roles/datafusion.runner
) à conta de serviço usada pelo Dataproc.
Falha no pipeline com o plug-in do BigQuery com erro Access Denied
Há um problema conhecido em que um pipeline falha com um erro Access Denied
ao
executar jobs do BigQuery. Isso afeta os pipelines que usam os
seguintes plug-ins:
- Origens do BigQuery
- Coletores do BigQuery
- Coletores de várias tabelas do BigQuery
- Transformador pushdown
Exemplo de erros nos registros (pode variar conforme o plug-in que você está usando):
POST https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/jobs
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "Access Denied: Project xxxx: User does not have bigquery.jobs.create permission in project PROJECT_ID",
"reason" : "accessDenied"
} ],
"message" : "Access Denied: Project PROJECT_ID: User does not have bigquery.jobs.create permission in project PROJECT_ID.",
"status" : "PERMISSION_DENIED"
}
Neste exemplo, PROJECT_ID é o ID do projeto que você especificou no plug-in. A conta de serviço do projeto especificado no plug-in não tem permissão para realizar pelo menos uma das seguintes ações:
- Executar um job do BigQuery
- Ler um conjunto de dados do BigQuery
- Criar um bucket temporário
- Crie um conjunto de dados do BigQuery
- Criar a tabela do BigQuery
Recomendação
Para resolver esse problema, conceda os papéis ausentes ao projeto (PROJECT_ID) que você especificou no plug-in:
Para executar um job do BigQuery, conceda o papel de usuário do job do BigQuery (
roles/bigquery.jobUser
).Para ler um conjunto de dados do BigQuery, conceda a permissão Papel "Leitor de dados" (
roles/bigquery.dataViewer
).Para criar um bucket temporário, conceda o papel de Administrador do Storage (
roles/storage.admin
).Para criar um conjunto de dados ou uma tabela do BigQuery, conceda a Papel Editor de dados do BigQuery (
roles/bigquery.dataEditor
).
Para mais informações, consulte a documentação de solução de problemas do plug-in (Solução de problemas de coletores de várias tabelas do Google BigQuery).
O pipeline não para no limite de erros
Um pipeline pode não ser interrompido após vários erros, mesmo que você defina o erro
limite para 1
.
O limite de erro destina-se a quaisquer exceções geradas pela diretiva em o evento de uma falha que não pode ser tratada de outra forma. Se a diretiva já usa a API emitError, o limite de erro não é ativado.
Recomendação
Para projetar um pipeline que falha quando um determinado limite é atingido, use a
diretiva FAIL
.
Sempre que a condição transmitida à diretiva FAIL
for atendida, ela será contabilizada
contra o limite de erro, e o pipeline falhará após o limite ser
atingido.
O plug-in de origem em lote do Oracle converte NUMBER
em string
Nas versões de origem em lote do Oracle 1.9.0, 1.8.3 e anteriores, o tipo de dados NUMBER
do Oracle, com precisão e escala indefinidos, é mapeado para o tipo de dados
decimal(38,0)
do CDAP.
As versões 1.9.1, 1.8.4 e 1.8.5 do plug-in são incompatíveis com versões anteriores, e os pipelines
que usam versões anteriores podem não funcionar após o upgrade para as versões 1.9.1,
1.8.5 e 1.8.4, caso um estágio downstream no pipeline dependa do esquema de saída
da origem, porque o esquema de saída foi alterado. Quando há um
esquema de saída definido para o tipo de dados NUMBER
do Oracle definido sem
precisão e escala na versão anterior do plug-in, depois de fazer upgrade para as versões
1.9.1, 1.8.5 ou 1.8.4, o plug-in de origem em lote do Oracle gera o seguinte:
erro de incompatibilidade de esquema para os tipos: Schema field '<field name>' is expected to
have type 'decimal with precision <precision> and scale <scale> but found
'string'. Change the data type of field <field name> to string.
As versões 1.9.1, 1.8.5 e 1.8.4 funcionarão com um esquema de saída do CDAP
O tipo de dados string
para o tipo de dados NUMBER
do Oracle definido sem precisão e
escala. Se houver algum tipo de dados NUMBER
do Oracle definido sem precisão e
escala presente no esquema de saída de origem do Oracle, usando a versão mais antiga do
O plug-in Oracle não é recomendado, já que pode levar a erros de arredondamento.
O caso especial é quando você usa uma macro para o nome do banco de dados, o nome do esquema ou
o nome da tabela, e se você não tiver especificado manualmente um esquema de saída. O esquema
são detectados e mapeados no ambiente de execução. A versão mais antiga do plug-in de origem de lote do Oracle mapeia o tipo de dados NUMBER
do Oracle definido sem precisão e escala para o tipo de dados decimal(38,0)
do CDAP, enquanto as versões 1.9.1, 1.8.5 e 1.8.4 e mais recentes mapeiam os tipos de dados para string
no momento da execução.
Recomendação
Para resolver o possível problema de perda de precisão ao trabalhar com tipos de dados NUMBER
do Oracle com precisão e escala indefinidos, faça upgrade dos pipelines para usar
as versões 1.9.1, 1.8.5 ou 1.8.4 do plug-in de origem de lote do Oracle.
Após o upgrade, o tipo de dados NUMBER
do Oracle definido sem precisão e
escala é mapeado para o tipo de dados string
do CDAP no momento da execução. Se você tiver um
estágio ou coletor downstream que consuma o tipo de dados decimal
original do CDAP (para o qual o tipo de dados NUMBER
do Oracle foi definido sem precisão e escala foi
mapeado), atualize-o ou espere que ele consuma dados de string.
Se você entende o risco de uma possível perda de dados devido a erros de arredondamento, mas
optar por usar o tipo de dados Oracle NUMBER definido sem precisão e escala conforme
Tipo de dados decimal(38,0)
do CDAP e implantar o plug-in Oracle versão 1.8.6 (para
Cloud Data Fusion 6.7.3) ou 1.9.2 (para o Cloud Data Fusion 6.8.1) de
no Hub e atualizar os pipelines para usá-los.
Para mais informações, consulte a Referência da fonte em lote da Oracle.
Excluir um cluster temporário do Dataproc
Quando o Cloud Data Fusion cria um cluster temporário do Dataproc durante o provisionamento da execução do pipeline, o cluster é excluído após a conclusão da execução do pipeline. Em casos raros, a exclusão do cluster falha.
Altamente recomendado: faça upgrade para a versão mais recente do Cloud Data Fusion para garantir a manutenção adequada do cluster.
Definir tempo máximo de inatividade
Para resolver esse problema, configure o Max Idle Time
é a melhor opção. Isso permite que o Dataproc exclua clusters automaticamente, mesmo que
uma chamada explícita no final do pipeline falhe.
O Max Idle Time
está disponível nas versões 6.4 e mais recentes do Cloud Data Fusion.
Recomendado: para versões anteriores à 6.6, defina Max Idle Time
manualmente como 30
minutos ou mais.
Excluir clusters manualmente
Se não for possível fazer upgrade da versão ou configurar a opção Max Idle Time
,
exclua manualmente os clusters desatualizados:
Encontre o ID de cada projeto em que os clusters foram criados:
Nos argumentos do ambiente de execução do pipeline, verifique se o O ID do projeto do Dataproc é personalizado para a execução.
Se um ID do projeto do Dataproc não for especificado explicitamente, determine qual provisionador é usado e verifique se há um ID do projeto:
Nos argumentos do ambiente de execução do pipeline, verifique os
system.profile.name
.Abra as configurações do provisionador e verifique se o ID do projeto do Dataproc está definido. Se a configuração não for presente ou o campo estiver vazio, o projeto que A instância do Cloud Data Fusion em execução é usada.
Para cada projeto:
Abra o projeto no console do Google Cloud e acesse Página Clusters do Dataproc.
Classifique os clusters pela data em que foram criados, do mais antigo ao mais recente.
Se o painel de informações estiver oculto, clique em Mostrar painel de informações e acesse a Marcadores.
Para cada cluster que não está em uso, por exemplo, se mais de um dia se passou, verifique se ele tem um rótulo de versão do Cloud Data Fusion. Isso indica que ela foi criada pelo Cloud Data Fusion.
Marque a caixa de seleção ao lado do nome do cluster e clique em Excluir.
Não é possível criar uma instância do Cloud Data Fusion
Ao criar uma instância do Cloud Data Fusion, você pode encontrar as seguinte problema:
Read access to project PROJECT_NAME was denied.
Recomendação
Para resolver esse problema, desative e reative a API Data Fusion. Em seguida, crie a instância.
Os pipelines falham quando executados em clusters do Dataproc com workers primários ou secundários
Nas versões 6.8 e 6.9 do Cloud Data Fusion, ocorre um problema que causa Os pipelines falharão se forem executados em clusters do Dataproc:
ERROR [provisioning-task-2:i.c.c.i.p.t.ProvisioningTask@161] - PROVISION task failed in REQUESTING_CREATE state for program run program_run:default.APP_NAME.UUID.workflow.DataPipelineWorkflow.RUN_ID due to
Caused by: io.grpc.StatusRuntimeException: CANCELLED: Failed to read message.
Caused by: com.google.protobuf.GeneratedMessageV3$Builder.parseUnknownField(Lcom/google/protobuf/CodedInputStream;Lcom/google/protobuf/ExtensionRegistryLite;I)Z.
Recomendação
Para resolver o problema,
fazer upgrade para o patch
revisão 6.8.3.1
, 6.9.2.1
ou posterior.