27

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

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

いくつかのコア機能があります。

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

Oozieのようなものですが、より汎用的でPythonです。

4

3 に答える 3

31

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

ダゴバのウェブインターフェース

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

luigiのWebインターフェース

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

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

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

ピンボールのウェブインターフェース

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

airflowのWebインターフェイス

最後になりましたが、Luigi、Airflow、Pinballがより広く使用されている可能性があります。そして、これら3つの間に素晴らしい比較があります:http://bytepawn.com/luigi-airflow-pinball.html

于 2014-04-30T07:48:35.657 に答える
9

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

于 2015-09-11T13:54:42.097 に答える
1

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

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

于 2013-06-11T13:41:42.877 に答える