web-dev-qa-db-ja.com

Airflow Workerの構成

私はAirflowの初心者です。この記事を参照して、Celery Executorを使用してAirflowの分散モードをセットアップしようとしています https://stlong0521.github.io/20161023%20-%20Airflow.html

仕様について詳しく説明する前に、別のインスタンスにPostgreSQLをインストールしたことを確認します。

セットアップの仕様は以下に詳述されています:

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

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

airflow.cfgで行われた構成

_sql_alchemy_conn = postgresql+psycopg2://username:[email protected]:5432/airflow
executor = CeleryExecutor
broker_url = amqp://username:[email protected]:5672//
celery_result_backend = db+postgresql://username:[email protected]:5432/airflow
_

実行されたテスト:

_RabbitMQ is running
Can connect to PostgreSQL and have confirmed that Airflow has created tables
Can start and view the webserver (including custom dags)
_

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

以下がインストールされています:

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

Airflow.cfgで行われる構成は、サーバーの構成とまったく同じです。

_sql_alchemy_conn = postgresql+psycopg2://username:[email protected]:5432/airflow
executor = CeleryExecutor
broker_url = amqp://username:[email protected]:5672//
celery_result_backend = db+postgresql://username:[email protected]:5432/airflow
_

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

気流花を実行するとき:

_[2018-02-19 14:58:14,276] {__init__.py:57} INFO - Using executor CeleryExecutor
[2018-02-19 14:58:14,360] {driver.py:120} INFO - Generating grammar tables from /usr/lib/python3.5/lib2to3/Grammar.txt
[2018-02-19 14:58:14,384] {driver.py:120} INFO - Generating grammar tables from /usr/lib/python3.5/lib2to3/PatternGrammar.txt
[I 180219 14:58:15 command:139] Visit me at http://0.0.0.0:5555
[I 180219 14:58:15 command:144] Broker: amqp://username:[email protected]:5672//
[I 180219 14:58:15 command:147] Registered tasks: 
    ['celery.accumulate',
     'celery.backend_cleanup',
     'celery.chain',
     'celery.chord',
     'celery.chord_unlock',
     'celery.chunks',
     'celery.group',
     'celery.map',
     'celery.starmap']
[I 180219 14:58:15 mixins:224] Connected to amqp://username:[email protected]:5672//
_

Airflow CoreマシンにDAGを渡し、DAGが処理するサンプルデータ(Excelシート)を同じコアマシンにコピーしました。

ワーカーのログraise CalledProcessError(retcode, cmd) subprocess.CalledProcessError: Command 'airflow run dag_name_x task_name_xx 2018-02-19T10:15:41.657243 --local -sd /home/Distributedici/airflow/dags/sample_data_xx.py' returned non-zero exit status 1

今私のクエリは

1)dagフォルダーをワーカーコンピューターにもコピーする必要がありますか

2)現時点では、ワーカーコンピューターのdagフォルダーをコピーしていないため、ワーカープロセスがタスクを取得するのを確認できません。

私が間違っているところを指摘し、ワーカープロセスにプロセスをピックアップさせる方法を教えてください。

10
Soundar Raj

設定ファイルは大丈夫に見えます。ご想像のとおり、すべてのワーカーは実際にDAGフォルダーのコピーを必要とします。 gitのようなものを使用して、それらを同期して最新に保つことができます。

3
Daniel Huang

Airflowの最大の問題のいくつかは、展開と、Airflowスケジューラ、Airflowウェブサーバー、Celeryワーカーノード間でのDAGファイルとプラグインの同期を維持することです。

私たちは、Dockerized Airflow、Celery、PostgreSQLを自動化するオープンソースプロジェクト Astronomer Open と呼ばれるオープンソースプロジェクトを作成しました。このプロジェクトは、多くの人々が非常によく似た設定です。

たとえば、Airflow Dockerfileは次のとおりです。 https://github.com/astronomer/astronomer/blob/master/docker/airflow/1.10.2/Dockerfile

そしてドキュメント: https://open.astronomer.io/

完全な開示:これは私が職場で貢献しているプロジェクトです。Kubernetes (docs) で動作する有料の エンタープライズ版 も提供しています。つまり、Open Editionは完全に無料で使用できます。

3
Taylor Edmiston

これには少し遅れますが、既存の回答から、「手動」デプロイメント以外のDAGを(git/scpなどを介して)共有する方法はないようですが、方法はありますが、それでも誰かを助けるかもしれません。

Airflowは pickling-p CLIからのパラメーターまたはcommand: scheduler -pをdocker-composeファイルに含める)。これにより、DAGをサーバー/マスターに展開し、シリアル化してワーカーに送信することができます(したがって、DAGを複数の場所に展開する必要がなく、outの問題を回避できます-of-sync DAG)。

PicklingはCeleryExecutorと互換性があります。

ピクリングにはいくつかの制限があります。特に、クラスと関数の実際のコードはシリアル化されていないため(完全修飾名のみがシリアル化されているため)、自分で作成していないコードを参照してDAGを逆シリアル化しようとすると、エラーが発生しますターゲット環境にあります。ピクルスの詳細については、こちらをご覧ください https://docs.python.org/3.3/library/pickle.html

0
Alessandro S.