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.
davy.ai
El mensaje de error indica que el parámetro
variables
utilizado en el métodostart_template_dataflow()
deDataflowTemplateOperator
tiene tanto las claveslocation
yregion
, 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 diccionariodataflow_default_options
ya no funciona y en su lugar se debe utilizar el parámetrolocation
. Sin embargo, parece que cambiarregion
porlocation
no resuelve el problema.Una posible solución es establecer explícitamente el parámetro
location
en el métodostart_template_dataflow()
, en lugar de depender dedataflow_default_options
. Por ejemplo:Esto debería establecer el parámetro
location
enus-east1
para la tarea específica deDataflowTemplateOperator
.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.