MapReduceは,Apache Hadoopエコシステムの一部であり,Javaベスの分散実行フレムワクです。開発者が実装する地图処理と减少処理の2つの処理ステップを公開することで,分散プログラミングの複雑さを解消します。地图処理では,デ,タは並列処理するタスク間で分割されます。デ,タの各チャンクには,変換ロジックを適用できます。地图処理が完了すると减少処理が行われ,地图処理で分割されたデータの集約を実行します。通常,MapReduceは入出力ともにHadoop分散ファhbaseルシステム(HDFS)を使用します。しかし,その上に構築されたSqoopのような技術には,リレーショナルシステムにアクセスできるものがあります。
MapReduceは,2004年に谷歌のJeffery Dean氏とSanjay Ghemawat氏によって谷歌内で開発されました。彼らの論文”MapReduce:简化数据处理大型集群”において,MapReduceは関数型プログラミングでよく使用される地图関数と减少関数にヒントを得たものであることが示されています。当時,谷歌独自のMapReduceシステムは,谷歌文件系统(GFS)上で動作していました。しかし,谷歌2014年はまでに,MapReduceを主要なビッグデータ処理モデルとして使用しなくなりました。かて,MapReduceはHDFSに格納されたデタを取得できる唯一の方法でした。現在では,hdfsからデ,タを取得する方法として蜂巢や猪といった他のクエリベースのシステムがあり,MapReduceモデルで記述されたジョブとともに実行されるSQLライクなステートメントが使用されています。
MapReduceシステムは,地图と减少の処理/関数の組み合わせとして一般化されていますが,通常は,3つのステップで構成されています。それぞれのステップをご紹介します。
映射処理と还原処理のンタスをプログラマに公開することで,Hadoopでの分散アプリケーションの作成が容易になった一方で,MapReduceのプログラミングパラダイムで幅広いロジックを表現することは困難です。MapReduceでうまく機能しないロジックの一例として,反復処理が挙げられます。一般的に,データはメモリ上に保持されず,反復処理のロジックはMapReduceアプリケーションを連結することで処理されるため,複雑さが増してしまいます。
MapReduceジョブでは,ユーザーデータ用の分散メモリ構造の概念がないため,メモリに保存するデータはほとんどなく,データはHDFSに対して読み書きする必要があります。さらに複雑なMapReduceアプリケーションでは,より小さなMapReduceジョブを連結して使用します。これらのジョブ間ではデータの受け渡しができないため,HDFSを介したデータ共有が必要になり,処理のボトルネックが生じます。
MapReduceはJavaベースであるため,MapReduceアプリケーションを書く最も効率的な方法は,Javaを使用することでしょう。そのコドは別の開発環境でコンパルし,Hadoopクラスタにデプロ@ @する必要があります。このような開発スタイルは,SQLなどの他の技術やPythonなどのインタプリタ言語に慣れているデータアナリストやデータサイエンティストにはあまり採用されていません。MapReduceにはC、Pythonシェルスクリプトといった他の言語で書かれたMap / Reduceロジックを呼び出す機能が備わっています。しかし,プログラムの実行を処理するためにシステムプロセスをスピンアップする必要があり,この操作はジョブの性能に影響を与えるオーバーヘッドを発生させます。
MapReduceは,ビッグデ,タを扱う製品から排除される傾向にあります。一部のHadoopディストリビューションにはMapReduceが含まれていますが,レガシーアプリケーションのサポートを目的としたものです。ビックデータを利用するユーザーは,MapReduceアプリケーションを構築するのではなく,代わりにApache火花のようなシンプルで高速なフレームワークを採用するようになっています。
レガシーアプリケーションやSqoop,猪のようなHadoopのネイティブツールは,現在もMapReduceを活用しています。しかし,MapReduceアプリケーションの開発は非常に限られており,オープンソース技術として大きな貢献をしているとはいえません。
Databricksの德尔塔引擎は,Apache SparkとPhotonと呼ばれるc++エンジンをベスにしています。これにより,MapReduceにはないDAG処理の柔軟性,インメモリ処理による高速性,ネイティブにコンパイルされた特別なエンジンによる圧倒的に高速なクエリ応答時間を実現します。ユーザーは,Python, Scala, R, SQLを使用して砖の三角洲引擎を操作できます。既存の火花アプリケーションは,データ形式として“δ”を指定するといった簡単な行の変更で,三角洲引擎を使用するように変更できます。MapReduceとHDFSは,データのトランザクション一貫性や,データセット内の既存データの更新/削除をネイティブにサポートしていません。一方,δ引擎はデータ作成者と利用者によるデータへの同時アクセスを可能にし,完全なCRUD機能を提供します。また,MapReduceはビッグデータ環境における共通の問題である極小ファイルに対応するビルトイン機能を持ちませんが,砖の三角洲引擎はストレージに書き込まれるデータサイズを最適化するオートコンパクション機能を備えています。优化コマンドを使用すると、必要に応じてファ、ルをコンパクトにすることも可能です。三角洲のトランザクション一貫性機能により,エンドユーザーやアプリケーションがデータにアクセスしていても,この操作を実行できます。