MapReduce-はじめに
MapReduceは、複数のノードでビッグデータを並行して処理できるアプリケーションを作成するためのプログラミングモデルです。MapReduceは、膨大な量の複雑なデータを分析するための分析機能を提供します。
ビッグデータとは?
ビッグデータは、従来のコンピューティング技術では処理できない大きなデータセットのコレクションです。たとえば、FacebookやYoutubeが日常的に収集および管理するために必要なデータの量は、ビッグデータのカテゴリに分類できます。ただし、ビッグデータは規模と量だけでなく、速度、多様性、量、複雑さの1つ以上の側面も含みます。
なぜMapReduceなのか?
従来のエンタープライズシステムには通常、データを保存および処理するための集中型サーバーがあります。次の図は、従来のエンタープライズシステムの概略図を示しています。従来のモデルは、大量のスケーラブルなデータを処理するのには確かに適していないため、標準のデータベースサーバーでは対応できません。さらに、集中型システムでは、複数のファイルを同時に処理する際にボトルネックが発生しすぎます。
Googleは、MapReduceと呼ばれるアルゴリズムを使用してこのボトルネックの問題を解決しました。MapReduceは、タスクを小さな部分に分割し、それらを多くのコンピューターに割り当てます。その後、結果は1つの場所で収集され、統合されて結果データセットが形成されます。
MapReduceはどのように機能しますか?
MapReduceアルゴリズムには、MapとReduceという2つの重要なタスクが含まれています。
マップタスクは、データセットを取得し、それを別のデータセットに変換します。ここで、個々の要素はタプル(キーと値のペア)に分割されます。
削減タスクは、マップからの出力を入力として受け取り、それらのデータタプル(キーと値のペア)をより小さなタプルのセットに結合します。
削減タスクは、常にマップジョブの後に実行されます。
ここで、各フェーズを詳しく見て、それらの重要性を理解してみましょう。
Input Phase −ここには、入力ファイル内の各レコードを変換し、解析されたデータをキーと値のペアの形式でマッパーに送信するレコードリーダーがあります。
Map −マップはユーザー定義関数であり、一連のキーと値のペアを取得し、それぞれを処理して0個以上のキーと値のペアを生成します。
Intermediate Keys −マッパーによって生成されたキーと値のペアは、中間キーと呼ばれます。
Combiner−コンバイナーは、マップフェーズからの同様のデータを識別可能なセットにグループ化する一種のローカルレデューサーです。マッパーから中間キーを入力として受け取り、ユーザー定義コードを適用して、1つのマッパーの小さなスコープ内の値を集約します。これはメインのMapReduceアルゴリズムの一部ではありません。オプションです。
Shuffle and Sort−レデューサータスクは、シャッフルと並べ替えのステップから始まります。グループ化されたキーと値のペアを、Reducerが実行されているローカルマシンにダウンロードします。個々のキーと値のペアは、キーごとに大きなデータリストに並べ替えられます。データリストは、同等のキーをグループ化して、Reducerタスクでそれらの値を簡単に繰り返すことができるようにします。
Reducer−レデューサーは、グループ化されたキーと値のペアのデータを入力として受け取り、それぞれに対してレデューサー関数を実行します。ここでは、データをさまざまな方法で集約、フィルタリング、および組み合わせることができ、さまざまな処理が必要になります。実行が終了すると、最後のステップに0個以上のキーと値のペアが与えられます。
Output Phase −出力フェーズでは、Reducer関数からの最終的なキーと値のペアを変換し、レコードライターを使用してファイルに書き込む出力フォーマッターがあります。
小さな図を使用して、Map&fReduceの2つのタスクを理解してみましょう-
MapReduce-例
MapReduceの力を理解するために、実際の例を見てみましょう。Twitterは1日あたり約5億のツイートを受信します。これは、1秒あたり約3000のツイートです。次の図は、ツイーターがMapReduceを使用してツイートを管理する方法を示しています。
図に示すように、MapReduceアルゴリズムは次のアクションを実行します-
Tokenize −ツイートをトークン化してトークンのマップにし、キーと値のペアとして書き込みます。
Filter −トークンのマップから不要な単語をフィルタリングし、フィルタリングされたマップをキーと値のペアとして書き込みます。
Count −単語ごとにトークンカウンターを生成します。
Aggregate Counters −同様のカウンター値の集計を管理可能な小さな単位に準備します。