並列処理

並列処理とは

並列処理は、データを分割し、複数のスレッドで並列に処理することで、高速なパフォーマンスを実現する機構です。
スレッド数は、読み取るデータのサイズやCPUのコア数など、複数の条件から自動的に決まります。

並列処理を行うためには、コンポーネントが並列処理をサポートしている必要があります。

並列処理を行うコンポーネントの入力元や出力先が並列処理をサポートしていない場合、コンポーネント内部の処理は並列で行いますが、入力データや結果データの受け渡しを直列で行うため、そこが高速なパフォーマンス実現のボトルネックになります。
入力元や出力先に並列処理をサポートしているコンポーネントを指定することで、並列処理の特性を活かした最大限のパフォーマンスを引き出すことができます。
すなわち、読み取り・変換・書き込みなど一連の処理がすべて並列処理をサポートしている場合に、並列処理は最大の効果を発揮できます。

並列処理のアーキテクチャ

処理の流れ

並列処理は以下の流れで動作します。
(以下、結果データを渡すコンポーネントを「コンポーネントA」、コンポーネントAの結果データを受け取るコンポーネントを「コンポーネントB」とします。)

コンポーネントAとコンポーネントBが並列処理をサポートしている場合

  1. コンポーネントA:読み取るデータのサイズやCPUのコア数に応じてデータを分割します。
  2. コンポーネントB:コンポーネントAで分割したデータを複数のスレッドで読み取りながら、結果データを生成します。
  3. コンポーネントB:複数のスレッドの結果データを一つにまとめて出力します。

コンポーネントAのみが並列処理をサポートしている場合

  1. コンポーネントA:読み取るデータのサイズやCPUのコア数に応じてデータを分割します。
  2. コンポーネントA:複数のスレッドの結果データを一つにまとめてコンポーネントBに渡します。
  3. コンポーネントB:コンポーネントAからデータを受け取り、結果データを生成します。
  4. コンポーネントB:結果データを出力します。

コンポーネントBのみが並列処理をサポートしている場合

  1. コンポーネントA:全データを読み取ります。
  2. コンポーネントA:読み取ったデータをコンポーネントBに渡します。
  3. コンポーネントB:コンポーネントAからデータを受け取り、データのサイズやCPUのコア数に応じて分割し、複数のスレッドで結果データを生成します。
  4. コンポーネントB:複数のスレッドの結果データを一つにまとめて出力します。

並列処理をサポートするコンポーネント

並列処理をサポートするコンポーネントは以下の通りです。
名前 処理の概要 備考
CSVファイル読み取り処理 読み取るデータのサイズが一定量になるまで半分に分割し、複数のスレッドで並列に処理します。(データのサイズやCPUのコア数によっては、中間データを一時ファイルに出力する場合があります。)
  • デフォルトの設定では並列処理は無効になっています。
    [並列処理設定を有効にする]にチェックを入れ、結果データを受け取るコンポーネントが並列処理をサポートする場合、並列処理を行います。
結合処理 受け渡された入力データを複数のスレッドで並列に処理し、結合処理用の中間データとして一時ファイルに出力して結合します。
結合した結果は適当なキーのグループ単位に分割して出力します。
 
集計処理 受け渡された入力データを複数のスレッドで並列に処理し、集計を行います。(データのサイズによっては、中間データを一時ファイルに出力する場合があります。)
集計した結果は適当なグループ単位に分割して出力します。グループキーを設定していない場合は分割を行いません。
 
ソート処理 受け渡された入力データを複数のスレッドで並列に処理し、ソートを行います。(データのサイズやCPUのコア数によっては、中間データを一時ファイルに出力する場合があります。)
順序を保証するため分割は行わず、ソートした結果を出力します。
 
CSVファイル書き込み処理 受け渡された入力データを複数のスレッドで並列に処理します。結果データの順序は保証されません。
  • 入力元コンポーネントが以下の場合、並列処理を行います。
    • CSVファイル読み取り処理で[並列処理設定を有効にする]にチェックを入れる
    • 結合処理
    • 集計処理

仕様制限