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 las canalizaciones por lotes.

Error de la canalización: archivo de texto ocupado

El siguiente error se produce cuando ejecutas una canalización por lotes, lo que provoca que falle:

error=26, Text file busy

Recomendación

Para resolver este problema, configura un activador que reintente una canalización de forma automática cuando esta falle.

  1. Detén la canalización.
  2. Crear un activador. En este caso, cuando selecciones un evento para ejecutar, elige Errores. 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á detenida

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, las canalizaciones no pueden detenerse a través de la interfaz web o 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 ocurre debido a varias solicitudes de IU realizadas 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:

  • Busca una regla de firewall faltante (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.

Existe 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
  • Receptores de varias tablas 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 especificaste en el complemento. La cuenta de servicio del proyecto especificado 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 la función de usuario del trabajo de BigQuery (roles/bigquery.jobUser).

  • Para leer un conjunto de datos de BigQuery, otorga la función 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 la función 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

Es posible que una canalización no se detenga después de varios errores, incluso si estableces el umbral de error en 1.

El umbral de error está diseñado para cualquier excepción generada por la directiva en caso de una falla que no se controle de otra manera. Si la directiva ya usa la API de emiteError, el umbral de error no está activado.

Recomendación

Para diseñar una canalización que falle cuando se alcance un umbral determinado, usa la directiva FAIL.

Cuando se cumple la condición que se pasa a la directiva FAIL, se tiene en cuenta para el umbral de error y la canalización falla después de que se alcanza el umbral.

El complemento de origen 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 indefinidas, se asigna al tipo de datos decimal(38,0) de CDAP.

Las versiones 1.9.1, 1.8.4 y 1.8.5 del complemento son incompatibles con versiones anteriores, 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 se basa en el esquema de salida de la fuente debido a que cambió el esquema de salida. Cuando hay un esquema de salida definido para el tipo de datos NUMBER de Oracle definido sin precisión y escalamiento 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 origen por lotes de Oracle muestra el siguiente error de coincidencia 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 y escala. Si hay algún tipo de datos NUMBER de Oracle definido sin precisión y escala presentes en el esquema de salida de origen 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, del esquema o de la tabla, y si no especificaste un esquema de salida de forma manual. El esquema se detecta y se asigna en el entorno de ejecución. La versión anterior del complemento de origen 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 y 1.8.4 y posteriores asignan los tipos de datos a string en el entorno de ejecución.

Recomendación

Para resolver el posible problema de pérdida de precisión mientras trabajas con los tipos de datos NUMBER de Oracle con una precisión y un escalamiento indefinidos, actualiza las canalizaciones para que usen las 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 definido sin precisión y escala se asigna al tipo de datos string de CDAP en el entorno de ejecución. Si tienes una etapa descendente o un receptor que consume el tipo de datos decimal de CDAP original (al que se asignó el tipo de datos NUMBER de Oracle definido sin precisión y 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 escalar como el tipo de datos decimal(38,0) de CDA, 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 Hub y actualiza las canalizaciones para usarlas en su lugar.

Para obtener más información, consulta la referencia de la fuente de lotes de Oracle.

Borra un clúster efímero de Dataproc

Cuando Cloud Data Fusion crea un clúster de Dataproc efímero durante el aprovisionamiento de ejecución de la canalización, el clúster se borra una vez que finaliza la ejecución de la canalización. En casos excepcionales, falla la eliminación del clúster.

Recomendación: Actualiza a la versión más reciente de Cloud Data Fusion para garantizar un mantenimiento adecuado del clúster.

Establecer tiempo de inactividad máximo

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 finalizar la canalización.

Max Idle Time está disponible en Cloud Data Fusion 6.4 y versiones posteriores.

Recomendación: Para versiones anteriores a la 6.6, configura Max Idle Time de forma manual en 30 minutos o más.

Borrar clústeres de forma manual

Si no puedes actualizar tu versión o configurar la opción Max Idle Time, 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 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 de forma explícita, determina qué aprovisionador se usa y, luego, busca un ID del proyecto:

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

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

      2. Abre la configuración del aprovisionador y verifica si se configuró el ID del proyecto de Dataproc. Si la configuración no está presente o el campo está vacío, se usa el proyecto en el que se está ejecutando la instancia de Cloud Data Fusion.

  2. Para cada proyecto:

    1. Abre el proyecto en la consola de Google Cloud y ve a la 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 la 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. 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 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 pudo crear la instancia de Cloud Data Fusion

Mientras creas una instancia de Cloud Data Fusion, es posible que encuentres 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 secundarios

En las versiones 6.8 y 6.9 de Cloud Data Fusion, se produce un problema que provoca que las canalizaciones fallen si se ejecutan en clústeres de Dataproc en los que los trabajadores secundarios están habilitados:

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 de parches 6.8.3.1, 6.9.2.1 o una posterior. Si no puedes actualizar, quita los nodos trabajadores secundarios de las siguientes maneras.

Si usas un aprovisionador efímero de Dataproc, sigue estos pasos para resolver el error:

  1. Ve a tu canalización en la interfaz web de Cloud Data Fusion.
  2. En los argumentos del entorno de ejecución de la canalización, establece system.profile.properties.secondaryWorkerNumNodes en 0. Argumento de configuración del tiempo de ejecución.
  3. Haz clic en Guardar.
  4. Si usas un espacio de nombres, inhabilita los trabajadores secundarios en el espacio de nombres:
    1. Haz clic en Administrador del sistema > Espacios de nombres y selecciona el espacio de nombres.
    2. Haz clic en Preferencias > Editar.
    3. Establece el valor de system.profile.properties.secondaryWorkerNumNodes en 0. Inhabilita a los trabajadores secundarios en un espacio de nombres.
    4. Haz clic en Guardar y cerrar.

Si usas un aprovisionador de Dataproc existente, sigue estos pasos para resolver el error:

  1. En la consola de Google Cloud, ve a la página Clústeres de Dataproc.

    Ir a los clústeres

  2. Selecciona el clúster y haz clic en Editar.

  3. En el campo Nodos trabajadores secundarios, ingresa 0. Edita los nodos trabajadores secundarios en la consola.

  4. Haz clic en Guardar.