MaxCompute MapReduce ジョブでは、データが「マップ/リデュース」「ソート」「パーティション」「コンバイナー」の 4 つのステージを経由します。各ステージには固有の構成オプションがあり、これらの用語を正しく理解することで、ジョブ設計の精度向上および予期せぬ結果のデバッグが可能になります。
仕組み
MapReduce ジョブにおけるデータフローは、以下の順序で処理されます:
(入力) → map → [combine] → shuffle & sort → reduce → (出力)本トピックで説明する各用語は、このパイプラインにおける対応するステージまたは構成オプションを表します。
マップ/リデュース
マップタスクまたはリデュースタスクは、以下の 3 つのメソッドを順次実行します:
setup()— 各ワーカーで、処理開始前に 1 回実行されますmap()またはreduce()— 各入力レコードに対して実行されますcleanup()— 各ワーカーで、すべてのレコード処理完了後に 1 回実行されます
実行可能なサンプルについては、「サンプルプログラム」をご参照ください。
ソート
MaxCompute では、2 種類のカラム型を用いてソート動作を制御できます。
| カラム型 | 役割 | カスタム比較関数 |
|---|---|---|
| ソートカラム | ソート順序を決定します。マッパーによって生成されたキー・レコード内のカラムから指定します。 | 非対応 |
| グループカラム | ソートカラムのサブセットです。セカンダリ・ソートに使用されます。 | 非対応 |
セカンダリ・ソートのサンプルについては、「セカンダリ・ソートのソースコード」をご参照ください。
パーティション
パーティショナーは、マッパーが生成したデータを、パーティションロジックに基づいて複数のリデューサーにルーティングします。MaxCompute では、以下の 2 つのメカニズムをサポートしています。
| メカニズム | 説明 |
|---|---|
| パーティションカラム | 指定されたカラムに基づくパーティション分割 |
| カスタムパーティショナー | ユーザー定義のレコードルーティングロジック(リデューサーへの割り当て) |
両方の設定が有効な場合、パーティションカラムの設定がカスタムパーティショナーより優先されます。
コンバイナー
コンバイナーは、MapReduce 計算フレームワークにおけるシャッフル段階で実行される任意の最適化機能です。隣接するレコードを結合することで、マッパーからリデューサーへ転送されるデータ量を削減します。
ビジネスロジックに応じて、コンバイナー機能の使用可否を判断できます。コンバイナーの処理ロジックはリデューサーと同一であり、マッパーがデータを生成した後、フレームワークは同一キーを持つすべてのレコードに対してコンバイナーを適用します。
実行可能なサンプルについては、「サンプルプログラム」をご参照ください。