メインコンテンツまでスキップ
メインコンテンツまでスキップ

なぜ MapReduce のようなものを使用しないのか?

MapReduce のようなシステムは、分散ソートに基づく reduce 操作を持つ分散コンピューティングシステムとして言及できます。このクラスにおける最も一般的なオープンソースソリューションは Apache Hadoop です。

これらのシステムは、その高いレイテンシのため、オンラインクエリには適していません。言い換えれば、ウェブインターフェースのバックエンドとしては使用できません。このようなシステムは、リアルタイムデータの更新にも役立ちません。分散ソートは、操作の結果とすべての中間結果(もしあれば)が通常、単一のサーバのRAMに存在する場合、reduce 操作を実行するための最適な方法ではありません。このような場合、ハッシュテーブルは reduce 操作を行うための最適な方法です。マップ・リデュースタスクの最適化の一般的なアプローチは、RAM内のハッシュテーブルを使用した事前集約(部分的なリデュース)です。この最適化はユーザーが手動で行います。分散ソートは、単純なマップ・リデュースタスクを実行する際の性能低下の主な原因の一つです。

ほとんどの MapReduce 実装は、クラスタ上で任意のコードを実行することを許可しています。しかし、実験を迅速に実行するには、宣言型クエリ言語が OLAP により適しています。たとえば、Hadoop には Hive や Pig があります。また、Cloudera Impala や Spark 用の Shark(古い)も考慮に入れるべきです。さらに、Spark SQL、Presto、Apache Drill もあります。このようなタスクを実行する際の性能は、専門システムに比べて非常に最適ではありませんが、比較的高いレイテンシにより、これらのシステムをウェブインターフェースのバックエンドとして使用することは現実的ではありません。