#はじめに
Talendジョブを作成する際、コンポーネントの使い方によってOutOfMemryとなってしまう可能性があり、気を付ける必要があるコンポーネントについてまとめた記事です。
#Talendバージョン
TalendOpenStudio For DataIntergration v7.2
#OutOfMemoryを起こしやすい処理
###tMapのLookup処理
tMapのLookup側に設定したデータは、Main側の処理を開始する前にメモリ上に乗せてからMain側の処理を開始する。
そのため「-Xmx size」で指定したヒープサイズを超えるようなデータをLookup側に設定(複数のLookupを設定した場合はその合計)するとOutOfMemoryが発生する。
下記記事にあるように「store temp data」オプションを使うことでOutOfMemoryは回避できるが、メモリとディスク間での出し入れが発生しパフォーマンスが劣化すると考えらえる。
tMap利用におけるメモリ制限問題の解決
※DataStageのJoinステージのように事前にデータをソートし順次処理にすることで、メモリ上に溜め込まないような処理はできない模様。
###tSortRow
ソート処理を行うため結果的に全入力データをメモリ上にため込む形になり、ヒープ上限を超えるデータ量で処理した場合はOutOfMemoryが発生する。
「sort on disk」オプションを使うことでOutOfMemoryは回避できるが、やはりパフォーマンスが気になる。
###tAggregateRow
OutOfMemoryになる原理はtSortRowと同じ。
ただし、tAggregateRowには一時ディスクを使用するオプションがない。
#回避策
OutOfMemoryの回避策としては主に下記3つが考えられる。
・実行時に指定するヒープサイズの上限を上げる(メモリに余裕があるならこの選択肢が有力)
・一時ディスクを使用するオプションを使う(処理時間が余裕があるのであれば)
・上記のような処理はTalendジョブ外で実装する(PJルール等で1Tlanedジョブのメモリに上限がある場合は本選択肢が現実的か)
#終わりに
一応実機で確認はしていますが、記載内容の誤り等ありましたらコメントいただけますと幸いです。