Планировщик воздушного потока Сбой при установке Postgres сельдерея result_backend - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь реализовать Apache Воздушный поток с CeleryExecutor. Для базы данных я использую Postgres, для очереди сообщений сельдерея я использую Redis. При использовании LocalExecutor все работает нормально, но когда я устанавливаю CeleryExecutor в airflow.cfg и хочу установить базу данных Postgres как result_backend

result_backend = postgresql+psycopg2://airflow_user:*******@localhost/airflow

Я получаю эту ошибку при запуске планировщика Airflow независимо от того, какой DAG я запускаю:

[2020-03-18 14:14:13,341] {scheduler_job.py:1382} ERROR - Exception when executing execute_helper
Traceback (most recent call last):
  File "<PATH_TO_VIRTUALENV>/lib/python3.6/site-packages/kombu/utils/objects.py", line 42, in __get__
    return obj.__dict__[self.__name__]
KeyError: 'backend'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<PATH_TO_VIRTUALENV>/lib/python3.6/site-packages/airflow/jobs/scheduler_job.py", line 1380, in _execute
    self._execute_helper()
  File "<PATH_TO_VIRTUALENV>/lib/python3.6/site-packages/airflow/jobs/scheduler_job.py", line 1441, in _execute_helper
    if not self._validate_and_run_task_instances(simple_dag_bag=simple_dag_bag):
  File "<PATH_TO_VIRTUALENV>/lib/python3.6/site-packages/airflow/jobs/scheduler_job.py", line 1503, in _validate_and_run_task_instances
    self.executor.heartbeat()
  File "<PATH_TO_VIRTUALENV>/lib/python3.6/site-packages/airflow/executors/base_executor.py", line 130, in heartbeat
    self.trigger_tasks(open_slots)
  File "<PATH_TO_VIRTUALENV>/lib/python3.6/site-packages/airflow/executors/celery_executor.py", line 205, in trigger_tasks
    cached_celery_backend = tasks[0].backend
  File "<PATH_TO_VIRTUALENV>/lib/python3.6/site-packages/celery/local.py", line 146, in __getattr__
    return getattr(self._get_current_object(), name)
  File "<PATH_TO_VIRTUALENV>/lib/python3.6/site-packages/celery/app/task.py", line 1037, in backend
    return self.app.backend
  File "<PATH_TO_VIRTUALENV>/lib/python3.6/site-packages/kombu/utils/objects.py", line 44, in __get__
    value = obj.__dict__[self.__name__] = self.__get(obj)
  File "<PATH_TO_VIRTUALENV>/lib/python3.6/site-packages/celery/app/base.py", line 1227, in backend
    return self._get_backend()
  File "<PATH_TO_VIRTUALENV>/lib/python3.6/site-packages/celery/app/base.py", line 944, in _get_backend
    self.loader)
  File "<PATH_TO_VIRTUALENV>/lib/python3.6/site-packages/celery/app/backends.py", line 74, in by_url
    return by_name(backend, loader), url
  File "<PATH_TO_VIRTUALENV>/lib/python3.6/site-packages/celery/app/backends.py", line 60, in by_name
    backend, 'is a Python module, not a backend class.'))
celery.exceptions.ImproperlyConfigured: Unknown result backend: 'postgresql'.  Did you spell that correctly? ('is a Python module, not a backend class.')

Точно такой же параметр для направления в базу данных работает

sql_alchemy_conn = postgresql+psycopg2://airflow_user:*******@localhost/airflow

Установка Redis как сельдерея result_backend работает, но я читал, что это не рекомендуемый способ .

result_backend = redis://localhost:6379/0

Кто-нибудь видит, что я делаю неправильно?

1 Ответ

0 голосов
/ 09 апреля 2020

Вам необходимо добавить префикс db+ в строку подключения к базе данных:

f"db+postgresql+psycopg2://{user}:{password}@{host}/{database}"

Это также упоминается в документации: https://docs.celeryproject.org/en/stable/userguide/configuration.html#database -url-examples

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...