Soluciona problemas de las canalizaciones por lotes de Cloud Data Fusion

En esta página, se muestra cómo resolver problemas con las canalizaciones por lotes de Cloud Data Fusion.

Error de canalización: Text file busy

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

error=26, Text file busy

Para resolver este problema, configura un activador que vuelva a intentar automáticamente una canalización cuando falla.

  1. Detén la canalización.
  2. Crea un activador En este caso, cuando selecciones un evento para ejecutar, elige Fails. Para obtener más información, consulta Crea un activador de entrada en una canalización de nivel inferior.
  3. Inicia la canalización.

La canalización simultánea está atascada

En Cloud Data Fusion, ejecutar muchas canalizaciones por lotes simultáneas puede ejercer presión sobre la instancia, lo que hace que los trabajos se atasquen 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 no responder. Este problema se produce debido a varias solicitudes de la IU que se realizan al controlador HTTP en el backend.

Para resolver este problema, controla la cantidad de solicitudes nuevas con el control de flujo de Cloud Data Fusion.

Se agota el tiempo de espera de la conexión SSH mientras se ejecuta una canalización

Se produce el siguiente error cuando ejecutas una canalización por lotes:

java.io.IOException: com.jcraft.jsch.JSchException:
java.net.ConnectException: Connection timed out (Connection timed out)

Para solucionar este problema, haz lo siguiente:

  • Verifica si falta una regla de firewall (por lo general, el puerto 22). Para crear una regla de firewall nueva, consulta Configuración de red del clúster de Managed Service para Apache Spark.
  • Verifica que el agente de aplicación de Compute Engine permita la conexión entre tu instancia de Cloud Data Fusion y el clúster de Managed Service para Apache Spark.

Código de respuesta: 401. Error: unknown error

Se produce el siguiente error 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

Para resolver este problema, debes otorgar el rol de ejecutor de Cloud Data Fusion (roles/datafusion.runner) a la cuenta de servicio que usa Managed Service para Apache Spark.

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
  • Receptores 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 especificado en el complemento no tiene permiso para realizar al menos una de las siguientes acciones:

  • Ejecutar un trabajo de BigQuery
  • Leer un conjunto de datos de BigQuery
  • Crear un bucket temporal
  • Cree un conjunto de datos de BigQuery
  • Crea la tabla de BigQuery

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 del receptor de tablas múltiples 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á destinado a cualquier excepción que se genere a partir de la directiva en caso de una falla que no se controle de otra manera. Si la directiva ya usa la API de emitError, no se activa el umbral de error.

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

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

Borra un clúster efímero de Managed Service para Apache Spark

Cuando Cloud Data Fusion crea un clúster efímero de Managed Service para Apache Spark 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, no se puede borrar el clúster.

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

Establece el tiempo máximo de inactividad

Para resolver este problema, configura la Max Idle Time opción. Esto permite que Managed Service para Apache Spark borre los clústeres automáticamente, incluso si falla una llamada explícita en la finalización de la canalización.

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

Recomendación: Para las versiones anteriores a la 6.6, establece 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 obsoletos de forma manual:

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

    1. En los argumentos de tiempo de ejecución de la canalización, verifica si el ID del proyecto de Managed Service para Apache Spark está personalizado para la ejecución.

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

    2. Si no se especifica un ID del proyecto de Managed Service para Apache Spark de forma explícita, determina qué aprovisionador se usa y, luego, busca un ID del proyecto:

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

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

      2. Abre la configuración del aprovisionador y verifica si está establecido el ID del proyecto de Managed Service para Apache Spark. Si la 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, haz lo siguiente:

    1. Abre el proyecto en la Google Cloud consola y ve a la página Clústeres de Managed Service para Apache Spark.

      Ir a los clústeres

    2. Ordena los clústeres por la fecha en que se crearon, del más antiguo al 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. Esa es una indicación de que Cloud Data Fusion lo creó.

    5. Selecciona la casilla de verificación junto al nombre del clúster y haz clic en Borrar.

Las canalizaciones fallan cuando se ejecutan en clústeres de Managed Service para Apache Spark con trabajadores principales o secundarios

En Cloud Data Fusion 6.8 y 6.9, se produce un problema que hace que las canalizaciones fallen si se ejecutan en clústeres de Managed Service para Apache Spark:

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, actualiza a la revisión de parche 6.8.3.1, 6.9.2.1 o posterior.

El complemento de Cloud Storage falla de forma intermitente con una expresión regular en Managed Service para Apache Spark 2.0

Las canalizaciones pueden fallar de forma intermitente en Cloud Data Fusion 6.10.1 cuando el complemento de Cloud Storage usa un patrón de expresión regular * en la ruta de acceso y el entorno de ejecución es Managed Service para Apache Spark 2.0.

Para resolver este problema, realiza una de las siguientes acciones:

  • Actualiza la imagen de Managed Service para Apache Spark a la versión 2.1 o posterior.
  • Revierte a una versión anterior del complemento de Cloud Storage.
  • Aumenta la memoria asignada para el ejecutor de Managed Service para Apache Spark.

Las canalizaciones fallan con NoSuchMethodError en Managed Service para Apache Spark 2.2

En Cloud Data Fusion 6.10.1.1 y versiones posteriores, las canalizaciones pueden fallar con el siguiente error cuando se ejecutan en Managed Service para Apache Spark 2.2:

java.lang.NoSuchMethodError: 'org.apache.spark.sql.catalyst.encoders.ExpressionEncoder
org.apache.spark.sql.catalyst.encoders.RowEncoder.apply(org.apache.spark.sql.types.StructType)'

Para resolver este problema, realiza una de las siguientes acciones:

El complemento de tablas de bases de datos múltiples falla si el nombre de referencia contiene espacios

En Cloud Data Fusion 6.10.1 y versiones posteriores, las canalizaciones que usan la fuente por lotes de tablas de bases de datos múltiples pueden fallar cuando el campo Nombre de referencia contiene caracteres de espacio.

Para resolver este problema, actualiza el complemento de tablas de bases de datos múltiples a la versión 1.4.1 o posterior desde el Hub. La versión actualizada no permite espacios en el campo Nombre de referencia.