Esta página mostra-lhe como resolver problemas com os pipelines em lote do Cloud Data Fusion.
Erro de pipeline: ficheiro de texto ocupado
Ocorre o seguinte erro quando executa um pipeline em lote, o que faz com que falhe:
error=26, Text file busy
Para resolver este problema, configure um acionador que volte a tentar automaticamente um pipeline quando falha.
- Pare a tubagem.
- Crie um acionador. Neste caso, quando selecionar um evento para executar, escolha Falha. Para mais informações, consulte o artigo Crie um acionador de entrada numa pipeline a jusante.
- Inicie a conduta.
O pipeline concorrente está bloqueado
No Cloud Data Fusion, a execução de muitos pipelines em lote simultâneos pode exercer pressão sobre a instância, o que faz com que as tarefas fiquem bloqueadas nos estados Starting
, Provisioning
ou Running
. Como resultado, não é possível parar os pipelines através da interface Web nem das chamadas API. Quando executa muitos pipelines em simultâneo, a interface Web pode ficar lenta ou não responder. Este problema ocorre devido a vários pedidos da IU feitos ao controlador HTTP no back-end.
Para resolver este problema, controle o número de novos pedidos através do controlo de fluxo do Cloud Data Fusion.
O tempo limite da ligação SSH expira enquanto um pipeline está em execução
O seguinte erro ocorre quando executa um pipeline em lote:
java.io.IOException: com.jcraft.jsch.JSchException:
java.net.ConnectException: Connection timed out (Connection timed out)
Para resolver este problema, faça o seguinte:
- Verifique se existe uma regra de firewall em falta (normalmente, a porta 22). Para criar uma nova regra de firewall, consulte o artigo Configuração de rede do cluster do Dataproc.
- Verifique se o aplicador do Compute Engine permite a ligaçã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 executa um pipeline em lote:
java.io.IOException: Failed to send message for program run program_run:
Response code: 401. Error: unknown error
Para resolver este problema, tem de
conceder a função de executor do Cloud Data Fusion (roles/datafusion.runner
)
à conta de serviço usada pelo Dataproc.
O pipeline com o plug-in do BigQuery falha com o erro Access Denied
Existe um problema conhecido em que um pipeline falha com um erro Access Denied
quando executa tarefas do BigQuery. Isto afeta os pipelines que usam os seguintes plug-ins:
- Origens do BigQuery
- Destinos do BigQuery
- Destinos de várias tabelas do BigQuery
- Pushdown de transformações
Exemplo de erro nos registos (pode ser diferente consoante o plug-in que estiver a usar):
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 especificou no plug-in. A conta de serviço do projeto especificada no plug-in não tem autorização para realizar, pelo menos, uma das seguintes ações:
- Execute uma tarefa do BigQuery
- Leia um conjunto de dados do BigQuery
- Crie um contentor temporário
- Crie um conjunto de dados do BigQuery
- Crie a tabela do BigQuery
Para resolver este problema, conceda as funções em falta ao projeto (PROJECT_ID) que especificou no plug-in:
Para executar uma tarefa do BigQuery, conceda a função de utilizador da tarefa do BigQuery (
roles/bigquery.jobUser
).Para ler um conjunto de dados do BigQuery, conceda a função de visualizador de dados do BigQuery (
roles/bigquery.dataViewer
).Para criar um contentor temporário, atribua a função de administrador do armazenamento (
roles/storage.admin
).Para criar um conjunto de dados ou uma tabela do BigQuery, conceda a função de editor de dados do BigQuery (
roles/bigquery.dataEditor
).
Para mais informações, consulte a documentação de resolução de problemas do plug-in (Resolução de problemas do Google BigQuery Multi Table Sink).
O pipeline não para no limite de erro
Um pipeline pode não parar após vários erros, mesmo que defina o limite de erros como 1
.
O limite de erro destina-se a quaisquer exceções geradas a partir da diretiva no caso de uma falha que não seja processada de outra forma. Se a diretiva já usar a API emitError, o limite de erro não é ativado.
Para criar um pipeline que falha quando é atingido um determinado limite, use a diretiva FAIL
.
Sempre que a condição transmitida à diretiva FAIL
for satisfeita, conta
para o limite de erros e o pipeline falha após o limite ser
atingido.
O plug-in de origem de lotes da Oracle converte NUMBER
em string
Nas versões 1.9.0, 1.8.3 e anteriores da origem de lotes da Oracle, o tipo de dados NUMBER
da Oracle, com precisão e escala indefinidas, é 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 a atualização para as versões 1.9.1,
1.8.5 e 1.8.4, se uma fase a jusante no pipeline depender do esquema
de saída da origem, porque o esquema de saída foi alterado. Quando existe 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, após a atualização para as versões 1.9.1, 1.8.5 ou 1.8.4, o plug-in de origem de lotes do Oracle apresenta o seguinte erro de incompatibilidade de esquemas 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 funcionam com um esquema de saída do tipo de dados CDAP
string
para o tipo de dados Oracle NUMBER
definido sem precisão e
escala. Se existir algum tipo de dados NUMBER
Oracle definido sem precisão e escala presentes no esquema de saída da origem Oracle, não é recomendável usar a versão mais antiga do plug-in Oracle, uma vez que pode originar erros de arredondamento.
O caso especial ocorre quando usa uma macro para o nome da base de dados, o nome do esquema ou o nome da tabela e se não tiver especificado manualmente um esquema de saída. O esquema é detetado e mapeado no tempo de execução. A versão mais antiga do plug-in de origem
em 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 posteriores mapeiam os tipos de dados para string
no tempo de execução.
Para resolver o possível problema de perda de precisão ao trabalhar com tipos de dados Oracle com precisão e escala indefinidas, atualize os seus pipelines para usar as versões 1.9.1, 1.8.5 ou 1.8.4 do plug-in de origem em lote da Oracle.NUMBER
Após a atualização, o tipo de dados NUMBER
do Oracle definido sem precisão e escala é mapeado para o tipo de dados string
do CDAP em tempo de execução. Se tiver uma fase ou um destino a jusante que consuma o tipo de dados decimal
original do CDAP (ao qual o tipo de dados NUMBER
do Oracle definido sem precisão e escala foi mapeado), atualize-o ou espere que consuma dados de string.
Se compreender o risco de possível perda de dados devido a erros de arredondamento, mas optar por usar o tipo de dados NUMBER da Oracle definido sem precisão e escala como o tipo de dados decimal(38,0)
do CDAP, implemente a versão 1.8.6 do plug-in da Oracle (para o Cloud Data Fusion 6.7.3) ou 1.9.2 (para o Cloud Data Fusion 6.8.1) a partir do Hub e atualize os pipelines para os usar em alternativa.
Para mais informações, consulte a referência da origem de lotes da Oracle.
Elimine um cluster Dataproc efémero
Quando o Cloud Data Fusion cria um cluster Dataproc efémero durante o aprovisionamento da execução do pipeline, o cluster é eliminado após a conclusão da execução do pipeline. Em casos raros, a eliminação do cluster falha.
Fortemente recomendado: atualize para a versão mais recente do Cloud Data Fusion para garantir a manutenção adequada do cluster.
Defina o tempo máximo de inatividade
Para resolver este problema, configure a opção Max Idle Time
. Isto permite que o Dataproc elimine clusters automaticamente, mesmo que
uma chamada explícita na conclusão do pipeline falhe.
O Max Idle Time
está disponível nas versões 6.4 e posteriores do Cloud Data Fusion.
Recomendado: para versões anteriores à 6.6, defina Max Idle Time
manualmente para 30 minutos ou mais.
Elimine clusters manualmente
Se não conseguir atualizar a versão nem configurar a opção Max Idle Time
, elimine manualmente os clusters desatualizados:
Obtenha o ID de cada projeto onde os clusters foram criados:
Nos argumentos de tempo de execução do pipeline, verifique se o ID do projeto do Dataproc está personalizado para a execução.
Se um ID do projeto do Dataproc não for especificado explicitamente, determine que aprovisionador é usado e, em seguida, verifique se existe um ID do projeto:
Nos argumentos de tempo de execução do pipeline, verifique o valor
system.profile.name
.Abra as definições do aprovisionador e verifique se o ID do projeto do Dataproc está definido. Se a definição não estiver presente ou o campo estiver vazio, é usado o projeto no qual a instância do Cloud Data Fusion está a ser executada.
Para cada projeto:
Abra o projeto na Google Cloud consola e aceda à página Clusters do Dataproc.
Ordene os clusters pela data de criação, do mais antigo para o mais recente.
Se o painel de informações estiver oculto, clique em Mostrar painel de informações e aceda ao separador Etiquetas.
Para cada cluster que não esteja em utilização, por exemplo, se tiver passado mais de um dia, verifique se tem uma etiqueta de versão do Cloud Data Fusion. Isto indica que foi criado pelo Cloud Data Fusion.
Selecione a caixa de verificação junto ao nome do cluster e clique em Eliminar.
Os pipelines falham quando são executados em clusters do Dataproc com trabalhadores principais ou secundários
Nas versões 6.8 e 6.9 do Cloud Data Fusion, ocorre um problema que faz com que os pipelines falhem 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.
Para resolver este problema,
atualize para a revisão
da correção 6.8.3.1
, 6.9.2.1
ou posterior.