Soluciona problemas de Cloud Data Fusion

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.

  1. Detén la canalización.
  2. 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.
  3. 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:

  1. Obtén cada ID del proyecto en el que se crearon los clústeres:

    1. 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.

      Verifica si el ID del proyecto de Dataproc está personalizado para la ejecución

    2. Si un ID del proyecto de Dataproc no se especifica explícitamente, determina qué aprovisionador se usa y, luego, verifica el ID del proyecto:

      1. En los argumentos del entorno de ejecución de la canalización, verifica el valor de system.profile.name.

        Obtén el nombre del proveedor en los argumentos del entorno de ejecución

      2. 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.

  2. Para cada proyecto:

    1. Abre el proyecto en la consola de Google Cloud y ve a Página Clústeres de Dataproc.

      Ir a los clústeres

    2. Ordena los clústeres por la fecha en que se crearon, de la más antigua a más reciente.

    3. Si el panel de información está oculto, haz clic en Mostrar panel de información y ve a la pestaña Etiquetas.

    4. 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.

    5. 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.