web-dev-qa-db-ja.com

Airflowワーカー/フラワーを起動できず、インストールが正しいことを確認するためにAirflowアーキテクチャを明確にする必要がある

別のマシンでワーカーを実行すると、以下に示すエラーが発生します。私は 設定手順 に従い、dagsフォルダーを同期しました。

RabbitMQとPostgreSQLは、Airflowコアマシンにのみインストールする必要があり、ワーカーにインストールする必要がないことも確認したいと思います(ワーカーはコアに接続するだけです)。

セットアップの仕様は以下のとおりです。

Airflowコア/サーバーコンピューター

次のものがインストールされています:

  • Python 2.7 with
    • 風量(AIRFLOW_HOME =〜/ airflow)
    • セロリ
    • psycogp2
  • RabbitMQ
  • PostgreSQL

airflow.cfgで行われた構成:

実行されたテスト:

  • RabbitMQが実行されている
  • PostgreSQLに接続でき、Airflowがテーブルを作成したことを確認できます
  • Webサーバーを起動して表示できます(カスタムDAGを含む)

Airflowワーカーコンピューター

次のものがインストールされています:

  • Python 2.7 with
    • 風量(AIRFLOW_HOME =〜/ airflow)
    • セロリ
    • psycogp2

airflow.cfgで行われた構成はサーバーとまったく同じです:

ワーカーマシンで実行されるコマンドからの出力:

実行中airflow flower

ubuntu@airflow_client:~/airflow$ airflow flower
[2016-06-13 04:19:42,814] {__init__.py:36} INFO - Using executor CeleryExecutor
Traceback (most recent call last):
  File "/home/ubuntu/anaconda2/bin/airflow", line 15, in <module>
    args.func(args)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/airflow/bin/cli.py", line 576, in flower
    os.execvp("flower", ['flower', '-b', broka, port, api])
  File "/home/ubuntu/anaconda2/lib/python2.7/os.py", line 346, in execvp
    _execvpe(file, args)
  File "/home/ubuntu/anaconda2/lib/python2.7/os.py", line 382, in _execvpe
    func(fullname, *argrest)
OSError: [Errno 2] No such file or directory

実行中airflow worker

ubuntu@airflow_client:~$ airflow worker
[2016-06-13 04:08:43,573] {__init__.py:36} INFO - Using executor CeleryExecutor
[2016-06-13 04:08:43,935: ERROR/MainProcess] Unrecoverable error: ImportError('No module named postgresql',)
Traceback (most recent call last):
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/celery/worker/__init__.py", line 206, in start
    self.blueprint.start(self)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/celery/bootsteps.py", line 119, in start
    self.on_start()
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/celery/apps/worker.py", line 169, in on_start
    string(self.colored.cyan(' \n', self.startup_info())),
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/celery/apps/worker.py", line 230, in startup_info
    results=self.app.backend.as_uri(),
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/kombu/utils/__init__.py", line 325, in __get__
    value = obj.__dict__[self.__name__] = self.__get(obj)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/celery/app/base.py", line 626, in backend
    return self._get_backend()
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/celery/app/base.py", line 444, in _get_backend
    self.loader)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/celery/backends/__init__.py", line 68, in get_backend_by_url
    return get_backend_cls(backend, loader), url
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/celery/backends/__init__.py", line 49, in get_backend_cls
    cls = symbol_by_name(backend, aliases)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/kombu/utils/__init__.py", line 96, in symbol_by_name
    module = imp(module_name, package=package, **kwargs)
  File "/home/ubuntu/anaconda2/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
ImportError: No module named postgresql

いつ celery_result_backendはデフォルトに変更されますdb+mysql://airflow:airflow@localhost:3306/airflow そしてその airflow workerを再度実行すると、結果は次のようになります。

ubuntu@airflow_client:~/airflow$ airflow worker                                                                             
[2016-06-13 04:17:32,387] {__init__.py:36} INFO - Using executor CeleryExecutor

 -------------- celery@airflow_client2 v3.1.23 (Cipater)
---- **** ----- 
--- * ***  * -- Linux-3.19.0-59-generic-x86_64-with-debian-jessie-sid
-- * - **** --- 
- ** ---------- [config]
- ** ---------- .> app:         airflow.executors.celery_executor:0x7f5cb65cb510
- ** ---------- .> transport:   amqp://username:**@192.168.1.2:5672//
- ** ---------- .> results:     mysql://airflow:**@localhost:3306/airflow
- *** --- * --- .> concurrency: 16 (prefork)
-- ******* ---- 
--- ***** ----- [queues]
 -------------- .> default          exchange=default(direct) key=celery


[2016-06-13 04:17:33,385] {__init__.py:36} INFO - Using executor CeleryExecutor
Starting flask
[2016-06-13 04:17:33,737] {_internal.py:87} INFO -  * Running on http://0.0.0.0:8793/ (Press CTRL+C to quit)
[2016-06-13 04:17:34,536: WARNING/MainProcess] celery@airflow_client2 ready.

何が欠けていますか?これをさらに診断するにはどうすればよいですか?

15
Greg

Celery Flowerをインストールする必要があります。あれは、 pip install flower

9
user1478046

ImportError: No module named postgresqlエラーは、celery_result_backendで使用されている無効なプレフィックスが原因です。データベースをCeleryバックエンドとして使用する場合、接続URLの前にdb+を付ける必要があります。 http://docs.celeryproject.org/en/latest/configuration.html#conf-database-result-backend を参照してください

だから交換してください:

celery_result_backend = postgresql+psycopg2://username:[email protected]:5432/airflow

次のようなもので:

celery_result_backend = db+postgresql://username:[email protected]:5432/airflow
20
mbreining