Apache Spark と Hadoop MapReduce は、業界で使用されている二大ビッグデータ処理フレームワークです。どちらも大規模なデータ処理に対応する機能を備えたフレームワークですが、そのアーキテクチャやデザインには違いがあります。

以下に、MapReduceとSparkの主な違いを5つ挙げてみましょう:

  • 処理スピード:Apache Sparkは、Hadoop MapReduceよりもはるかに高速である。
  • データ処理のパラダイム:Hadoop MapReduceはバッチ処理用にデザインされており、Apache Sparkはリアルタイムデータ処理と反復分析に適している。
  • 使いやすさ:Apache Spark には、よりユーザーに優しいプログラミングインターフェースがあって複数の言語をサポートしているが、Hadoop MapReduce は、デベロッパーがJavaでコードを書かなければいけない。
  • フォールトトレランス(耐障害性):Apache SparkのRDD(耐障害性分散データセット)は、Hadoop MapReduceのHDFS(Hadoop 分散ファイルシステム)よりも耐障害性に優れている。
  • 統合:Apache Spark にはより広範なエコシステムがあり、他のビッグデータツールとうまく統合できる一方、Hadoop MapReduce は主にHDFS(Hadoop 分散ファイルシステム)と連携するようにデザインされている。

両フレームワークにはどちらも長所と短所があり、どちらを選ぶかは、目前のプロジェクトの具体的なニーズによって決まります。本記事では、Apache Spark と Hadoop MapReduce の違いを深く掘り下げ、様々なビッグデータ処理シナリオにおける長所と短所を見ていきます。

はじめに

Apache Spark が登場するまで、Hadoop MapReduce は、長年に渡ってビッグデータの絶対王者でしたが、Apache Spark が2014年にリリースされて以来、ビッグデータの世界に火をつけてきました。Spark の便利な API と、 Hadoop MapReduce の最大100倍の速度が約束されていることから、一部のアナリストは Spark がデータ分析のための最も強力なエンジンだと考えています。

Spark は最終的に Hadoop MapReduce に取って代わるかもしれないと思われていますが、MapReduce もまだ捨てたものではありません。そこで、これから Integrate.io が2つのプラットフォームを比較して、どちらが上位に来るかを見てみましょう。

Apache Spark とは

開発者の言葉を借りれば、Apache Spark は 「大規模データ処理のための統合分析エンジン 」です。Spark は、何百ものオープンソースのソフトウェアプロジェクトをリリースしている非営利団体の Apache ソフトウェア財団によって管理されており、プロジェクト発足以来、1,200人以上のデベロッパーが Spark に貢献しています。

Sparkは、カリフォルニア大学バークレー校 の AMPLab で開発され、2010年にオープンソースプロジェクトとして初めて公開されました。Spark では、Hadoop MapReduce 分散コンピューティングフレームワークを基盤として使われていますが、開発者は、MapReduce の利点の多くを維持しつつ、性能や使いやすさなど、MapReduceプロジェクトの側面をいくつか改善するために Spark を作成しました。

オープンソースのデータ処理フレームワークである Spark は、なぜあらゆる情報を高速に処理できるのでしょうか。その秘密は、Sparkがクラスタ上でインメモリで動作し、Hadoop MapReduce の2段階パラダイムに縛られない所にあります。それで、同じデータへの繰り返しアクセスが格段に速くなるのです。また、Spark はスタンドアロンのアプリケーションとしても、Hadoop YARNの上で動作し、HDFS からの直接のデータの読み込みが可能です。さらに Sparkは、Yahoo、Intel、Baidu、Yelp、Zillo wなど数十社の大手ハイテク企業に、自社のテクノロジースタックの一部として使用されています。

Spark は、コアとなるデータ処理エンジンに加え、SQL、ML(機械学習)、ストリーム処理などのライブラリーを備えています。Java、Scala、Python、RのAPI を備え、ビッグデータ処理の "万能ナイフ "と呼ばれるほど、デベロッパーに広く親しまれています。

Hadoop MapReduceとは

Hadoop MapReduce は、「コモディティハードウェアの数千ノードに及ぶ大規模クラスタ上で、マルチテラバイトデータセット級の膨大な量のデータを並列処理するアプリケーションを、信頼性と耐障害性に優れた方法で簡単に記述できるソフトウェアフレームである 」と説明されています。
MapReduce パラダイムは、「Map」と「Reduce」という2つの連続したタスクで構成されており(これが名前の由来です)、それぞれのタスクの動作は以下のようになります:

  • Map:データをキーと値のペアに変換しながら、フィルタリングやソートを行う
  • Reduce:その入力を受け取り、データセットに対して何らかの要約操作を行うことで、そのサイズを縮小する。

MapReduce は、大規模なデータセットを分解して並列処理することで、ビッグデータのタスクを劇的にスピードアップさせることができます。Google の社員であるジェフ・ディーン氏とサンジェイ・ゲマワット氏が2004年に初めてMapReduce のパラダイムを提案し、その後、Apache Hadoop が分散処理のためのフレームワークに取り入れました。

Integrate.io のネイティブHadoop HDFSコネクタの詳細は コチラ

MapReduce と Spark の違い

MapReduce と Spark の主な違いは、以下の通りです:

  • 性能
  • 使いやすさ
  • データ処理
  • 安全性

ただ、Spark と MapReduce には共通点がいくつかあります。Spark は MapReduce を基盤としているので、驚くことではないですね。

以下は類似点です:

  • コスト
  • 互換性
  • 耐障害性

では、Spark と MapReduce の同異点について詳しく見ていきましょう。

性能

Apache Spark はRAM(ランダムアクセスメモリ)でデータを処理し、Hadoop MapReduce は Map または Reduce のアクションの後にデータをディスクに戻して永続化します。理論上では、Spark は Hadoop MapReduce を凌駕するはずですが、Spark には多くのメモリが必要です。標準的なデータベースと同様に、Sparkはプロセスをメモリに格納し、キャッシュのために追って通知があるまでそこに保持します。なので Spark を 「Hadoop YARN 上で他のリソースを必要とするサービスと一緒に実行した場合」、または「データが大きすぎてメモリに完全に収まらない場合」に、Spark は大きな性能低下を被る可能性があります。

一方 MapReduce は、ジョブが終了するとすぐにプロセスを終了させるので、他のサービスと並行して実行しても、わずかな性能差で簡単に実行できます。

Spark は、同じデータを何度も繰り返す反復計算では優位に立ちますが、データ変換データ統合など、1回で終わる ETL のようなジョブに関しては、まさに MapReduce が得意とするところです。

結論:Sparkは、特に専用クラスタ上で、データが全てメモリに収まる場合に優れた性能を発揮し、Hadoop MapReduce は、メモリに収まらないデータに適しており、他のサービスと並行した実行が可能。

使いやすさ

Sparkには、Java、Scala、Python 用の API が内蔵されており、SQL に詳しい人向けに Spark SQL(旧称:Shark)も用意されています。Spark のシンプルな構成要素のおかげで、ユーザー定義関数は書きやすいです。また、Sparkには、コマンドを実行するとすぐにフィードバックが得られるインタラクティブモードもあります。

対する MapReduce は Java で書かれており、プログラミングが非常に難しいことで有名ですが、Apache Pig でそれが簡単になり(ただし、構文を覚えるのに時間がかかります)、Apache Hive で プレートに SQL との互換性が加わっています。Hadoopツールの中には、プログラミングなしで MapReduce ジョブを実行できるものもあり、例えば、Integrate.io は Hadoop の上に構築されたデータ統合サービスで、プログラミングやデプロイを必要としていません。

また、Hive には CLI(コマンドラインインターフェース)がありますが、MapReduce には対話型モードがなく、Apache Impala や Apache Tez  のようなプロジェクトだと、Hadoop に完全な対話型クエリを導入したいところです。

インストールとメンテナンスに関して言えば、Spark は Hadoop に縛られることはなく、Spark も Hadoop MapReduce も、Hortonworks や Cloudera によるディストリビューションで利用可能です。

結論:Sparkはプログラミングが簡単で、インタラクティブモードも搭載されており、Hadoop MapReduce はプログラミングが難しいが、それを簡単にするツールがいくつかある。

コスト

Spark や MapReduce はオープンソースのソリューションですが、それでもインフラやデータエンジニアにはお金がかかります。(米国におけるデータエンジニアの平均給与は、2023年3月現在で年間95,568ドル)。Spark も MapReduceもコモディティサーバーを使用し、クラウド上で実行することができ、さらにどちらのツールもハードウェア要件は似ています。

 

Apache Spark 

Apache Hadoop balanced workload slaves

コア

8–16

4

メモリ

8 GB から数百ギガバイト

24 GB

ディスク

4–8

4〜6から1TBディスク

ネットワーク

10GB以上

1GBイーサネット全対応

 

出典

出典

 最適な性能を得るには、データがメモリに収まる必要があるため、Spark クラスタのメモリだと、少なくとも処理が必要なデータ量と同じ大きさでないといけません。ハードディスク容量はメモリ容量よりもはるかに安価であるため、極めて大量のデータを処理する必要がある場合は、Hadoop が安価な選択肢となります。

一方、Spark と MapReduce の性能を考えると、Spark の方が費用対効果が高いはずです。Sparkは、同じタスクをより高速に実行するために必要なハードウェアが少なく、特にクラウド上では、使用ごとにコンピュートパワーを支払うことになりますからね。

人材確保の問題はどうでしょうか。Hadoop は2005年から存在していますが、前々から、市場に出ている MapReduce の専門家は不足しているのが現状です。なので2023年は、より多くの企業がこのテクノロジーに投資していますが、専門家は BI(ビジネスインテリジェンス)の専門家に Hadoop を学ぶよう促しています。

Spark は MapReduce よりも習得が早い反面、過去には資格のある専門家の不足に悩まされたこともあります。ただ、サービスとしてのHadoop や Integrate.ioのデータ統合サービスなどの Hadoopベースのサービスが充実しているため、こうしたハードウェアやスタッフの要件は緩和されます。一方、サービスとしてのSpark のオプションは、AWS(Amazon Web Services)などのプロバイダーを通じた利用があります。

結論:ベンチマークによると Spark の方が費用対効果が高いが、大量データには Hadoop MapReduce の方が低コストと思われる。

互換性

Apache Spark は、オンプレミスまたはクラウド上で Hadoop YARN または Apache Mesos の上でスタンドアロンアプリケーションとして実行することができます。また、Spark は Hadoop Input フォーマットを実装したデータソースに対応しているため、Hadoop が対応するすべての同じデータソースやファイルフォーマットと統合することができます。

さらに、Spark は JDBC(Java Database Connectivity)ODBC(Open Database Connectivity) を介した BI ツールとの連携もできます。

結論:Spark の様々なデータタイプやデータソースとの互換性は、Hadoop MapReduce と同じである。

データ処理

Spark ができることは、単なるデータ処理だけではなく、グラフの処理もでき、機械学習ライブラリである「MLlib」が搭載されています。Spark はその高い性能により、リアルタイム処理とバッチ処理の実行することができ、ITの複雑さを増すような異なるプラットフォーム間でタスクを分割するのではなく、「1つのプラットフォームで利用できる」プラットフォームを提供します。

一方 Hadoop MapReduce は、バッチ処理に最適です。リアルタイムのオプションが必要な場合は、Impala や Apache Storm などの別のプラットフォームを使う必要があり、グラフ処理には Apache Giraph を使うことができます。MapReduce には以前、機械学習用に Apache Mahout がありましたが、その後、Spark や H2O に押されて忘れ去られてしまいました。

結論:Spark はデータ処理の ” 万能ナイフ ” であり、Hadoop MapReduceはバッチ処理の”コマンドーナイフ”である。

耐障害性

Spark は、MapReduceと同様に、タスクごとの再試行と投機的実行を備えています。ただし、MapReduce は RAM ではなくハードディスクに依存するため、ここでは MapReduce の方が若干有利です。MapReduce のプロセスが実行の途中でクラッシュしても、中断したところから継続できるのに対し、Spark は最初から処理をやり直さないといけません。

結論:Spark と Hadoop MapReduce はどちらも障害耐性が高いが、Hadoop MapReduce の方が若干耐性が高い。

安全性

安全性の面では、Spark は MapReduce よりも低いです。実際、Spark のセキュリティはデフォルトで「オフ」に設定されており、攻撃に対して脆弱な状態になる可能性があります。Sparkでの認証は、共有シークレットを介した RPC (Remote Procedure Call)チャネルに対応しています。また、Spark にはイベントログが機能として搭載されており、javax servlet filter を介してWeb UI の安全性を保つことができます。さらに、Spark は YARN 上で動作し、HDFS を利用できるため、Kerberos 認証、HDFSファイルのパーミッション、ノード間の暗号化なども堪能できます。

対する Hadoop MapReduce は、Hadoop セキュリティの利点をすべて利用でき、Knox Gateway のような Hadoop のセキュリティプロジェクトと統合することができます。ちなみに、Hadroop のもう一つの人気セキュリティプロジェクトである Apache Sentry は、最近サービスを終了しました。もう1つの終了したツールである Project Rhino は、Hadoop のセキュリティを改善しましたが、Sentry に関しては Spark に対応するだけでした。現在、利用できるオプションはほとんどないため、Spark の開発者は自らセキュリティの改善が必要です。

結論: Sparkのセキュリティは、より多くのセキュリティ機能やプロジェクトがある MapReduce に比べると、まだ発展途上である。

Sparkの一般的なユースケース

MapReduce と Spark はどちらも大規模データ処理のための強固な選択肢ですが、特定の状況下では、どちらか一方がより理想的であると言えます。

ストリーミングデータ

企業が DX(デジタル変革)を進めるにあたって、データをリアルタイムで分析する方法が求められており、Spark のインメモリデータ処理は、ストリーミングデータの処理に最適な候補となっています。このようなユースケースを実現するSparkの一種にSpark Streaming がありますが、企業が Spark Streaming を活用する方法にはどのようなものがあるのでしょうか。

ストリーミングETL:従来のETLプロセスでは、データは読み込まれ、互換性のあるフォーマットに変換された後、ターゲットのデータストアに保存されますが、ストリーミング ETLでは、ターゲットデータストアに保存される前に、データがメモリ内で継続的にクリーニングされて集約されるため、プロセスはより効率的です。そのため、小規模なサーバーでデータをETLする際のコストが削減され、コンピュートコストが改善されます。また、ストリーミングETL で、より早い時間枠で分析用のデータが使えるようになります。

データの充実:企業は、より充実したCX(顧客体験)を提供すべく、常に変化し続けています。リアルタイムデータと静的データを組み合わせることで、企業はより強固な顧客像を築き上げ、個別化された体験を提供することができ、その結果、ブランドの認知度やコンバージョン、売上が上がります。また、顧客をどの角度からも見ることができるため、企業はマーケティングキャンペーンを微調整して、関連するサービスや製品を宣伝することができます。

トリガーイベントの検知:リアルタイムでイベントに対応する能力は、アジリティと変化への適応を促進する重要なビジネス能力です。企業は Spark Streaming を使うことで、例えば「業務に支障をきたす可能性のあるデータの傾向やパターンを特定して迅速な対応を取る」というような、リアルタイムでのデータ分析や、直ちに注意が必要な異常活動の特定をすることができます。

ML(機械学習)

予測分析に関しては、Spark は、仕事をこなせる強固なツールセットを機械学習ライブラリ(MLlib)が提供し、ユーザーがデータセットに対して繰り返しクエリーを実行すると、基本的に ML と同様のアルゴリズムを構築することになります。例えば、ML で、企業はマーケティング目的で顧客セグメンテーションを行うことができ、それによって人口統計情報に基づくマーケティングの個別化がもっと簡単になります。また、ML でセンティメント分析(感情分析)もでき、顧客がブランドについて本当はどう思っているのかが明らかになります。

インタラクティブクエリ

ライブデータに対してインタラクティブクエリを実行できることを想像してください。基本的には、情報処理のために外部のデータストアに依存することなく、大規模なデータセットを分析することができるようになるはずです。Spark Streaming があれば、外部データベースに永続化することなく、データのストリームをクエリすることができ、それによって時間とリソースを自由に使うことができます。

MapReduce の一般的なユースケース

インメモリで処理するには大きすぎるデータを処理する場合、MapReduce が有効です。このように、MapReduce は大規模なデータセットの処理に最適です。

大容量データセット(ペンタバイト、テラバイト)の処理

MapReduce の実装と維持に必要な時間と費用を考えると、ギガバイトサイズはMapReduce をジャスティファイ( 両端揃え)するのに十分な大きさではありません。なのでペンタバイトやテラバイトのデータを管理しようとする組織が、MapReduce の理想的な候補となります。

さまざまな形式のデータ保存

企業は、テキスト、画像、プレーンテキストなど複数のファイルタイプの処理に MapReduce を使用するといいでしょう。このようなファイルはインメモリ処理では大きすぎるため、MapReduce を使ってバッチ処理を行う方が経済的です。

データ処理

MapReduce には、大規模なデータセットに対して基本的な分析から複雑な分析までを実行するための強固な機能が備わっており、大規模なデータセットの要約、フィルタリング、結合などのタスクは、インメモリ処理ではなく、ディスクベースのストレージを使うことでより効率的になります。

MapReduce と Spark のトレンド

混沌とした市場で競争力を維持するための新しい方法を模索している企業は、以下のようなデータ管理の今後のトレンドに適応できないといけません:

  • XOps:XOps は、DevOpsのベストプラクティスを用いて、データ管理プロセスにおける信頼性、再利用性、再現性の実現を目標としている。

  • データ ファブリック:アーキテクチャーの枠組みとして、データファブリックは、複数のタイプのデータストレージ、分析、処理、およびセキュリティをシームレスなデータ管理プラットフォームで組み合わせることを目標としている。

  • ビジネスのコア機能としてのデータ分析:従来は、データを分析し、主要なビジネスリーダーに提供する別のチームが、データ管理を担当していましたが、新しいアプローチでは、意思決定のための情報にすぐにアクセスできるように、データは直接組織のリーダーの手に渡ります。

MapReduceとSparkのどちらを選ぶべきか

MapReduce と Spark のどちらを選ぶかは、ビジネスのユースケースによります。

Spark は、インメモリデータ処理によって、優れたパフォーマンスと高い費用対効果を実現しています。Hadoop の全データソースとファイル形式に対応し、複数のプログラミング言語に対応したフレンドリーなAPIが用意されているため、学習曲線も早くなっており、グラフ処理と ML の機能もあります。

Hadoop MapReduce はより成熟したプラットフォームであり、バッチ処理に特化して作られたものです。MapReduce は、メモリに収まらない非常に大きなデータに対してSparkよりも費用対効果が高く、この技術の経験を持つ従業員を見つけやすいかもしれません。

さらに、MapReduce のエコシステムは、多くのサポートプロジェクト、ツール、クラウドサービスのおかげで、現在もっと大きくなっています。

もう1つ注意すべきは、Spark を選ぶと、Spark 単体では使用しない可能性があることです。データの保存には HDFS が必要ですし、Apache Hive、HBase、Pig、Impala、またはその他の Hadoop プロジェクトを使いたいかもしれません。(Apache HiveとHBaseの詳細はコチラ)つまり、ビッグデータの完全なパッケージのためには、Hadoop と MapReduce を Spark と一緒に実行する必要があるのです。

Spark と MapReduceについての専門家の考察

多くの専門家が MapReduce と Spark を比較していますが、ここでは、評判の高い MapReduce と Spark のオンラインレビューからの見解を以下にいくつかご紹介します:

IBM

IBMは、Spark と MapReduceの主な違いは、後者は 「データを処理し、後続のステップのためにメモリに保持する 」が、 MapReduce は、「ディスク上のデータを処理する」ことであると述べています。また、性能を比較すると、IBM は Sparkは 「中間データをディスクに読み書きする代わり」に RAMを利用するため速く、Hadoopは 「複数のソースのデータを保存し、MapReduce で一括処理する」と述べています。

スケーラビリティについてIBMは、Hadoopはデータ量が増えたときにHDFSを介して需要に応じて 「素早く拡張 」し、Sparkは 「大量のデータに対して耐障害性のあるHDFSに依存する 」と指摘しています。

TutorialsPoint

TutorialsPoint では、MapReduce を 「データ処理エンジン」、Sparkを 「分析ソリューションまたはアプリケーション全体を強化するフレームワーク 」と呼んでおり、ウェブサイトには、「後者はデータサイエンティストにとって論理的な選択である」とあります。

さらに、MapReduce は 「Sparkと比べて性能が低いため、計算の遅延が大きい 」のに対し、デベロッパーは Spark の優れたスピードと 「低遅延処理能力」を「活用」することができます。

Spark と MapReduce のデータ処理について、TutorialsPoint は、MapReduceは 「主にバッチ処理用に開発された 」ため、「リアルタイム分析が必要なユースケースに適用すると効果がない 」と指摘しています。一方、Spark は、「Facebook、Twitter、その他同様のプラットフォームなど、リアルタイムのライブフィードから来るデータの効果的な管理と処理 」に対応しています。

ナレッジハット

ナレッジハットでは、MapReduce が「少なくとも4回のディスク操作」を伴うのに対し、Spark は2回で済むことに触れており、同サイトは、これが 「Spark が MapReduce よりはるかに高速である 」理由の1つであると述べています。コストについて言えば、ナレッジハット は、「MapReduce では Sparkと比べて小さなメモリで動作する」ため、ハードウェアが安価であり、「コモディティなハードウェアでも十分 」と述べています。

MapReduceとSpark:Integrate.ioができること

Hadoop MapReduce と Apache Spark はどちらも強力なテクノロジーですが、両者の間には大きな違いがあります。Spark は高速で、Hadoop の2段階パラダイムに縛られない RAM を利用し、サーバーの RAM に収まる小さなデータセットに効果的です。一方、MapReduce は、大規模なデータセットの処理に費用対効果が高く、セキュリティ機能やプロジェクトが充実しています。

Apache Spark は、ビッグデータの遊び場では新しいおもちゃですが、Hadoop MapReduce を使ったユースケースもまだあります。そして、Apache Spark とHadoop MapReduce のどちらを選んでも、Integrate.io はデータ変換をお手伝いします。このノーコードデータパイプラインプラットフォームは、Hadoopの上に構築されており、デプロイやプログラミングは一切必要ありません。また、Integrate.io のような Hadoop ベースのサービスは、ハードウェアやスタッフの要件を緩和することも可能です。

Integrate.io には、データ統合を効率化し、どのようなテクノロジーを使っていても、異種データを接続するという理念があります。ぜひ今すぐデモをご予約ください。