ApacheSparkとHadoopMapreduce–知っておくべきこと
公開: 2019-09-05ビッグデータは、現代世界に遍在するビッグブラザーのようなものです。 さまざまな業界で増え続けるビッグデータのユースケースは、さらに多くのビッグデータテクノロジーを生み出しました。その中で、HadoopMapReduceとApacheSparkが最も人気があります。 MapReduceとSparkはどちらもApacheSoftwareFoundationによって開発されたオープンソースのフラッグシッププロジェクトですが、お互いの最強の候補でもあります。
この投稿では、最初にMapReduceフレームワークとSparkフレームワークについて説明し、次にそれらの主な違いについて説明します。
Spark&MapReduceとは何ですか?
Sparkは、高速計算を可能にするために特別に設計されたビッグデータフレームワークです。 バッチ、インタラクティブ、反復、ストリーミングなど、さまざまなワークロードを処理できる汎用データ処理エンジンとして機能します。 Sparkの重要な機能は速度です。メモリ内の計算を実行して、データ処理の速度を上げます。 その結果、コンピューターノードのクラスターで適切に機能し、大規模なデータセットの処理を高速化できます。
復元力のある分散データセット(RDD)は、Sparkの主要なデータ構造です。 RDDは、オブジェクトの不変の分散コレクションであり、各ノードは、クラスターのさまざまなノードで計算できる小さなチャンクに分割されます。 これにより、クラスター内での独立したデータ処理が容易になります。
MapReduceは、並列分散環境で大量のデータを処理するために設計されたオープンソースフレームワークです。 バッチモードでのみデータを処理できます。 Hadoop MapReduceには、HDFSとYARNの2つの主要なコンポーネントがあります。

MapReduceプログラミングは、MapperとReducerの2つの部分で構成されています。 Mapperがデータの並べ替えのタスクを処理する間、Reducerは並べ替えられたデータを結合し、それをより小さなフラグメントに変換します。
これら2つのフレームワークの根本的な違いは、データ処理に対する本来のアプローチです。 MapReduceはディスクからの読み取りとディスクへの書き込みによってデータを処理しますが、Sparkはメモリ内で実行できます。 したがって、Sparkは、処理が高速であるというMapReduceよりも優れています。
しかし、それはSparkがMapReduceよりも優れていることを意味しますか? 残念ながら、議論はそれほど単純ではありません。 この問題にさらに光を当てるために、それらの違いを1つずつ説明します。
情報処理
Spark :前述したように、Sparkはハイブリッドで汎用の処理フレームワークです。 インメモリ計算と処理の最適化により、リアルタイムでのデータ処理を高速化します。 ストリーミングワークロード、インタラクティブクエリの実行、MLアルゴリズムに最適です。 ただし、RDDでは、重要なデータのみをディスクに書き込むことによって、Sparkが一時的にデータをディスクに保存することしかできません。 そのため、プロセスをメモリにロードし、キャッシュに保持します。 これにより、Sparkはかなりメモリを消費します。
MapReduce :MapReduceは、Hadoopのネイティブバッチ処理エンジンです。 そのコンポーネント(HDFSおよびYARN)により、バッチデータのよりスムーズな処理が可能になります。 ただし、データ処理は後続のいくつかのステップで行われるため、プロセスは非常に遅くなります。 MapReduceの利点は、永続的なストレージが可能になることです。つまり、データをディスクに保存します。 これにより、大規模なデータセットの処理に適しています。 タスクが完了するとすぐに、MapReduceはそのプロセスを強制終了するため、他のサービスと同時に実行できます。
使いやすさ
Spark :使いやすさに関しては、Sparkが最高の地位を占めています。 Scala(母国語)、Java、Python、SparkSQL用の多くのユーザーフレンドリーなAPIが付属しています。 Sparkでは、同じクラスターでストリーミング、バッチ処理、機械学習が可能であるため、ニーズに応じてデータ処理インフラストラクチャを簡単に簡素化できます。 また、Sparkには、コマンドを実行するためのインタラクティブなREPL(Read-eval-print loop)モードが含まれており、ユーザーに迅速なフィードバックを提供します。
MapReduce :Hadoop MapReduceはJavaで記述されているため、構文の学習には時間がかかります。 したがって、最初は、多くの人がプログラミングが非常に難しいと感じるかもしれません。 MapReduceにはインタラクティブモードがありませんが、PigやHiveなどのツールを使用すると操作が少し簡単になります。 プログラミングを必要とせずにMapReduceタスクを実行できる他のツール(たとえば、Xplenty)もあります。

フォールトトレランス
Spark :Sparkは、ネットワークI / Oを削減することにより、フォールトトレランスのためにRDDとさまざまなデータストレージモデルを採用しています。 RDDのパーティションが失われた場合、RDDはメモリに保存されている情報からそのパーティションを再構築します。 したがって、プロセスが途中でクラッシュした場合、Sparkは最初から処理を開始する必要があります。
MapReduce :Sparkとは異なり、MapReduceは、ノードマネージャーとResourceManagerを介したフォールトトレランスのためにレプリケーションの概念を使用します。 ここで、プロセスが途中で実行に失敗した場合、MapReduceは中断したところから続行するため、時間を節約できます。
安全
Spark :Sparkはまだ初期段階にあるため、セキュリティ要素は高度に開発されていません。 共有秘密(パスワード認証)シートによる認証をサポートします。 Web UIについては、javaxサーブレットフィルタを使用して保護できます。 SparkのYARNおよびHDFS機能により、Kerberos認証、HDFSファイルレベルのアクセス許可、およびノード間の暗号化が可能になります。
MapReduce :MapReduceははるかに開発されているため、Sparkよりも優れたセキュリティ機能を備えています。 Hadoopのすべてのセキュリティ特典を享受しており、KnoxGatewayやSentryなどのHadoopセキュリティプロジェクトと統合できます。 有効なサードパーティベンダーを通じて、組織は認証にActiveDirectoryKerberosおよびLDAPを使用することもできます。
費用
SparkとMapReduceはどちらもオープンソースプロジェクトですが、両方に発生しなければならない特定のコストがあります。 たとえば、Sparkはメモリ内でタスクを実行するために大量のRAMを必要とし、RAMはハードディスクよりもコストがかかります。 それどころか、Hadoopはディスク指向です。高価なRAMを購入する必要はありませんが、ディスクI/Oを複数のシステムに分散するためのシステムにさらに投資する必要があります。
したがって、コストに関しては、組織の要件に大きく依存します。 組織が大量のビッグデータを処理する必要がある場合、ハードディスクスペースを購入する方が大容量のメモリスペースを購入するよりもはるかに安価であるため、Hadoopはコスト効率の高いオプションになります。 さらに、MapReduceには、Hadoop-as-a-serviceオファリングとHadoopベースのサービスが付属しており、ハードウェアとスタッフの要件をスキップできます。 これと比較すると、Spark-as-a-serviceの選択肢はほんの一握りです。

互換性
互換性に関する限り、SparkとMapReduceは互いに互換性があります。 Sparkは、Hadoopでサポートされているすべてのデータソースおよびファイル形式とシームレスに統合できます。 また、どちらもスケーラブルです。 したがって、Sparkのデータ型およびデータソースとの互換性は、HadoopMapReduceの互換性とほとんど同じです。
ご覧のとおり、SparkとMapReduceには、それぞれを際立たせる独自の機能があります。 たとえば、SparkはMapReduceに欠けているリアルタイム分析を提供しますが、MapReduceにはSparkに欠けているファイルシステムが付属しています。 どちらのフレームワークも独自の方法で優れており、どちらにも独自の長所と短所があります。 最終的に、SparkとMapReduceの間の議論はすべて、特定のビジネスニーズと達成したいタスクの種類に帰着します。
ビッグデータについて詳しく知りたい場合は、ビッグデータプログラムのソフトウェア開発スペシャライゼーションのPGディプロマをチェックしてください。このプログラムは、働く専門家向けに設計されており、7つ以上のケーススタディとプロジェクトを提供し、14のプログラミング言語とツール、実践的なハンズオンをカバーしています。ワークショップ、トップ企業との400時間以上の厳格な学習と就職支援。
世界のトップ大学からオンラインでソフトウェア開発コースを学びましょう。 エグゼクティブPGプログラム、高度な証明書プログラム、または修士プログラムを取得して、キャリアを早急に進めましょう。
