edit-icon download-icon

MapReduce

最終更新日: Jun 19, 2018

MaxComputeはMapReduceプログラミングインターフェイスを提供します。ユーザーはJava APIを使用して、MaxComputeでデータを処理するMapReduceプログラムを作成できます。現在、MapReduce関数は開かれていません。この機能を使用する場合は、Aliyunのウェブサイトから招待コードを申請する必要があります。このセクションでは、MapReduce SDKを簡単に使用する方法を紹介します。MapReduce SDKの詳細については、公式Java Docを参照してください。

注意:現在、MapReduceはまだベータ版です。この機能を使用する場合は、チケットシステムを使用して申請してください。その際はプロジェクトの名前を明記してください。7営業日以内にご対応いたします。

MapReduceはGoogleが最初に提案した分散データ処理モデルです。これは多くの注目を集めており、あらゆる種類のビジネスシナリオに適用されています。

MapReduceのデータ処理プロセスは、主にMapステージとReduceステージという2つのステージに分かれています。マップステージはReduceステージの前に実行されます。MapとReduceの処理ロジックはユーザーが定義しますが、MapReduceフレームワークプロトコルに準拠する必要があります。

  • Mapを実行する前に、入力データをスライスする必要があります。「スライシング」は、入力データを等しいサイズのブロックに分割することです。各ブロックは単一のマップワーカーの入力として処理されるため、複数のマップワーカーが同時に動作することができます。
  • スライスが終了したら、複数のMap Workerを同時に動作させることができます。各マップワーカーは、データを読み込んだ後にコンピューティングを行い、その結果をReduceに出力します。Map Workerはデータを出力する間に、各出力レコードのキーを指定する必要があります。このキーの値は、このデータが送信される作業者を減らすかどうかを決定します。キー値とReduce Workerの関係は、1対1の関係です。同じキーを持つデータが同じReduce Workerに送信されます。1人のReduce Workerが複数のキー値を持つデータを受け取ることがあります。
  • Reduce段階の前に、MapReduceフレームワークはKey値に従ってデータをソートし、同じKey値を持つデータが一緒にグループ化されるようにします。ユーザーが「Combiner」を指定すると、フレームワークはCombinerを呼び出して同じキーデータを集計します。コンバイナのロジックもユーザによって定義されます。従来のMapReduceフレームワークとは異なり、Combinerの入力パラメータと出力パラメータはMaxComputeのReduceと一貫していなければなりません。この処理は通常「シャッフル」と呼ばれます。
  • 次の段階はReduceです。同じキーを持つデータは、同じReduce Workerにシャッフルされます。Reduce Workerは複数のマップワーカーからデータを受け取ります。各Reduce Workerは、同じキーの複数のレコードに対してReduce操作を実行します。最後に、同じキーの複数のレコードがReduce処理によって値になります。

注意:

  • MapReduceフレームワークはここで簡単に紹介します。詳細については、他の情報を参照してください。

以下では、MaxCompute MapReduceステージの概念を説明するために、WordCountを例にとります。テキスト’a.txt’があり、各行は数字で表されているとします。各数字の出現数を数える必要があります。テキスト中の数字は「ワード」と呼ばれ、数字の出現はカウントと呼ばれます。MaxCompute Mapreduceでこの機能を完了するには、次の図に示す手順を実行します。

まず、テキストをスライスし、各スライスのデータを単一のMap Workerの入力として取得します。

  • マップが入力を処理します。数を取得したら、Countを1に設定します。次に、キューを出力します。ここで、出力データのキーとして「Word」を取ります。
  • シャッフルステージの前段階で、最初にキー値(Wordの値)に従って各マップワーカーの出力をソートします。次に、ソート後にCombine演算を実行します。つまり、同じKey値(Word値)のCountを累積して新しいキューを構成します。このプロセスをコンバイナソートと呼びます。
  • Shuffleの後の段階で、データがReduceに送信されます。Reduceワーカーは、データを受け取った後、再びKey値に基づいてデータをソートします。
  • データ処理時に、各Reduce WorkerはCombinerで同じロジックを採用し、同じKey値(Word値)でCountを累積して出力結果を得ます。

注意:

  • MaxComputeのデータはテーブルに格納されているため、MaxCompute MapReduceの入出力はテーブルにしかなりません。ユーザー定義の出力は許可されず、同様のファイルシステムインターフェイスは提供されません。