web-dev-qa-db-ja.com

DAG(有向非循環グラフ)動的ジョブスケジューラ

ETLタスクの大規模なワークフローを管理する必要があります。その実行は、時間、データの可用性、または外部イベントに依存します。一部のジョブはワークフローの実行中に失敗する可能性があり、システムは、ワークフロー全体の実行が完了するのを待たずに、失敗したワークフローブランチを再開できる必要があります。

pythonにこれを処理できるフレームワークはありますか?

私はいくつかのコア機能を見ます:

  • DAGの構築
  • ノードの実行(待機、ロギングなどを使用してシェルコマンドを実行)
  • 実行中に親DAGのサブグラフを再構築する機能
  • 親グラフの実行中にノードまたはサブグラフを手動で実行する機能
  • 外部イベントを待つ間、グラフの実行を一時停止します
  • ジョブキューとジョブの詳細を一覧表示する

Oozie のようなものですが、より一般的な目的とPythonで。

27

1)githubページで説明されているように、 dagobah を試すことができます:Dagobahは、Pythonで記述された単純な依存関係ベースのジョブスケジューラです。 Dagobahでは、Cron構文を使用して定期的なジョブをスケジュールできます。次に、各ジョブは一連のタスク(サブプロセス)を依存関係グラフで定義された順序で開始します。依存関係グラフは、Webインターフェイスでクリックアンドドラッグで簡単に描画できます。これは、以下の3つと比較して最も軽量なスケジューラプロジェクトです。

dagobah's web interface

2)ETLタスクに関して、 luigi は、Spotifyによってオープンソース化されており、説明のとおり、hadoopジョブに重点を置いています。Luigiは、バッチの複雑なパイプラインの構築に役立つPythonモジュールです仕事。依存関係の解決、ワークフロー管理、視覚化などを処理します。Hadoopサポートも組み込まれています。

luigi's web interface

2つのモジュールはどちらも主にPythonで記述されており、管理を容易にするためにWebインターフェイスが含まれています。

私の知る限り、「luigi」は、ETLタスクに必要であると思うジョブタスク用のスケジューラモジュールを提供していません。しかし、「luigi」を使用すると、Pythonでmap-reduceコードを書くのがより簡単になり、Spotifyの実行で毎日何千ものタスクがそれに依存します。

3)ルイージと同様に、Pinterestは Pinball という名前のワークフローマネージャーをオープンソース化しました。ピンボールのアーキテクチャは、ステートフルな中央マスターがステートレスクライアントへの現在のシステム状態に関する真の情報源として機能するマスターワーカー(または以下で紹介する特別なタイプのクライアントとの名前の混乱を避けるためのマスタークライアント)パラダイムに従います。そして、hadoop/Hive/sparkジョブをスムーズに統合します。

pinball's web interface

4) Airflow 、Airbnbによってオープンソース化されたさらに別のDAGジョブスケジュールプロジェクトは、LuigiやPinballに非常に似ています。バックエンドはFlask、Celeryなどの上に構築されています。 サンプルジョブコード によると、Airflowは強力であり、私の側でも使いやすいです。

airflow's web interface

最後に重要なことですが、ルイージ、エアフロー、ピンボールがより広く使用される可能性があります。そして、これら3つの間に大きな比較があります: http://bytepawn.com/luigi-airflow-pinball.html

29
zfz

これらはたくさんあります。誰もが自分で書くようです。 https://github.com/common-workflow-language/common-workflow-language/wiki/Existing-Workflow-systems に適切なリストがあります。これには、産業界と学界の両方に由来するシステムが含まれます。

8
Dunk

Ruffus を見たことがありますか?

私はそれを使った経験はありませんが、あなたのリストの項目のいくつかを行うようです。また、非常にハッキングされているように見えるため、他の要件を自分で実装できる場合があります。

1
snth