Apache Spark vs Hadoop MapReduce: 5つの重要な違い
- Apache SparkはHadoop MapReduceより100倍速い可能性がある。
- Apache SparkはRAMを利用しており、Hadoopの2ステージパラダイム(Mapreduce)に縛られることがない。
- Apache SparkはサーバのRAMに収まる小さなデータセットに適しています。
- 大規模なデータセットを処理する場合は、Hadoopの方が費用対効果が高い。
- Apache Sparkは現在、Hadoop MapReduceよりも人気がある。
Hadoopは何年もの間、ビッグデータの王者として知られていました。(Sparkが登場するまでは)
2014年にリリースされて以来、Apache Sparkはビッグデータの世界を盛り上げてきました。Sparkの便利なAPIと、Hadoop MapReduceの100倍の速度が約束されていることから、アナリストの中には、Sparkはビッグデータの新時代の到来を告げるものだと考えている人もいます。
オープンソースのデータ処理フレームワークであるSparkは、どのようにしてこれだけの情報を高速に処理できるのでしょうか?その秘密は、Sparkがクラスタ上でインメモリで動作し、HadoopのMapReduceの2ステージパラダイムに縛られていない点にあります。これにより、同じデータへの繰り返しアクセスが格段に速くなります。
Sparkはスタンドアロンのアプリケーションとしても、Hadoop YARN上でも動作し、HDFSから直接データを読み込むことができます。Yahoo、Intel、Baidu、Yelp、Zillowなど数十社の大手テック企業が、すでにテクノロジースタックの一部としてSparkを利用しています。
SparkはHadoop MapReduceに取って代わりそうなに見えますが、まだMapReduceを除外するべきではありません。この記事では、2つのプラットフォームを比較し、Sparkが本当にトップに君臨するかどうかを見ていきましょう。
Table of Contents
- What is Apache Spark?
- What is Hadoop MapReduce?
- SparkとMapReduceの違い
- パフォーマンス
- 使いやすさ
- コスト
- 互換性
- データ処理
- Failure Tolerance(障害耐性)
- セキュリティ
- 結論
What is Apache Spark?
Apache Sparkは、自身の言葉で言うと、「大規模なデータ処理のための統合分析エンジン 」です。Sparkは非営利団体であるApache Software Foundationによってメンテナンスされており、何百ものオープンソースのソフトウェアプロジェクトをリリースしてきました。プロジェクト開始以来、1200人以上の開発者がSparkに貢献しています。
もともとUCバークレーのAMPLabで開発されたSparkは、2010年にオープンソースプロジェクトとして初めてリリースされました。SparkはHadoop MapReduce分散コンピューティングフレームワークを基盤にしています。Sparkは、MapReduceの利点の多くを維持しつつ、パフォーマンスや使いやすさなど、MapReduceプロジェクトのいくつかの側面を改善することを目的としています。
Sparkにはコアデータ処理エンジンのほか、SQL、機械学習、ストリーム処理のためのライブラリが含まれています。Java、Scala、Python、RのAPIを提供しており、開発者の間ではビッグデータ処理の「スイスアーミーナイフ」と呼ばれています。
What is Hadoop MapReduce?
Hadoop MapReduce は、「コモディティハードウェアの大規模クラスタ(数千ノード)上で膨大な量のデータ(数テラバイトのデータセット)を並列処理するアプリケーションを、信頼性が高く、耐障害性の高い方法で簡単に記述するためのソフトウェアフレームワーク 」であると説明しています。
MapReduceパラダイムは、2つのシーケンシャルなタスクで構成されています。MapとReduce(名前の由来)です。 Map は、データをフィルタリングしてソートし、キーと値のペアに変換します。 次に、Reduceはこの入力を受け取り、データセットに対してある種のサマリー操作を実行することでサイズを小さくします。
MapReduceは、大規模なデータセットを分解して並列処理することで、ビッグデータのタスクを劇的に高速化することができます。MapReduceのパラダイムは、2004年にGoogleの従業員であるJeff DeanとSanjay Ghemawatによって最初に提案され、その後、分散処理のためのフレームワークであるApacheのHadoopに組み込まれた。
SparkとMapReduceの違い
Apache SparkとHadoop MapReduceの主な違いは以下の通りです。
- パフォーマンス
- 使いやすさ
- データ処理
- セキュリティ
しかし、SparkとMapReduceの間にはいくつかの類似点もある。SparkとMapReduceの類似点には、以下のようなものがあります。
- コスト
- 互換性
- Failure tolerance(システムの障害耐性)
以下では、SparkとMapReduceの違い(および類似点)について、各セクションごとに詳しく見ていきます。
Spark vs MapReduce: パフォーマンス
Apache Sparkはランダムアクセスメモリ(RAM)でデータを処理するのに対し、Hadoop MapReduceはmapやreduceを行った後にデータをディスクに保存します。理論的には、SparkはHadoop MapReduceよりも優れているはずです。
しかし、Sparkは大量のメモリを必要とします。標準的なデータベースと同様に、Sparkはプロセスをメモリにロードし、キャッシングのために通知があるまでそのプロセスを保持します。リソースを必要とする他のサービスと一緒にHadoop YARN上でSparkを実行したり、データが大きすぎてメモリに収まりきらない場合、Sparkは大きなパフォーマンス低下を引き起こす可能性があります。
一方、MapReduceは、ジョブが完了するとすぐにプロセスを終了させるので、パフォーマンスにわずかな違いが出ることはありますが、他のサービスと一緒に簡単に稼働させることできます。
同じデータを何度も渡す必要があるような反復計算では、Sparkに軍配が上がります。しかし、データ変換やデータ統合などの一度だけ読み込むETLのようなジョブでは、MapReduceはまさしくそのために設計されたものでありMapReduceが優れています。
結論: Sparkは、すべてのデータがメモリに収まっているとき、特に専用クラスタ上では、より良いパフォーマンスを発揮します。Hadoop MapReduceは、メモリに収まらないようなデータのために設計されており、他のサービスと一緒に稼働させることができます。
Spark vs MapReduce: 使いやすさ
SparkにはJava、Scala、Python用のAPIがあらかじめ用意されており、SQLに詳しい人向けにSpark SQL (旧称Shark)も用意されています。Sparkのシンプルなビルディングブロックのおかげで、ユーザー定義関数を簡単に書くことができます。Sparkには、コマンドを実行してすぐにフィードバックを得ることができるインタラクティブモードも含まれています。
MapReduceはJavaで書かれており、プログラムするのが非常に難しいことで有名です。 Apache Pigはそれをより簡単にしてくれます(構文を覚えるのに時間がかかるが)。一方、Apache Hive は SQLの互換性をもたらしてくれます。いくつかのHadoopツールは、プログラミングなしでMapReduceジョブを実行することができます。例えば、XplentyはHadoopの上に構築されたデータ統合サービスで、プログラミングやデプロイを必要としません。
また、Hiveにはコマンドラインインターフェースがありますが、MapReduceにはインタラクティブモードがありません。Apache ImpalaやApache Tezのようなプロジェクトは、Hadoopに完全な対話型クエリを導入したいと考えています。
インストールとメンテナンスに関しては、SparkはHadoopに縛られません。また、SparkとHadoop MapReduceの両方がHortonworks (HDP 3.1)とCloudera (CDH 5.13)のディストリビューションに含まれています。
結論:Sparkの方がプログラミングが簡単で、インタラクティブモードが含まれています。Hadoop MapReduceの方がプログラミングは難しいですが、いくつかのツールが用意されています。
Spark vs. MapReduce: コスト
SparkとMapReduceはオープンソースのソリューションですが、マシンやスタッフにお金をかける必要があります。
SparkとMapReduceはどちらもコモディティサーバーを使用し、クラウド上で実行することができます。さらに、どちらのツールも同じようなハードウェア要件です。
Apache Spark (source) |
Apache Hadoop balanced workload slaves (source) |
|
Cores | 8–16 | 4 |
Memory | 8 GB to hundreds of gigabytes | 24 GB |
Disks | 4–8 | 4–6 one-TB disks |
Network | 10 GB or more | 1 GB Ethernet all-to-all |
最適なパフォーマンスを得るためには、データがインメモリに収まるようにする必要があるため、Sparkクラスタのメモリは、少なくとも処理する必要のあるデータ量と同じくらいの大きさにする必要があります。極めて大量のデータを処理する必要がある場合、ハードディスクスペースはメモリスペースよりもはるかに安価なので、Hadoopの方が間違いなく安価な選択肢になります。
一方で、SparkとMapReduceの性能を考えると、Sparkの方が費用対効果が高いはずです。Sparkは、同じタスクをはるかに高速に実行するために必要なハードウェアが少なくて済み、特にコンピュートパワーが使用量に応じて支払われるクラウド上ではなおさらです。
人員不足の問題はどうでしょうか?Hadoopは2005年から存在しているにもかかわらず、市場にはまだMapReduceのエキスパートが不足しています。ガートナーの調査レポートによると、Hadoopを利用している企業の57%が「必要なスキルと能力を習得すること」がHadoopの最大の課題であると答えています。
それでは、2010年に登場してまだ間もないSparkにとって、これは何を意味するのでしょうか?Sparkの方が学習速度は速いかもしれませんが、資格を持ったエキスパートの不足に悩まされているのも事実です。
良いニュースは、Hadoop-as-a-serviceやHadoopベースのサービス(Xplenty独自のデータ統合サービスのようなもの)が幅広く提供されており、これらのハードウェアとスタッフの要件を緩和するのに役立つということです。一方、Spark-as-a-serviceのオプションは、Amazon Web Servicesのようなプロバイダーを通じて利用可能です。
結論:ベンチマークによると、Sparkの方が費用対効果が高いとされています。Hadoop MapReduceは、人材が増えることによりコストが安くなる可能性があります。そして大量のデータを処理する場合もコストが下がる可能性があります。
Spark vs MapReduce: 互換性
Apache Spark はスタンドアロンのアプリケーションとして、Hadoop YARN やApache Mesos上でオンプレミスでもクラウドでも動作します。SparkはHadoop InputFormatを実装したデータソースをサポートしているので、Hadoopがサポートしているすべてのデータソースやファイルフォーマットと統合することができます。また、SparkはJDBCやODBCを介してビジネスインテリジェンスツールと連携します。
結論:Sparkは様々なデータタイプに対応しています。 Sparkの様々なデータタイプやデータソースとの互換性は、Hadoop MapReduceと同じです。
Spark vs MapReduce: データ処理
Sparkはプレーンなデータの処理だけでなく、グラフの処理も可能で、MLlib機械学習ライブラリが含まれています。その高いパフォーマンスのおかげで、Sparkはバッチ処理だけでなくリアルタイム処理も可能です。Sparkは「それ1つで全てを賄う」プラットフォームを提供しており、別々のプラットフォームにタスクを分割することによりITの複雑さが増大してしまうのを防ぎます。
Hadoop MapReduceはバッチ処理に最適です。リアルタイムのオプションが必要な場合は、ImpalaやApache Stormのような別のプラットフォームを使用する必要があり、グラフ処理にはApache Giraphを使用することができます。MapReduceには機械学習用のApache Mahoutがありましたが、それはSparkやH2Oに取って代わられてしまいました。
結論:Sparkはデータ処理の万能ナイフであり、Hadoop MapReduceはバッチ処理専用のナイフです。
Spark vs MapReduce: Failure Tolerance(耐障害性)
Sparkには、MapReduceと同様にタスクごとのリトライと投機的な実行があります。それに対して、MapReduceはRAMではなくハードドライブに依存しているため、ここでは若干のアドバンテージがあります。MapReduceのプロセスが実行中にクラッシュした場合、中断した場所から処理を続けることができますが、Sparkは最初から処理を開始しなければなりません。
結論: SparkとHadoop MapReduceはどちらも優れた耐障害性を持っていますが、Hadoop MapReduceの方が若干耐障害性が高い。
Spark vs MapReduce: セキュリティ
セキュリティの面では、MapReduceと比較するとSparkは先進性に欠けています。実際、Sparkのセキュリティはデフォルトでオフに設定されており、攻撃を受けやすい状態になっています。
Sparkでの認証は、共有暗号鍵を経由したRPCチャンネルに対応しています。Sparkには機能としてイベントロギングが含まれており、javaxサーブレットフィルタを介してWeb UIのセキュリティを確保することができます。また、SparkはYARN上で動作し、HDFSを利用できるため、Kerberos認証やHDFSのファイルパーミッション、ノード間の暗号化などの機能も享受することが可能です。
Hadoop MapReduceは、Hadoopセキュリティのメリットをすべて享受でき、Knox GatewayやApache SentryのようなHadoopセキュリティプロジェクトと統合することができます。 Hadoopのセキュリティを向上させることを目的としたProject Rhinoは、Sparkに対してSentryのサポートを追加することを言及しているのみです。もし、そうでなければ、Sparkの開発者自身がSparkのセキュリティを改善しなければならなりません。
結論: Sparkのセキュリティは、より多くのセキュリティ機能とプロジェクトを持つMapReduceに比べて、まだあまり開発されていません。
Spark vs Hadoop MapReduce トレンド
結論
- Apache SparkはHadoop MapReduceより100倍速い可能性がある。
- Apache SparkはRAMを利用しており、Hadoopの2ステージパラダイム(Mapreduce)に縛られていない。
- Apache SparkはサーバのRAMに収まる小さなデータセットに適している。
- 大規模なデータセットを処理する場合は、Hadoopの方が費用対効果が高い。
- Apache Sparkは現在、Hadoop MapReduceよりも人気がある。
Apache Sparkはビッグデータの舞台ではピカピカの新しいおもちゃです。しかし、Hadoop MapReduceを使用するためのユースケースはまだあります。
Sparkは、インメモリでのデータ処理が可能なため、優れたパフォーマンスを発揮し、費用対効果も高いです。Hadoopのすべてのデータソースやファイル形式と互換性があり、複数のプログラミング言語に対応したフレンドリーなAPIが用意されているため、学習のスピードも速いです。Sparkにはグラフ処理や機械学習機能まで含まれています。
Hadoop MapReduceはより成熟したプラットフォームで、バッチ処理を目的として作られたものです。メモリに収まらない非常に大きなデータに対してはSparkよりもMapReduceの方が費用対効果が高く、MapReduceの経験がある人材を見つけやすいかもしれません。さらに、MapReduceのエコシステムは、多くのサポートプロジェクトやツール、クラウドサービスのおかげで、最近大きくなっています。
しかし、Sparkがここでは勝者のように見えたとしても、それだけで使うことはないでしょう。データを保存するにはやはりHDFSが必要で、HBase、Hive、Pig、Impala、または他のHadoopプロジェクトを使いたいと思うかもしれません。つまり、完全なビッグデータパッケージを実現するためには、HadoopやMapReduceをSparkと一緒に稼働する必要があるということです。
もし、HiveとHBaseを比較している場合は、こちらのブログ記事を読んでみてください。
Xplentyのオンライン相談に登録して、無料トライアルでプラットフォームを試してみよう!
Xplentyの機能概要や実際の操作感を見てみたい方は、定期的に開催している製品紹介セミナーがおすすめです。
この記事は2019年5月11日に公開された記事を翻訳したものです。
(Top image by Trevor J DeGlopper, Some rights reserved)