はじめに
Talend Studioという製品は、ETLやデータ統合を効率化するための開発環境です。GUIベースでジョブ設計ができ、複雑な処理もノーコードで実現可能。オンプレやクラウドを問わず、幅広いデータ連携をサポートします。
そこで使われるコンポーネントの一つにtRunJobというジョブの中からジョブを呼び出すコンポーネントがあります。
本記事ではこのtRunJobコンポーネントについて深堀していきます。
実施したいこと
tRunJobコンポーネントの「子ジョブを独立したプロセスで実行」を有効化した際、メモリ確保がどうなるか理解する。
そのために、以下のケースでメモリ確保の確認をしていきます。
- tRunjobを使わない場合
- tRunjobの「子ジョブを独立したプロセスで実行」を無効にした場合
- tRunjobの「子ジョブを独立したプロセスで実行」を有効にした場合
- おまけ:tRunjobの「子ジョブを独立したプロセスで実行」を有効にして複数同時にプロセス起動した場合
1.tRunjobを使わない場合
検証用にtSleepコンポーネントで10s待機するジョブを作成しました。
また、JVMパラメータに-Xms、-Xmxを1024MBで設定しました。

実行結果
リソースモニターのコミットチャージ※1を確認するとジョブを起動時に1024MB分膨らんでいるのが分かります。
※1:OSが『この分のメモリは使えるようにしておくよ』と約束した量で、物理メモリ+ページファイルの合計で管理されます。
2.tRunjobの「子ジョブを独立したプロセスで実行」を無効にした場合
以下のようなジョブを作成しました。
①tLoopコンポーネントで以下の②~③を5回ループする。
②tRunJobコンポーネントからtSleepで5秒待機するジョブを実行。
③tSleepコンポーネントで2秒待機する。
tJavaコンポーネントは何もしません。後続処理をOnCompornentOkトリガで接続したいために置いております。
実行結果
3.tRunjobの「子ジョブを独立したプロセスで実行」を有効にした場合
ジョブ自体は2.とほぼ同じで違いは「子ジョブを独立したプロセスで実行」を有効にしております。

実行結果
ジョブを呼び出している間だけ2048GB確保しているのが分かります。

おまけ
■tRunjobの「子ジョブを独立したプロセスで実行」を有効にして複数同時にプロセス起動した場合
tLoopコンポーネントのループ回数を増やして、iterateトリガーの並列処理数を20にしてみました。
検証環境はメモリが16GBなのでどうなるの確認します。

実行結果
また、Talend Studioはエラーで停止しました。内容を確認するとJavaが必要なメモリを確保できず、実行を続行できなくて終了しているようです。

まとめ
tRunJobコンポーネントを使うことで呼び出しているジョブとは別にメモリ確保することが可能。だだし、並列実行を有効化するとメモリを圧迫するので気をつける必要があることがわかりました。
また、tRunJobコンポーネントについては以下の記事でも紹介しております。
以上、閲覧ありがとうございました。




