web-dev-qa-db-ja.com

エアフロー「このDAGはWebサーバーのDagBagオブジェクトでは使用できません」

新しいDAG pythonスクリプトをdagsフォルダーに配置すると、DAG UIでDAGの新しいエントリを表示できますが、自動的に有効になりませんでした。リストの右側にある[更新]ボタンを数回クリックし、リストの左側にあるオン/オフボタンを切り替えてDAGをスケジュールできるようにするだけです。 DAGスクリプトがdagフォルダー内に配置されていても、何かをトリガーする必要があります。

誰でもこれで私を助けることができますか?私は何かを見逃しましたか?または、これは気流の正しい動作ですか?

ところで、投稿タイトルで述べたように、「このDAGはWebサーバーのDagBagオブジェクトでは使用できません。metdataデータベースでスケジューラがアクティブとしてマークしたため、このリストに表示されます」というタグが付いています。このすべての手動プロセスをトリガーする前に、DAGタイトルで。

44
santi

それはあなたではなく、正しいまたは予想される動作でもありません。これは、エアフローの現在の「バグ」です。 Webサーバーは、期待どおりに実際に使用できない方法でDagBagをキャッシュしています。

Attempt removing DagBag caching for the web server "は公式に残っています [〜#〜] todo [〜#〜] ロードマップの一部として、このバグはまだ完全には解決されていない可能性があることを示していますが、続行:

エアフローv1.9 +でのみビルダーを使用します

エアフローv1.9より前は、インスタンス化が行われるファイルにインポートされる関数によってDAGがインスタンス化されると発生します。つまり、 builder または factory パターンが使用されている場合です。 github 2 およびJIRA でのこの問題のいくつかのレポートは、エアフローv1.9で 修正 にリリースされました。

旧バージョンのエアフローを使用している場合は、ビルダー機能を使用しないでください。

airflow backfillキャッシュをリロードする

Dmitriが示唆するように、airflow backfill '<dag_id>' -s '<date>' -e '<date>'開始日と終了日が同じ場合に役立つことがあります。その後、Priyankが指摘する(非)問題が発生する可能性がありますが、これはインストールの構成に応じて予想される動作(状態:一時停止または停止)です。

15
Guille

airflow webserverを再起動すると問題が解決します。

8
rileyss

問題は、DAGがデフォルトでDagBagにpaused stateで配置されるため、開始/再起動時に多くのバックフィルアクティビティでスケジューラが圧倒されないためです。

この問題を回避するには、airflow.cfgファイルの以下の設定を変更します。

# Are DAGs paused by default at creation 
dags_are_paused_at_creation = False

お役に立てれば。乾杯!

3
Priyank Mehta

Google Composerでこの問題の考えられる原因についての理論を持っています。 Webサーバーのdagエラーに関するセクションがあります Composerのトラブルシューティングドキュメント

DAG解析時に重い計算を実行しないでください。マシンタイプをカスタマイズしてCPUおよびメモリ容量を増やすことができるワーカーおよびスケジューラノードとは異なり、Webサーバーは固定マシンタイプを使用します。これにより、解析時間の計算が重すぎる場合、DAG解析エラーが発生する可能性があります。

そして、外部ソースから構成をロードしようとしました(実際にはDAGを作成するために他の操作と比較して無視できるほどの時間を要しましたが、エアフローのウェブサーバーがcomposer 、奇妙な動作があります)。

これについての議論で回避策を見つけました Google issue 、必要なすべてのデータをロードし、そのデータをエアフロー変数に保存するタスクで個別のDAGを作成することです:

Variable.set("pipeline_config", config, serialize_json=True)

それから私はできる

Variable.get("pipeline_config", deserialize_json=True)

そして、そこからパイプラインを正常に生成します。追加の利点は、 この問題 のため、Webサーバーから取得するそのタスクからログを取得することです。

1
Bunyk