MapReduceとは

 カフェでノートブックにビジネスレポートを書き、ノートPCを使う女性

MapReduceとは

MapReduceは、並列処理を使用して大規模なデータ処理を高速化するプログラミング・モデルです。MapReduceは、Hadoopクラスター内の数百または数千のサーバーにわたって大規模な拡張を可能にします。

「MapReduce」という名前は、モデルが実行する2つのタスクを指し、大規模なデータ処理タスクを並列でより高速に実行できる多数の小さなタスクに「分割」するのに役立ちます。

  • 1つ目は「Mapタスク」です。1つのデータ・セットを取得して、都市(キー)と毎日の最高気温(値)などのキーと値のペアとしてフォーマットされた別のデータ・セットに変換します。

  • 2つ目は「Reduceタスク」です。Mapタスクからアウトプットを取得し、同じキーを使用してすべての値を集計してデータを処理し、キーと値のペアの最終セットを生成します。

MapReduceのプログラミング・モデルは、Apache Software Foundationによってサポートされており、Javaプログラミング言語に基づいて構築されたオープンソース・ソフトウェア・フレームワークであるApache Hadoopの核となる処理コンポーネントの 1 つです。

MapReduceモデルは、Hadoop以外にも使用できます。

ニュースレターを表示しているスマホの画面

The DX Leaders

「The DX Leaders」は日本語でお届けするニュースレターです。AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。

MapReduceの仕組み

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またはその他のデータ・ストアに出力します。

MapReduceの例

分析したいデータの量にかかわらず、重要な原則は同じです。

この例では、データ・セットには都市(キー)と、各都市に記録された毎日の気温(値)が含まれています。サンプルのキーと値のペアは次のようになります:<Toronto, 18>

データは複数のファイルに分散されています。各ファイルには、複数の都市のデータが混在しているかもしれず、同じ都市が複数回含まれているかもしれません。

ユーザーは、このデータ・セットから、追跡対象期間における各都市の「最高気温」を特定したいと考えています。

このジョブを処理するためのMapReduceの実装は、次のようになります。

  1. 気温情報を含むデータファイルは、入力として、MapReduceアプリケーションにフィードされます。

  2. ファイルはMapタスクに分割され、各タスクはMapperの1つに割り当てられます。

  3. Mapperがデータをキーと値のペアに変換します。

  4. Mapの出力は、同じ都市のキーを持つすべての値が同じReducerになるように、シャッフルおよびソートされます。たとえば、トロントのすべての気温の値は、あるReducerに送られ、別のReducerはロンドンのすべての値を集約します。

  5. Reducerはデータを処理して、各都市の最高気温の値を決定します。その後、データは各都市の最も高いキーと値のペアにReduceされます。

  6. Reduceフェーズの後、最も高い値を収集して、結果を生成できます:<Tokyo, 38> <London, 27> <New York, 33> <Toronto, 32>
都市ごとの最高気温を決定するためにMapReduceを使用した簡略図 MapReduceフレームワークがどのようにデータ処理を助けるかの簡略図(クリックで拡大)

HadoopエコシステムにおけるMapReduce

Hadoopエコシステムは、連動して効率を促進するために設計されたオープンソース・モジュール・スイートです。主要なHadoopフレームワークを構成するモジュールには、MapReduceに加えて、さらに3つのモジュールがあります。

Hadoop分散ファイル・システム(HDFS)

HDFSは、最大数千の汎用サーバーにアプリケーション・データを保管するための分散ファイル・システムです。

HDFSは、Hadoopにフォールト・トレランスおよび、データへの高速アクセスを提供します。デフォルトでは、データ・ブロックは読み込み時または書き込み時に複数のノードに複製されます。

HDFSアーキテクチャーは、ファイル・システムの名前空間とファイルへのアクセスを管理するNameNodeと、データ・ストレージを管理する複数のDataNodeを備えています。

Yet Another Resource Negotiator(YARN)

オープンソースのApache Hadoopは、ジョブ・スケジューリングとクラスター・リソース管理のフレームワークです。SQL Query、高度なモデリング、リアルタイム・ストリーミングなどの複数のワークロードをサポートしています。

Hadoop共通

このモジュールは、他のHadoopモジュールをサポートするリソース・ユーティリティーとライブラリのコレクションです。Hadoop Corとも呼ばれており、自動障害復旧、ファイル・システム・レベルおよびオペレーティング・システム・レベルの抽象化、Java Archive(JAR)ファイルとスクリプトのための複数のリソースなどが含まれています。

その他のモジュール

主要なHadoopフレームワークに加えて、Hadoopエコシステムには次が含まれています。

  • HBase(非リレーショナル、NoSQLデータベース)
  • MahoutおよびSpark MLlib(機械学習用アルゴリズム・ライブラリー)
  • Oozie(ジョブ・スケジューラー)
  • Apache HiveおよびApache Pig(クエリ・ベースのデータ処理ツール)
  • SolrおよびLucene(検索およびインデックス作成)
  • Spark(インメモリー・データ処理エンジン)
  • Zookeeper(クラスター調整)
AI Academy

生成AIの成功の鍵はデータ管理

生成AIの使用を成功させるために、高品質のデータが不可欠である理由をご覧ください。

MapReduceのメリット

MapReduceのプログラミングには、組織がビッグデータの分析から貴重な洞察を得るのに役立つ次のようなメリットがあります。

  • 拡張性:HDFSに保管されたペタバイト規模のデータを複数のサーバーやノードで処理することを可能にします。

  • 処理の高速化:並列処理と最小限のデータ移動により、膨大な量のデータに対するビッグデータ処理の最適化を実現します。

  • シンプルさ:開発者は、Java、C++、Pythonなどのプログラミング言語を選択して、MapReduceアプリケーションを作成できます。

  • コスト削減:オープンソース・プログラムなので、組織のソフトウェア費用を節約することができます。ただし、インフラストラクチャーやデータ・エンジニアリングの人材に関連するコストは発生します。

MapReduceのユースケース

複雑なデータ処理タスクは他のアプリケーションの方が高速に実行できる場合がありますが、MapReduceは多くの単純なユースケースを効率的に処理できます。MapReduceの並列処理アプローチに適したユースケースをいくつかご紹介します。

  • データ統合:MapReduceフレームワークを使用して、抽出、変換、ロード(ETL)プロセスを実行し、分析および統合のためにデータを準備できます。

  • 画像処理:画像分類などのタスクをより小さなデータセットに分割し、並行して処理できます。

  • ログ分析:例えば、Webサーバーまたはアプリケーション・サーバーからのログ・ファイルを確認して傾向を特定することができます。

  • 機械学習(ML):協調フィルタリングk-meansクラスタリング線形回帰などのトレーニング・タスクに役立ちます。

  • 感情分析:例えば、Webサイトの顧客スコアを合計したり、反応のクラスターを識別したりするのに役立ちます。

  • 集計:例えば、過去1年間にアカウントを更新した顧客の数を国や地域別にカウントすることができます。

  • テキスト・マイニング:コメント・ボードなどの特定の入力セット内で単語が出現する回数を追跡する単語カウントジョブなど。

MapReduceの歴史

MapReduceのプログラミング・パラダイムは、2004年にGoogle社のコンピューター科学者、Jeffery Dean氏とSanjay Ghemawat氏によって始まりました。MapReduceモデルの目的は、コモディティー・ハードウェアの大規模クラスタ上での大規模な並列処理を通じて、大規模なデータ・セットのトランスフォーメーションと分析を簡素化することでした。また、プログラマーがデータ管理よりもアルゴリズムに集中できるようにすることでもありました。

Google社は最初のMapReduceフレームワークを発表しましたが、最も人気が高いのは、おそらくApache Hadoop MapReduceです。

MapReduceはビッグデータ分析の進歩において重要な役割を果たしましたが、欠点もあります。たとえば、データは通常、MapReduceによってメモリーに保持されず、MapReduceアプリを連鎖(Chaining)することによってのみ反復ロジックが可能になります。これらの要因によって複雑さが増し、処理時間が長くなる可能性があります。

MapReduceは、特にレガシー・システムで引き続き広く使用されていますが、多くの組織はビッグデータのために、より高速なフレームワークやより特殊なフレームワーク(Apache Sparkなど)に移行しています。

関連ソリューション
データ管理ソフトウェアとソリューション

データ・サイロを排除し、複雑さを軽減し、データ品質を向上させることで、卓越した顧客体験と従業員体験を実現するデータ・ストラテジーを設計します。

データ管理ソリューションの詳細はこちら
IBM watsonx.data

watsonx.dataを使用すると、オープンでハイブリッド、かつ管理されたデータ・ストアを通じて、データがどこに保存されていても、すべてのデータを使用して分析とAIを拡張できます。

watsonx.dataについてはこちら
データ分析コンサルティングサービス

IBMコンサルティングと連携することで、企業データの価値を引き出し、ビジネス上の優位性をもたらす洞察を活用した組織を構築します。

分析サービスを発見する
次のステップ

データ・サイロを排除し、複雑さを軽減し、データ品質を向上させることで、卓越した顧客体験と従業員体験を実現するデータ・ストラテジーを設計します。

データ管理ソリューションの詳細はこちら watsonx.dataについてはこちら