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 hace que los trabajos se bloqueen en los estados Starting
, Provisioning
o Running
. Como resultado, las canalizaciones 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 dejar de 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 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 regla de firewall nueva, consulta Configuración de la red de un clúster de Dataproc.
- Verifica que el aplicador 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 diferir 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 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 la canalización de varias tablas de Google BigQuery).
La canalización no se detiene en el umbral de error
Es posible que una canalización no se detenga después de varios errores, incluso si configuras el umbral de error en 1
.
El umbral de error está destinado a cualquier excepción que se genere desde la directiva en caso de que se produzca una falla que no se controle de otra manera. 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 cumpla un umbral determinado, usa la directiva FAIL
.
Cada vez que se cumple la condición que se pasa a la directiva FAIL
, se cuenta contra el umbral de error y la canalización falla después de alcanzar el umbral.
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 no son retrocompatibles, y es posible que las canalizaciones que usan versiones anteriores no funcionen después de actualizar a las versiones 1.9.1, 1.8.5 y 1.8.4 si una etapa descendente de la canalización depende del esquema de 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 del tipo de datos string
de CDAP para el tipo de datos NUMBER
de Oracle definido sin precisión ni escala. Si hay algún tipo de datos NUMBER
de Oracle definido sin precisión ni escala en el esquema de salida de la fuente de Oracle, no se recomienda usar la versión anterior del complemento de Oracle, ya que puede generar errores de redondeo.
El caso especial es cuando usas una macro para el nombre de la base de datos, el nombre del esquema o el nombre de la tabla, y si no especificaste un esquema de salida de forma manual. El esquema se detecta y asigna durante el tiempo de ejecución. La versión anterior del complemento de fuente por lotes de Oracle 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, 1.8.4 y 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 trabajas con tipos de datos NUMBER
de Oracle con precisión y escala no definidas, actualiza tus canalizaciones para usar las versiones 1.9.1, 1.8.5 o 1.8.4 del complemento de fuente por lotes de Oracle.
Después de la actualización, el tipo de datos NUMBER
de Oracle definido sin precisión ni escala se asigna al tipo de datos string
de CDAP durante 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 comprendes el riesgo de una posible pérdida de datos debido a errores de redondeo, pero eliges usar el tipo de datos NUMBER de Oracle definido sin precisión y escala como tipo de datos decimal(38,0)
de CDAP, 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) desde el Hub y actualiza 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 la ejecución de la canalización, el clúster se borra después de que finaliza la ejecución de la canalización. En casos excepcionales, la eliminación del clúster falla.
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 en el final de la canalización.
Max Idle Time
está disponible en las versiones 6.4 y posteriores de Cloud Data Fusion.
Recomendado: Para versiones anteriores a la 6.6, configura Max Idle Time
de forma manual 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
, borra los clústeres inactivos de forma manual:
Obtén cada ID de proyecto en el que se crearon los clústeres:
En los argumentos del entorno de ejecución de la canalización, verifica si el ID del proyecto de Dataproc está personalizado para la ejecución.
Si no se especifica un ID de proyecto de Dataproc de forma explícita, determina qué aprovisionador se usa y, luego, busca un ID de 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, haz lo siguiente:
Abre el proyecto en la consola de Google Cloud y ve a la página Clústeres de Dataproc.
Ordena los clústeres por la fecha en que se crearon, de los más antiguos a los más nuevos.
Si el panel de información está oculto, haz clic en Mostrar panel de información y ve a la pestaña Etiquetas.
Para cada clúster que no esté en uso (por ejemplo, si transcurrió más de un día), verifica si tiene una etiqueta de versión de Cloud Data Fusion. Eso indica que Cloud Data Fusion la creó.
Selecciona la casilla de verificación junto al nombre del clúster y haz clic en Borrar.
No se puede crear una 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 hace 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, actualiza a la revisión del parche 6.8.3.1
, 6.9.2.1
o una posterior.