Treasure Data社製のDataflow Automation OSS DigdagをAWS上で試してみた。
とりあえず EC2(Amazon Linux) x 1、RDS(postgresql) x 1 の構成で。
クライアントサーバモデルだが、今回はEC2 1台でクライアントとサーバを兼ねる。
参考)
https://github.com/treasure-data/digdag
http://www.digdag.io/
概要)
https://youtu.be/OAaFr_CnXvk
参考)
http://blog.techium.jp/entry/2016/06/20/090000
http://dev.classmethod.jp/server-side/getting-started-digdag/
#digdagインストール
Amazon Linuxで以下スクリプトを実行
javaのバージョンを1.8にする必要あり (2016.9時点)
#re-install java latest version
sudo yum -y remove java
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u102-b14/jdk-8u102-linux-x64.rpm
sudo rpm -ivh jdk-8u102-linux-x64.rpm
#install digdag
sudo curl -o /usr/local/bin/digdag --create-dirs -L "https://dl.digdag.io/digdag-latest"
sudo chmod +x /usr/local/bin/digdag
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
digdag --help
コマンドが有効になればOK
#PostgreSQLを準備
digdagのプロジェクト情報等を格納するDBに、デフォルトでは永続化されないオンメモリDBのH2が設定されるが、通常運用を想定するとPostgreSQLモードなのでRDSで準備。
DBインスタンス作成後、digdag用のDB設定ファイルを作成。
postgresql.config
database.type = postgresql
database.user = DBユーザ
database.password = パスワード
database.host = XXX.ap-northeast-1.rds.amazonaws.com ※ホスト名
database.port = 5432
database.database = DB名
#digdag サーバーを起動
作成したDB設定ファイルを引数に以下コマンド起動
digdag server -c postgresql.conf
これでdigdag serverが起動
#サンプルデータフローを作成
プロジェクト作成
digdag init test
※プロジェクト名:test
すると、プロジェクト名のディレクトリが生成され、中にtest.digが作られる。
以下のように編集。
timezone: UTC
+task1:
sh>: echo "execute task1"
+task2:
sh>: echo "execute task2"
内容はshellで記載されたtask1実行後にtask2を実行するだけ。
"+" はタスクを意味する。意味付けをして、+loadとか+getとか任意に決めても良い。
sh>: はshellでタスクの処理を書く という意味。
他にも、py>: pythonや、rb>: ruby などもあり、好きな言語で処理を書ける。
このディレクトリ上で以下を実行し、作成したプロジェクトをdigdag serverへpushする。
digdag push [プロジェクト名]
git的にコードの履歴管理もできる模様。更新があれば再度Pushで上書きすれば良い。
$ digdag push testpj
2016-09-29 11:09:31 +0000: Digdag v0.8.15
Creating .digdag/tmp/archive-3107467629901268204.tar.gz...
Archiving test.dig
Archiving query.sql
Workflows:
test
Uploaded:
id: 1
name: testpj
revision: 9c30a1a1-fb73-4031-a836-bce014453fc4
archive type: db
project created at: 2016-09-29T11:09:32Z
revision updated at: 2016-09-29T11:09:32Z
Use `digdag workflows` to show all workflows.
pushされたプロジェクトの確認コマンド
$ digdag workflows
2016-09-29 11:09:41 +0000: Digdag v0.8.15
testpj
test
Use `digdag workflows <project-name> <name>` to show details.
#サンプルデータフローを実行
digdag start [プロジェクト名] [ジョブ名] --session now
$ digdag start testpj test --session now
2016-09-29 11:14:10 +0000: Digdag v0.8.15
2016-09-29 11:14:11 +0000 [INFO] (XNIO-1 task-12): Starting a new session project id=1 workflow name=test session_time=2016-09-29T11:14:11+00:00
Started a session attempt:
session id: 1
attempt id: 1
uuid: 8c7a517c-906f-4a92-be3e-af6e9c8e09db
project: testpj
workflow: test
session time: 2016-09-29 11:14:11 +0000
retry attempt name:
params: {}
created at: 2016-09-29 11:14:11 +0000
* Use `digdag session 1` to show session status.
* Use `digdag task 1` and `digdag log 1` to show task status and logs.
$ 2016-09-29 11:14:12 +0000 [INFO] (0170@+test+task1): sh>: echo "execute task1"
execute task1
2016-09-29 11:14:12 +0000 [INFO] (0170@+test+task2): sh>: echo "execute task2"
execute task2
動いた。
#実行結果ログを確認
$ digdag sessions
2016-09-29 11:18:48 +0000: Digdag v0.8.15
Sessions:
session id: 1
attempt id: 1
uuid: 8c7a517c-906f-4a92-be3e-af6e9c8e09db
project: testpj
workflow: test
session time: 2016-09-29 11:14:11 +0000
retry attempt name:
params: {}
created at: 2016-09-29 11:14:11 +0000
kill requested: false
status: success
今後は、以下を試す予定
・ちゃんとしたETLと自動リカバリ
・docker上で稼働
・複数クラスタでの分散処理