MapReduceは、並列処理を使用して大規模なデータ処理を高速化するプログラミング・モデルです。MapReduceは、Hadoopクラスター内の数百または数千のサーバーにわたって大規模な拡張を可能にします。
「MapReduce」という名前は、モデルが実行する2つのタスクを指し、大規模なデータ処理タスクを並列でより高速に実行できる多数の小さなタスクに「分割」するのに役立ちます。
MapReduceのプログラミング・モデルは、Apache Software Foundationによってサポートされており、Javaプログラミング言語に基づいて構築されたオープンソース・ソフトウェア・フレームワークであるApache Hadoopの核となる処理コンポーネントの 1 つです。
MapReduceモデルは、Hadoop以外にも使用できます。
MapReduceは、データ処理プロジェクトを小さな断片に分割することで、より高速に実行できるようにします。
たとえば、1つのプロセッサーを使用してテラバイトやペタバイト規模のデータを含む巨大なファイルを分析するには、10時間ほどかかる場合があります。MapReduceのジョブは、同じデータ・ファイルを10個のプロセッサーで並列処理できるように、10個のタスクに分割できます。このジョブは、1時間以内に完了できる場合があります。分散コンピューティング・ノードからデータを集約して、結果を得ることができます。
MapおよびReduceは、MapReduceモデルの不可欠な機能ですが、全体的なプロセスにはさらにいくつかのステップがあります。
MapReduceアプリケーションは、構造化データまたは非構造化データを含む、入力データを受け入れます。MapReduceアプリケーションは通常、Hadoop分散ファイル・システム(HDFS)に入力ファイルを保管して処理しますが、このモデルは他のデータ・ソースでも機能します。(詳細については、「HadoopエコシステムにおけるMapReduce」をご参照ください。)
MapReduceフレームワークは特定のジョブに対して、分散サーバーの選択、通信とデータ転送の管理、フォールト・トレランスと冗長性のサポートを支援します。
入力データは、小さなブロックに分割されます。これらのブロックは、さまざまなコンピューティング・ノードにまたがるMapper(次のステップでMapを実行する機能)に分散されます。MapReduceのフレームワークは、効率的な負荷分散のために、Mapper間でデータをほぼ均一に割り当てるようにします。
マップ関数は、各ノードで受信したデータを処理し、そのデータをキーと値のペアに変換します。
マッパーの総数は、データの総量と各Mapperで利用可能なメモリー・ブロックに基づいて、Hadoopフレームワーク内で決定されます。Mapper、Reducer、出力フォーマットのパラメーターはHadoopクラスター内で設定できます。
Hadoopフレームワークは、Mapの出力をソートし、同じ「キー」(トピック)を持つすべてのキーと値のペアを同じReucerに割り当てます。たとえば、都市と気温の日時データ・セットでは、「東京」キーを持つデータはすべて同じReducerに送られます。
名前が示すように、Reducerは、Reduceステップを実行する関数です。
Mapperが出力するキーと値のペアを処理するReduce関数です。これには、必要な処理の種類に応じて、データのマージ、集計、またはその他の操作の実行があります。
MapとReduceは同じサーバーセット上で実行できますが、これは任意です。
各Reducerは、処理の結果をHDFSまたはその他のデータ・ストアに出力します。
分析したいデータの量にかかわらず、重要な原則は同じです。
この例では、データ・セットには都市(キー)と、各都市に記録された毎日の気温(値)が含まれています。サンプルのキーと値のペアは次のようになります:<Toronto, 18>
データは複数のファイルに分散されています。各ファイルには、複数の都市のデータが混在しているかもしれず、同じ都市が複数回含まれているかもしれません。
ユーザーは、このデータ・セットから、追跡対象期間における各都市の「最高気温」を特定したいと考えています。
このジョブを処理するためのMapReduceの実装は、次のようになります。
Hadoopエコシステムは、連動して効率を促進するために設計されたオープンソース・モジュール・スイートです。主要なHadoopフレームワークを構成するモジュールには、MapReduceに加えて、さらに3つのモジュールがあります。
HDFSは、最大数千の汎用サーバーにアプリケーション・データを保管するための分散ファイル・システムです。
HDFSは、Hadoopにフォールト・トレランスおよび、データへの高速アクセスを提供します。デフォルトでは、データ・ブロックは読み込み時または書き込み時に複数のノードに複製されます。
HDFSアーキテクチャーは、ファイル・システムの名前空間とファイルへのアクセスを管理するNameNodeと、データ・ストレージを管理する複数のDataNodeを備えています。
オープンソースのApache Hadoopは、ジョブ・スケジューリングとクラスター・リソース管理のフレームワークです。SQL Query、高度なモデリング、リアルタイム・ストリーミングなどの複数のワークロードをサポートしています。
このモジュールは、他のHadoopモジュールをサポートするリソース・ユーティリティーとライブラリのコレクションです。Hadoop Corとも呼ばれており、自動障害復旧、ファイル・システム・レベルおよびオペレーティング・システム・レベルの抽象化、Java Archive(JAR)ファイルとスクリプトのための複数のリソースなどが含まれています。
主要なHadoopフレームワークに加えて、Hadoopエコシステムには次が含まれています。
MapReduceのプログラミングには、組織がビッグデータの分析から貴重な洞察を得るのに役立つ次のようなメリットがあります。
複雑なデータ処理タスクは他のアプリケーションの方が高速に実行できる場合がありますが、MapReduceは多くの単純なユースケースを効率的に処理できます。MapReduceの並列処理アプローチに適したユースケースをいくつかご紹介します。
MapReduceのプログラミング・パラダイムは、2004年にGoogle社のコンピューター科学者、Jeffery Dean氏とSanjay Ghemawat氏によって始まりました。MapReduceモデルの目的は、コモディティー・ハードウェアの大規模クラスタ上での大規模な並列処理を通じて、大規模なデータ・セットのトランスフォーメーションと分析を簡素化することでした。また、プログラマーがデータ管理よりもアルゴリズムに集中できるようにすることでもありました。
Google社は最初のMapReduceフレームワークを発表しましたが、最も人気が高いのは、おそらくApache Hadoop MapReduceです。
MapReduceはビッグデータ分析の進歩において重要な役割を果たしましたが、欠点もあります。たとえば、データは通常、MapReduceによってメモリーに保持されず、MapReduceアプリを連鎖(Chaining)することによってのみ反復ロジックが可能になります。これらの要因によって複雑さが増し、処理時間が長くなる可能性があります。
MapReduceは、特にレガシー・システムで引き続き広く使用されていますが、多くの組織はビッグデータのために、より高速なフレームワークやより特殊なフレームワーク(Apache Sparkなど)に移行しています。
データ・サイロを排除し、複雑さを軽減し、データ品質を向上させることで、卓越した顧客体験と従業員体験を実現するデータ・ストラテジーを設計します。
watsonx.dataを使用すると、オープンでハイブリッド、かつ管理されたデータ・ストアを通じて、データがどこに保存されていても、すべてのデータを使用して分析とAIを拡張できます。
IBMコンサルティングと連携することで、企業データの価値を引き出し、ビジネス上の優位性をもたらす洞察を活用した組織を構築します。