Central Schedulerを使ってみた | Luigi Advent Calendar 2016 #22

2016.12.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

好物はインフラとフロントエンドのかじわらゆたかです。
このエントリは『Luigi Advent Calendar 2016』22日目の内容となります。

先日21日目は通知機能を試してみた でした。

今回はLuigiのCentral Scheduleを使ってみたいと思います。

下準備

Docker環境を提としています。 Docker for mac 環境にて構築を進めています。 Docker for macの導入に関しては以下の記事等が参考になるかと思います。

Public BetaになったDocker for Macを使ってみる | Developers.IO

残りの設定についてはGithubのリポジトリに上げましたので、そちらを取得してください。  

CM-Kajiwara/luigid_on_docker: Luigi Central Scheduler on Docker

$ git clone https://github.com/CM-Kajiwara/luigid_on_docker.git
$ cd luigid_on_docker
$ ./runDocker.sh
$ open http://localhost:8082

問題なければ以下のような画面が表示されます。

Luigi_Task_Visualiser_00

Central Schedulerの各種設定項目

上記のリポジトリで配置した設定ファイル等について説明します。
設定ファイルについては以前解説しましたが、その中のCentral Schedulerに対してのパラメータに対して説明します。
設定ファイルを記載してみた | Luigi Advent Calendar 2016 #07 | Developers.IO

luigi.cfg

[scheduler]
record_task_history = True
state_path = /luigid/state/luigi-state.pickle

[task_history]
db_connection = mysql+mysqlconnector://luigi:luigi@mysql/luigi

2行目のrecored_task_historyはそのまんまですね。trueにしておくとタスクの履歴が取れるようになります。
また、その際に用いるdbの接続情報が6行目になります。
こちらはsqlalchemyというライブラリを用いているため、そちらの接続文字列を記載する必要があります。
またsqlalchemyの接続文字列はDB接続に用いるライブラリも記載する必要があるようです。
そのため、上記のような記載になっています。

その他ファイルはDockerを動かす為の定義と、それを起動するためのシェルとなります。

Central Schedulerを使ってみた

Central Schedulerと名売ってありますが、Jenkinsのようにジョブを実行してくれるわけではありません。
Luigiのドキュメントには以下のように記載されています。  

Note that the central scheduler does not execute anything for you or help you with job parallelization. For running tasks periodically, the easiest thing to do is to trigger a Python script from cron or from a continuously running process. There is no central process that automatically triggers jobs. This model may seem limited, but we believe that it makes things far more intuitive and easy to understand. Using the Central Scheduler — Luigi 2.4.0 documentation

Google 翻訳にかけてみると、以下のようになります。

セントラルスケジューラはあなたのために何も実行しないか、ジョブの並列化に役立つことに注意してください。 定期的にタスクを実行する場合、最も簡単なことは、cronまたは連続して実行されているプロセスからPythonスクリプトをトリガーすることです。 ジョブを自動的にトリガする中央プロセスはありません。このモデルは限られているように見えるかもしれませんが、 私たちは物事をはるかに直観的で分かりやすくすると信じています。

上にも書きましたが、Jenkinsのようにタスク管理をしてくれるわけではないので注意が必要です。
また、Python の起動に関してもLuigiがオフィシャルサイトとしてCron等での起動を行えば良いとているの点にも注意が必要です。

ひとまず、LuigiのサンプルであるTop ArtistsをCentral Schedulerを用いて動かしてみたいと思います。

$ git clone https://github.com/spotify/luigi.git 
$ cd luigi/example
$ pip install luigi
$ python ./top_artists.py AggregateArtists --date-interval 2012-06
$ open http://localhost:8082

以下のようにな結果が取得できます。

Luigi_Task_Visualiser_02

こちらはタスクの依存の関係等を確認することができます。

上記以外にタスクの稼働結果の履歴を取得することも可能です。

$ open http://localhost:8082/history

Luigi_Task_Visualiser_03

ヒストリーから取得できるタスク詳細は以下のような画面になります。

Luigi_Task_Visualiser_04

実行したタスク一覧は以下のように見えうことができます。

Luigi_Task_Visualiser_05

まとめ

Central Schedulerの挙動を確認できました。
明日はこれまでの集大成としてMySQLからデータを取得しS3に配置、その後Loadするタスクを作ってみたいと思います。