並列処理
並列処理とは
並列処理は、データを分割し、複数のスレッドで並列に処理することで、高速なパフォーマンスを実現する機構です。
スレッド数は、読み取るデータのサイズやCPUのコア数など、複数の条件から自動的に決まります。
並列処理を行うためには、コンポーネントが並列処理をサポートしている必要があります。
並列処理をサポートしているコンポーネントについては、「並列処理をサポートするコンポーネント」を参照してください。
並列処理を行うコンポーネントの入力元や出力先が並列処理をサポートしていない場合、コンポーネント内部の処理は並列で行いますが、入力データや結果データの受け渡しを直列で行うため、高速なパフォーマンス実現のボトルネックになります。
入力元や出力先に並列処理をサポートしているコンポーネントを指定することで、並列処理の特性を生かした最大限のパフォーマンスを引き出すことができます。読み取り、変換、および書き込みなど一連の処理がすべて並列処理をサポートしている場合に、並列処理は最大の効果を発揮できます。
並列処理のアーキテクチャ
処理の流れ
並列処理は以下の流れで動作します。
以下、結果データを渡すコンポーネントを「コンポーネントA」、コンポーネントAの結果データを受け取るコンポーネントを「コンポーネントB」とします。
コンポーネントAとコンポーネントBが並列処理をサポートしている場合
-
コンポーネントA:読み取るデータのサイズやCPUのコア数に応じてデータを分割します。
-
コンポーネントB:コンポーネントAで分割したデータを複数のスレッドで読み取りながら、結果データを生成します。
-
コンポーネントB:複数のスレッドの結果データを1つにまとめて出力します。
コンポーネントAのみが並列処理をサポートしている場合
-
コンポーネントA:読み取るデータのサイズやCPUのコア数に応じてデータを分割します。
-
コンポーネントA:複数のスレッドの結果データを1つにまとめてコンポーネントBに渡します。
-
コンポーネントB:コンポーネントAからデータを受け取り、結果データを生成します。
-
コンポーネントB:結果データを出力します。
コンポーネントBのみが並列処理をサポートしている場合
-
コンポーネントA:全データを読み取ります。
-
コンポーネントA:読み取ったデータをコンポーネントBに渡します。
-
コンポーネントB:コンポーネントAからデータを受け取り、データのサイズやCPUのコア数に応じて分割し、複数のスレッドで結果データを生成します。
-
コンポーネントB:複数のスレッドの結果データを1つにまとめて出力します。
並列処理をサポートするコンポーネント
並列処理をサポートするコンポーネントは以下のとおりです。
- CSVファイル読み取り処理
-
読み取るデータのサイズが一定量になるまで半分に分割し、複数のスレッドで並列に処理します。(データのサイズやCPUのコア数によっては、中間データを一時ファイルに出力する場合があります。)
デフォルトの設定では並列処理は無効になっています。
並列処理設定を有効にするにチェックを入れると、結果データを受け取るコンポーネントが並列処理をサポートする場合に、並列処理が行われます。
- 結合処理
-
受け渡された入力データを複数のスレッドで並列に処理し、結合処理用の中間データとして一時ファイルに出力して結合します。
結合した結果は適当なキーのグループごとに分割して出力します。
- 集計処理
-
受け渡された入力データを複数のスレッドで並列に処理し、集計を行います。(データのサイズによっては、中間データを一時ファイルに出力する場合があります。)
集計した結果は適当なグループごとに分割して出力します。グループキーを設定していない場合は分割を行いません。
- ソート処理
-
受け渡された入力データを複数のスレッドで並列に処理し、ソートを行います。(データのサイズやCPUのコア数によっては、中間データを一時ファイルに出力する場合があります。)
順序を保証するため分割は行わず、ソートした結果を出力します。
- CSVファイル書き込み処理
-
受け渡された入力データを複数のスレッドで並列に処理します。結果データの順序は保証されません。
入力元コンポーネントが以下の場合、並列処理を行います。
-
CSVファイル読み取り処理で並列処理設定を有効にするにチェックを入れる
-
結合処理
-
集計処理
-
仕様制限
-
PSPデータフローが有効な場合、並列処理は行われません。
-
並列処理を行うコンポーネントの入力元の処理時間が、実行履歴ビューで極めて短く表示される場合があります。
-
並列処理を行うコンポーネントの入力元で発生したエラーが、並列処理を行うコンポーネントで出力される場合があります。
-
並列処理で発生したエラーが、並列処理の結果データを受け取るコンポーネントで出力される場合があります。
-
以下の場合、実行時に「DataAlreadyUsedException」エラーが発生します。
-
並列処理設定を有効にするにチェックが入っているCSVファイル読み取り処理を、並列処理を行う複数のコンポーネントで使用する
-
結合処理、グループキーを設定している集計処理、またはソート処理の結果データを、複数のコンポーネントで使用する
-
-
結合処理、グループキーを設定している集計処理、またはソート処理の結果データを、以下のコンポーネントまたは特定の条件下で使用した場合、実行時にエラーが発生します。
-
繰り返し処理、繰り返し(条件指定)処理、または繰り返し(データ件数)処理で、繰り返しの外にある並列処理から繰り返し内のコンポーネントに直接データフローを引いている
-
変数Mapper
-
ドキュメントMapperで、スクリプト変数に代入する
-
マージMapper
-
キーによるソートロジック
-
2つのキーによるソートロジック
-
-
繰り返し処理、繰り返し(条件指定)処理、または繰り返し(データ件数)処理で、繰り返しの外にある、並列処理設定を有効にするにチェックが入っているCSVファイル読み取り処理から、繰り返し内の並列処理を行うコンポーネントに直接データフローを引いている場合、実行時に「DataAlreadyUsedException」エラーが発生します。