MapReduce

数据库無料トラ电子词典アル

MapReduceとは

MapReduceは,Apache Hadoopエコシステムの一部であり,Javaベスの分散実行フレムワクです。開発者が実装する地图処理と减少処理の2つの処理ステップを公開することで,分散プログラミングの複雑さを解消します。地图処理では,デ,タは並列処理するタスク間で分割されます。デ,タの各チャンクには,変換ロジックを適用できます。地图処理が完了すると减少処理が行われ,地图処理で分割されたデータの集約を実行します。通常,MapReduceは入出力ともにHadoop分散ファhbaseルシステム(HDFS)を使用します。しかし,その上に構築されたSqoopのような技術には,リレーショナルシステムにアクセスできるものがあります。

MapReduceの歴史

MapReduceは,2004年に谷歌のJeffery Dean氏とSanjay Ghemawat氏によって谷歌内で開発されました。彼らの論文”MapReduce:简化数据处理大型集群”において,MapReduceは関数型プログラミングでよく使用される地图関数と减少関数にヒントを得たものであることが示されています。当時,谷歌独自のMapReduceシステムは,谷歌文件系统(GFS)上で動作していました。しかし,谷歌2014年はまでに,MapReduceを主要なビッグデータ処理モデルとして使用しなくなりました。かて,MapReduceはHDFSに格納されたデタを取得できる唯一の方法でした。現在では,hdfsからデ,タを取得する方法として蜂巢や猪といった他のクエリベースのシステムがあり,MapReduceモデルで記述されたジョブとともに実行されるSQLライクなステートメントが使用されています。

MapReduceの仕組み

MapReduceシステムは,地图と减少の処理/関数の組み合わせとして一般化されていますが,通常は,3つのステップで構成されています。それぞれのステップをご紹介します。

  • 地图処理:入力デ,タは,小さなブロックに分割されます。Hadoopフレームワークは、処理するデータのサイズと各 Mapper サーバーで利用可能なメモリブロックに基づいて、使用する Mapper 数を決定します。各ブロックは、Mapper に割り当てられ、処理されます。各ワーカーノードは、ローカルデータに map 関数を適用し、一時ストレージに出力を書き込みます。プライマリ(マスター)ノードでは、冗長な入力データの 1 つのコピーのみが処理されるようにします。
  • シャッフル,集約(联合),パ,ティション:ワーカーノードは,地图関数によって生成された出力キーに基づいてデータを再分配し,あるキーに属する全てのデータが同じワーカーノードに配置されるようにします。オプションの処理となる组合器(减速器)は各Mapperサーバー上で個別に実行することで各Mapperのデータをさらに削減し,データフットプリントの削減やシャッフルとソートを容易にすることが可能です。パーティションはオプションではなく,データを减速器に提示する方法を決定し,また特定の减速器に割り当てる処理です。
  • 减少処理:Mapperの進行中にReducerを開始することはできません。ワーカーノードは,键值ペアの出力データの各グループを並列に処理し,键值ペアを出力として生成します。同じキーを持つ全ての地图の出力値は,1つの减速器に割り当てられ,减速器はそのキーの値を集計します。初期データのフィルタリングやソートが必須の地图関数とは異なり,减少関数はオプションです。

MapReduceで考慮すべき事柄

  • 柔軟性に欠けるMapReduceのプログラミングパラダescム

映射処理と还原処理のンタスをプログラマに公開することで,Hadoopでの分散アプリケーションの作成が容易になった一方で,MapReduceのプログラミングパラダイムで幅広いロジックを表現することは困難です。MapReduceでうまく機能しないロジックの一例として,反復処理が挙げられます。一般的に,データはメモリ上に保持されず,反復処理のロジックはMapReduceアプリケーションを連結することで処理されるため,複雑さが増してしまいます。

  • 読み取り/書き込みの集中

MapReduceジョブでは,ユーザーデータ用の分散メモリ構造の概念がないため,メモリに保存するデータはほとんどなく,データはHDFSに対して読み書きする必要があります。さらに複雑なMapReduceアプリケーションでは,より小さなMapReduceジョブを連結して使用します。これらのジョブ間ではデータの受け渡しができないため,HDFSを介したデータ共有が必要になり,処理のボトルネックが生じます。

  • Javaに特化

MapReduceはJavaベースであるため,MapReduceアプリケーションを書く最も効率的な方法は,Javaを使用することでしょう。そのコドは別の開発環境でコンパルし,Hadoopクラスタにデプロ@ @する必要があります。このような開発スタイルは,SQLなどの他の技術やPythonなどのインタプリタ言語に慣れているデータアナリストやデータサイエンティストにはあまり採用されていません。MapReduceにはC、Pythonシェルスクリプトといった他の言語で書かれたMap / Reduceロジックを呼び出す機能が備わっています。しかし,プログラムの実行を処理するためにシステムプロセスをスピンアップする必要があり,この操作はジョブの性能に影響を与えるオーバーヘッドを発生させます。

  • ビッグデ,タ製品からのフェ,ズアウト

MapReduceは,ビッグデ,タを扱う製品から排除される傾向にあります。一部のHadoopディストリビューションにはMapReduceが含まれていますが,レガシーアプリケーションのサポートを目的としたものです。ビックデータを利用するユーザーは,MapReduceアプリケーションを構築するのではなく,代わりにApache火花のようなシンプルで高速なフレームワークを採用するようになっています。

MapReduceの使用目的

レガシーアプリケーションやSqoop,猪のようなHadoopのネイティブツールは,現在もMapReduceを活用しています。しかし,MapReduceアプリケーションの開発は非常に限られており,オープンソース技術として大きな貢献をしているとはいえません。

MapReduceとSparkに関するよくある誤解

  • MapReduceにいて
  • Sparkにいて

MapReduceのメリット

  1. スケ,ラビリティ
  2. 柔軟性
  3. セキュリティと認証機能
  4. 高速なデ,タ処理
  5. 極めてシンプルなプログラミングモデル
  6. 可用性と弾力性

MapReduceの性能を向上させるためのヒント

  1. ユ,バ,モ,ドを有効化する
  2. ネ▪▪ティブなラ▪▪ブラリを使用する
  3. ブロックサ@ @ズを大きくする
  4. 地图のタスクの所要時間を監視する
  5. デ,タ圧縮が分割可能かどうかを特定する
  6. 削減されたタスクの数を設定する
  7. デ,タの分割を分析する
  8. フェ,ズパフォ,マンスの動作をシャッフルする
  9. MapReduceコ,ドを最適化する

MapReduceとDatabricks Delta Engineの比較

Databricksの德尔塔引擎は,Apache SparkとPhotonと呼ばれるc++エンジンをベスにしています。これにより,MapReduceにはないDAG処理の柔軟性,インメモリ処理による高速性,ネイティブにコンパイルされた特別なエンジンによる圧倒的に高速なクエリ応答時間を実現します。ユーザーは,Python, Scala, R, SQLを使用して砖の三角洲引擎を操作できます。既存の火花アプリケーションは,データ形式として“δ”を指定するといった簡単な行の変更で,三角洲引擎を使用するように変更できます。MapReduceとHDFSは,データのトランザクション一貫性や,データセット内の既存データの更新/削除をネイティブにサポートしていません。一方,δ引擎はデータ作成者と利用者によるデータへの同時アクセスを可能にし,完全なCRUD機能を提供します。また,MapReduceはビッグデータ環境における共通の問題である極小ファイルに対応するビルトイン機能を持ちませんが,砖の三角洲引擎はストレージに書き込まれるデータサイズを最適化するオートコンパクション機能を備えています。优化コマンドを使用すると、必要に応じてファ、ルをコンパクトにすることも可能です。三角洲のトランザクション一貫性機能により,エンドユーザーやアプリケーションがデータにアクセスしていても,この操作を実行できます。

MapReduceの代替となる5の選択肢

  1. Apache火花
  2. Apache风暴
  3. Ceph
  4. 九头蛇
  5. 谷歌BigQuery

额外的资源

回到术语表