es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

DataflowTemplateOperator está fallando en Cloud Composer después de actualizar a Airflow 2.

Ejecutamos varios trabajos DataflowTemplateOperator (plantilla JDBC a BigQuery) en nuestro entorno actual de composer 1.16.0 con airflow 1.10.15. Sin embargo, al intentar ejecutar el mismo DAG en composer 1.17.6 con airflow 2.1.4, obtenemos el siguiente error:

[2021-12-07 03:08:56,478] {taskinstance.py:1465} ERROR - Task failed with exception
Traceback (most recent call last):
  File "/opt/python3.8/lib/python3.8/site-packages/airflow/models/taskinstance.py", line 1166, in _run_raw_task
    self._prepare_and_execute_task_with_callbacks(context, task)
  File "/opt/python3.8/lib/python3.8/site-packages/airflow/models/taskinstance.py", line 1285, in _prepare_and_execute_task_with_callbacks
    result = self._execute_task(context, task_copy)
  File "/opt/python3.8/lib/python3.8/site-packages/airflow/models/taskinstance.py", line 1315, in _execute_task
    result = task_copy.execute(context=context)
  File "/opt/python3.8/lib/python3.8/site-packages/airflow/providers/google/cloud/operators/dataflow.py", line 682, in execute
    job = self.hook.start_template_dataflow(
  File "/opt/python3.8/lib/python3.8/site-packages/airflow/providers/google/cloud/hooks/dataflow.py", line 99, in inner_wrapper
    raise AirflowException(
airflow.exceptions.AirflowException: El parámetro mutuamente exclusivo `location` y la clave `region` en el parámetro `variables` están ambos presentes. Por favor, elimine uno.

Establecemos el parámetro de región en las dataflow_default_options y se renderizan en airflow 1 de la siguiente manera:

{'gcpTempLocation': 'gs://us-east1-xxxx/tmp/',
 'machineType': 'n2-standard-2',
 'project': 'xxxx',
 'region': 'us-east1',
 'runner': 'DataflowRunner'}

Pero parece que el parámetro de región ya no se puede establecer a través de dataflow_default_options en airflow 2. Intentar establecer “location” en lugar de “region” no tiene efecto y el trabajo se establece por defecto en us-central1.

Ambos entornos utilizan la misma plantilla y esto se verificó en los trabajos Dataflow.

La razón por la que establecemos la región es porque lanzamos varios trabajos de dataflow y, si no los establecemos, se alcanzan los límites de cuota de CPU. Hemos aumentado nuestra cuota de CPU en us-east1.

Se agradece cualquier indicación.

Gracias.

Tags:  

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que el parámetro variables utilizado en el método start_template_dataflow() de DataflowTemplateOperator tiene tanto las claves location y region, las cuales son parámetros mutuamente excluyentes.

    Parece que con la nueva versión de Airflow 2.1.4, establecer el parámetro region en el diccionario dataflow_default_options ya no funciona y en su lugar se debe utilizar el parámetro location. Sin embargo, parece que cambiar region por location no resuelve el problema.

    Una posible solución es establecer explícitamente el parámetro location en el método start_template_dataflow(), en lugar de depender de dataflow_default_options. Por ejemplo:

    job = DataflowTemplateOperator(
            template='mi_plantilla',
            task_id='mi_tarea',
            gcp_conn_id='mi_conexión_gcp',
            parameters={},
            job_name='mi_trabajo',
            location='us-east1',
            dag=mi_dag
        )
    

    Esto debería establecer el parámetro location en us-east1 para la tarea específica de DataflowTemplateOperator.

    Otra posible solución es intentar actualizar el paquete google-cloud-dataflow a la última versión, ya que ha habido algunos cambios relacionados con estos parámetros.

    También puede ser útil verificar si se realizaron otros cambios en el entorno o dependencias durante la actualización a Airflow 2.1.4 que podrían estar causando este error.

    En cualquier caso, se recomienda probar cualquier cambio en un entorno de desarrollo antes de aplicarlo al entorno de producción.

Comments are closed.