TalendOpenStudioで実現する無料(無償)のETLエコシステム
全体のアイディア
有償版のTalendはジョブの開発機能だけではなく、複数人で共通開発するための共有リポジトリやジョブ実行ターミナル(定期実行するWebアプリケーションの仕組み)がついている。 *1
僕も以前これを導入して利用したことはあるが、安定していて良い製品でした。*2
ただ、安い物ではない*3ので、無償版Talendを使ってETLジョブを作った人も、その後本番導入用途で使うのに悩む事も多いのではないだろうか? 僕の今の会社のシステムでは
で代用している。今のところ十分これで出来ている。
ジョブの定期実行機能
RundeckはWebプリケーションベースの定期実行ツールで、crontabを超高機能にしたようなものである。 crontabに比べて、エラー通知機能、Web上からの手動実行機能、過去の実行ログ閲覧機能など重要な機能は一通りあると思う。 TalendOpenStudioで作成したジョブはZIP形式でエクスポートして、Rundeckをセットアップしたマシン(AWSのEC2のAmazonLinux版であるがオンプレのLinuxサーバでもOKでしょう)の適当なディレクトリ上に解凍。ジョブ実行のシェルスクリプトをRundeck上で指定して、実行している。 Rundeckはコンポーネントを追加すれば、Webhookを指定してSlack上にジョブ開始時、完了時、失敗時にメッセージを送る事が可能なので、これで実行結果を検知できる。 欠点としては、Talendで開発したジョブの自動配置が出来ないので、どうしても
- Talend上でジョブをエクスポートしてZIP圧縮
- 実行サーバに転送(SCPなど)
- 解凍
- ジョブのパスをRundeckに新たに登録
という手間が必要になる。毎日たくさんのジョブを配置、実行しなければいけないような状況は自分は今のところはないので、これが手動でもそんなに手間ではない。
リポジトリ
筆者はデータエンジニアとして一人で開発をしているので、必須ではないのだが、複数人での開発している場合では共有リポジトリにジョブの保存は必要であろう。 (ソースコードの管理やバックアップ的な観点からも) TalendOpenStudioのジョブをGitで保存出来るか検証してみた。
Talendを使う時に「ローカルプロジェクト」を設定するとそのプロジェクトの中身の実体が設定したディレクトリ以下にできるはずである。
デフォルトであれば、Talend本体を解凍したディレクトリ以下にworkspaceというディレクトリがあるはずで、そこ以下にプロジェクトのディレクトリができる。
このディレクトリをGitの管理下に置けば、複数のマシンでリポジトリ的に共有できる。 注意点は以下
- プロジェクト名(=プロジェクトが置かれるディレクトリ名)は各マシンで共通にする。ディレクトリ名はプロジェクト名を全て大文字に変換したものになるようである。
- 利用するTalendのバージョンはマイナーバージョンまで同じにすること。Talendの仕様で「古いバージョンで作ったジョブは新しいバージョンに引き継げる」が逆は出来ないため。(Talend自体のバージョンアップは複数台同時にしたほうがいい)
- 変更前後で管理している設定ファイルのdiffを見ても正直、どこをどう変更したのかはわかりにくい。。(ので 、単なるバージョン❝保持❞ツールと割り切ること)
- AWSのコンポーネントを使う場合など、追加ライブラリのインストールが前提となっているジョブの場合、それは自動インストールされないので、適宜Talend環境ごとにインストールすること。
ジョブを一つ作成すると
- 「ジョブ名_バージョン番号.item」
- 「ジョブ名_バージョン番号.properties」
- 「ジョブ名_バージョン番号.iscreenshot」
というファイルができます。主に最初の2つがジョブの設計情報をXMLで持っているようですね。