私はAirflowの初心者です。この記事を参照して、Celery Executorを使用してAirflowの分散モードをセットアップしようとしています https://stlong0521.github.io/20161023%20-%20Airflow.html
仕様について詳しく説明する前に、別のインスタンスにPostgreSQLをインストールしたことを確認します。
セットアップの仕様は以下に詳述されています:
Airflowコア/サーバーコンピューター
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ワーカーコンピューター
以下がインストールされています:
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フォルダーをコピーしていないため、ワーカープロセスがタスクを取得するのを確認できません。
私が間違っているところを指摘し、ワーカープロセスにプロセスをピックアップさせる方法を教えてください。
設定ファイルは大丈夫に見えます。ご想像のとおり、すべてのワーカーは実際にDAGフォルダーのコピーを必要とします。 git
のようなものを使用して、それらを同期して最新に保つことができます。
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は完全に無料で使用できます。
これには少し遅れますが、既存の回答から、「手動」デプロイメント以外の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