はじめまして、普段はサービス開発やら収集したデータをごちゃごちゃ整形したりしているakito1986です。
この記事はIDCフロンティア Advent Calendar 2015の7日目の記事です。
さてあれよあれよという間に7日目もあと残すところ一時間!
担当した日に公開しないとあまり意味がないと思い、さっと書けそうで最近興味があり必要性を感じているワークフローについて調べたことを書きます。
はじめに
冒頭に書いた収集したデータをごちゃごちゃ整形
の部分の話。
サービス事業者でエンジニアをしていると、「このデータとこのデータをがっちゃんこして、こういう形式のデータにして欲しい」と頼まれることが多いのではないでしょうか?
私も頼まれることがあり、「定期的に送られてくるCSVをテーブルにインポートしてクエリで集計してその結果を出力するだけでいいんでしょ?」という最初は軽い気持ちで引き受けたのですが、実際にやってみると、
- CSVファイルが送られてこない
- CSVファイルが送られてきても中身は空
- 送られてこないCSVファイルがあると、集計結果が異常になる
- 中間テーブル作成用のクエリが失敗すると、集計結果が異常になる
という問題が発生しました。
最初はcron
で十分だろうと思っていましたが、各Jobが独立していればcron
で十分だと思いますが、各Jobが依存している場合はcron
では不十分で、「依存関係にある前のJobが全て成功したらこのJobを実行する」、ということが制御できるツールが必要となります。
そこで他の人はどうしているんだろうと思い調べたのが、ワークフローツールです。
使えそうなワークフローツール
ちょっと時間がなくなってきたので、以下に使えそうなワークフローツールと説明されているリンクを記載します。
Azkaban
もともとはHadoopのJobを管理するためのツールだったようですが、普通にあるコマンドを一つのJobとして扱うことができるようです。
最近Version3.0が出ました。
Luigi
こちらももともはHadoopのJob管理をするために作られたツール。
以下のTreasureDataさんのLuigiの運用の記事が興味深い。
Airflow
Airbnb社が開発したデータフローツール。
Jobの定義はpythonスクリプトで書く。
ユーザー管理やタスクの実行時間の計測やクエリでタスクの実行結果を確認できたりで便利そう。
おわりに
冒頭の部分と「はじめに」が長くて肝心の中身が薄くなってしまいました^^;
Azkaban, Luigi, Airflowは実際に構築して触っているので別の機会にその結果と、実際のデータ活用でワークフローツールをどのような構成で利用しているかをご紹介できればと思います。
おしまい。