En esta página, se muestra cómo resolver problemas con Cloud Data Fusion.
Soluciona problemas de canalizaciones por lotes
El siguiente consejo es para canalizaciones por lotes.
Error de canalización: El archivo de texto está ocupado
El siguiente error ocurre cuando ejecutas una canalización por lotes, lo que hace que falle:
error=26, Text file busy
Recomendación
Para resolver este problema, configura un activador que vuelva a intentar una canalización automáticamente cuando falle.
- Detén la canalización.
- Crear un activador. En este caso, cuando selecciones un evento para ejecutar, elige Falla. Para obtener más información, consulta Crea un activador entrante en una canalización descendente.
- Inicia la canalización.
La canalización simultánea está atascada
En Cloud Data Fusion, ejecutar muchas canalizaciones por lotes simultáneas puede sobrecargar la instancia, lo que puede provocar que los trabajos se detengan en los estados Starting
, Provisioning
o Running
. Como resultado, los flujos de trabajo no se pueden detener a través de la interfaz web ni de las llamadas a la API. Cuando ejecutas muchas canalizaciones de forma simultánea, la interfaz web puede volverse lenta o no responder. Este problema se produce debido a varias solicitudes de la IU que se realizan al controlador HTTP en el backend.
Recomendación
Para resolver este problema, controla la cantidad de solicitudes nuevas con el control de flujo de Cloud Data Fusion, que está disponible en las instancias que se ejecutan en la versión 6.6 y versiones posteriores.
Se agota el tiempo de espera de la conexión SSH mientras se ejecuta una canalización
El siguiente error ocurre cuando ejecutas una canalización por lotes:
`java.io.IOException: com.jcraft.jsch.JSchException:
java.net.ConnectException: Connection timed out (Connection timed out)`
Recomendación
Para resolver el error, verifica los siguientes problemas:
- Verifica si falta una regla de firewall (por lo general, el puerto 22). Para crear una nueva regla de firewall, consulta Configuración de red de clústeres de Dataproc
- Comprueba que el ejecutor de Compute Engine permita la conexión entre tu instancia de Cloud Data Fusion y el clúster de Dataproc.
Código de respuesta: 401. Error: Error desconocido
El siguiente error ocurre cuando ejecutas una canalización por lotes:
`java.io.IOException: Failed to send message for program run program_run:
Response code: 401. Error: unknown error`
Recomendación
Para resolver este error, debes otorgar el rol de ejecutor de Cloud Data Fusion (roles/datafusion.runner
) a la cuenta de servicio que usa Dataproc.
La canalización con el complemento de BigQuery falla con el error Access Denied
.
Hay un problema conocido en el que una canalización falla con un error Access Denied
cuando se ejecutan trabajos de BigQuery. Esto afecta a las canalizaciones que usan
los siguientes complementos:
- Fuentes de BigQuery
- Receptores de BigQuery
- Puntos de inserción de tablas múltiples de BigQuery
- Envío de transformaciones
Ejemplo de error en los registros (puede variar según el complemento que uses):
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"
}
En este ejemplo, PROJECT_ID es el ID del proyecto que que especificaste en el complemento. La cuenta de servicio del proyecto especificada en el complemento no tiene permiso para realizar al menos una de las siguientes acciones:
- Ejecutar un trabajo de BigQuery
- Lee un conjunto de datos de BigQuery
- Crea un bucket temporal
- Cree un conjunto de datos de BigQuery
- Crea la tabla de BigQuery
Recomendación
Para resolver este problema, otorga los roles faltantes al proyecto (PROJECT_ID) que especificaste en el complemento:
Para ejecutar un trabajo de BigQuery, otorga el rol de usuario de trabajo de BigQuery (
roles/bigquery.jobUser
).Para leer un conjunto de datos de BigQuery, otorga el rol de visualizador de datos de BigQuery (
roles/bigquery.dataViewer
).Para crear un bucket temporal, otorga el rol de administrador de almacenamiento (
roles/storage.admin
).Para crear un conjunto de datos o una tabla de BigQuery, otorga el rol de editor de datos de BigQuery (
roles/bigquery.dataEditor
).
Para obtener más información, consulta la documentación de solución de problemas del complemento (Solución de problemas de receptores de varias tablas de Google BigQuery).
La canalización no se detiene en el umbral de error
Una canalización puede no detenerse después de varios errores, incluso si configuraste el error
umbral a 1
.
El umbral de error está destinado a cualquier excepción generada desde la directiva en el evento de una falla que no se controle de otra forma. Si la directiva ya usa la API de emitError, el umbral de error no se activa.
Recomendación
Para diseñar una canalización que falle cuando se alcance un umbral determinado, usa el
Directiva FAIL
.
Cuando se cumple la condición que se pasa a la directiva FAIL
, se considera
en función del umbral de error, y la canalización falla cuando se alcanza
alcanzada.
El complemento de fuente por lotes de Oracle convierte NUMBER
en string
En las versiones de origen por lotes de Oracle 1.9.0, 1.8.3 y anteriores, el tipo de datos NUMBER
de Oracle, con precisión y escala no definidas, se asigna al tipo de datos decimal(38,0)
de CDAP.
Las versiones de complementos 1.9.1, 1.8.4 y 1.8.5 son incompatibles con versiones anteriores, y las canalizaciones
que usan versiones anteriores podrían no funcionar después de actualizar a las versiones 1.9.1,
1.8.5 y 1.8.4, si una etapa downstream en la canalización se basa en la salida
de la fuente porque cambió el esquema de salida. Cuando hay un esquema de salida definido para el tipo de datos NUMBER
de Oracle definido sin precisión ni escala en la versión anterior del complemento, después de actualizar a las versiones 1.9.1, 1.8.5 o 1.8.4, el complemento de fuente por lotes de Oracle arroja el siguiente error de discrepancia de esquema para los 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.
Las versiones 1.9.1, 1.8.5 y 1.8.4 funcionarán con un esquema de salida de CDAP.
Tipo de datos string
para el tipo de datos NUMBER
de Oracle definido sin precisión y
a gran escala. Si hay algún tipo de datos NUMBER
de Oracle definido sin precisión y
la escala presente en el esquema de salida de origen de Oracle, con la versión anterior del
No se recomienda el complemento de Oracle, ya que puede generar errores de redondeo.
El caso especial es cuando se usa una macro para el nombre de la base de datos, el nombre del esquema o
nombre de la tabla y, si no especificaste de forma manual un esquema de salida. El esquema
se detecta y se asigna en el tiempo de ejecución. La versión anterior del lote de Oracle
El complemento de origen asigna el tipo de datos NUMBER
de Oracle definido sin precisión y
escala al tipo de datos decimal(38,0)
de CDAP, mientras que las versiones 1.9.1, 1.8.5 y
La versión 1.8.4 y las posteriores asignan los tipos de datos a string
en el tiempo de ejecución.
Recomendación
Para resolver el posible problema de pérdida de precisión mientras se trabaja con Oracle NUMBER
tipos de datos con precisión y escala indefinidas, actualiza tus canalizaciones para usarlas
Versiones 1.9.1, 1.8.5 o 1.8.4 del complemento de origen por lotes de Oracle
Después de la actualización, el tipo de datos NUMBER
de Oracle se definió sin precisión y
la escala se asigna al tipo de datos string
de CDAP en el tiempo de ejecución. Si tienes una etapa o un destino descendente que consume el tipo de datos decimal
original de CDAP (al que se asignó el tipo de datos NUMBER
de Oracle definido sin precisión ni escala), actualízalo o espera que consuma datos de cadena.
Si entiendes el riesgo de una posible pérdida de datos debido a errores de redondeo, pero
elegir el tipo de datos de Oracle NUMBER definido sin precisión y escalar como
CDAP decimal(38,0)
; luego, implementa la versión 1.8.6 del complemento de Oracle (para
Cloud Data Fusion 6.7.3) o 1.9.2 (para Cloud Data Fusion 6.8.1) de
en el Hub y actualizará las canalizaciones
para usarlas en su lugar.
Para obtener más información, consulta la referencia de Oracle Batch Source.
Borra un clúster efímero de Dataproc
Cuando Cloud Data Fusion crea un clúster efímero de Dataproc durante el aprovisionamiento de ejecución de la canalización, el clúster se borra después de la canalización haya finalizado la ejecución. En casos excepcionales, falla la eliminación del clúster.
Recomendado: Actualiza a la versión más reciente de Cloud Data Fusion para garantizar un mantenimiento adecuado del clúster.
Cómo establecer el tiempo máx. de inactividad
Para resolver este problema, configura la opción Max Idle Time
. Esto permite que Dataproc borre clústeres automáticamente, incluso si
falla una llamada explícita
al final de la canalización.
Max Idle Time
está disponible en las versiones 6.4 y posteriores de Cloud Data Fusion.
Recomendación: Para las versiones anteriores a la 6.6, establece Max Idle Time
manualmente en 30
minutos o más.
Borra clústeres de forma manual
Si no puedes actualizar tu versión ni configurar la opción Max Idle Time
, haz lo siguiente:
En su lugar, borra los clústeres inactivos de forma manual:
Obtén cada ID del proyecto en el que se crearon los clústeres:
En los argumentos del entorno de ejecución de la canalización, verifica si la El ID del proyecto de Dataproc está personalizado para la ejecución.
Si un ID del proyecto de Dataproc no se especifica explícitamente, determina qué aprovisionador se usa y, luego, verifica el ID del proyecto:
En los argumentos del entorno de ejecución de la canalización, verifica el valor de
system.profile.name
.Abre la configuración del proveedor y verifica si está configurado el ID del proyecto de Dataproc. Si el parámetro de configuración no está presente o el campo está vacío, se usa el proyecto en el que se ejecuta la instancia de Cloud Data Fusion.
Para cada proyecto:
Abre el proyecto en la consola de Google Cloud y ve a Página Clústeres de Dataproc.
Ordena los clústeres por la fecha en que se crearon, de la más antigua a más reciente.
Si el panel de información está oculto, haz clic en Mostrar panel de información y ve a la pestaña Etiquetas.
Por cada clúster que no esté en uso (por ejemplo, hace más de un día) haya transcurrido: verifica si tiene una etiqueta de versión de Cloud Data Fusion. Que indica que se creó con Cloud Data Fusion.
Selecciona la casilla de verificación junto al nombre del clúster y haz clic en Borrar.
No se puede crear la instancia de Cloud Data Fusion
Cuando crees una instancia de Cloud Data Fusion, es posible que te encuentres con el siguiente problema:
Read access to project PROJECT_NAME was denied.
Recomendación
Para resolver este problema, inhabilita y vuelve a habilitar la API de Cloud Data Fusion. Luego, crea la instancia.
Las canalizaciones fallan cuando se ejecutan en clústeres de Dataproc con trabajadores principales o secundarios.
En las versiones 6.8 y 6.9 de Cloud Data Fusion, se produce un problema que las canalizaciones fallen si se ejecutan en clústeres de 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.
Recomendación
Para resolver el problema,
actualizar al parche
revisión 6.8.3.1
, 6.9.2.1
o posterior.