Spark vs Hadoop:最高のビッグデータフレームワークはどれですか?



このブログ投稿では、ApacheSparkとHadoopについて説明しています。さまざまなシナリオで選択するのに適切なビッグデータフレームワークがどれであるかがわかります。

このApacheSpark vs Hadoopブログは、最初にHadoopとSparkを紹介して、両方のフレームワークに適切なコンテキストを設定することから始めます。次に、さまざまなパラメーターで両方のビッグデータフレームワークを比較して、それらの長所と短所を分析します。ただし、比較の結果がどうであれ、SparkとHadoopの両方が重要なコンポーネントであることを知っておく必要があります。

大学院とみなされる修士号です

Apache SparkとHadoop:Hadoopの概要

Hadoopは、ビッグデータを最初に分散環境に保存して、並列処理できるようにするフレームワークです。 Hadoopには基本的に2つのコンポーネントがあります。





HDFS

HDFSはリソースの抽象化を作成します。単純化してみましょう。仮想化と同様に、HDFSは論理的にビッグデータを格納するための単一のユニットと見なすことができますが、実際には、データを複数のノードに分散して格納しています。ここに、マスタースレーブアーキテクチャがあります。 HDFSでは、Namenodeはマスターノードであり、Datanodeはスレーブです。

NameNode

これは、DataNode(スレーブノード)を維持および管理するマスターデーモンです。クラスタに保存されているすべてのファイルのメタデータを記録します。保存されているブロックの場所、ファイルのサイズ、アクセス許可、階層など。ファイルシステムのメタデータに対して行われたすべての変更を記録します。



たとえば、ファイルがHDFSで削除された場合、NameNodeはすぐにこれをEditLogに記録します。クラスター内のすべてのDataNodeからハートビートとブロックレポートを定期的に受信して、DataNodeが稼働していることを確認します。 HDFS内のすべてのブロックと、これらのブロックが格納されているノードの記録を保持します。

DataNode

これらは、各スレーブマシンで実行されるスレーブデーモンです。実際のデータはDataNodeに保存されます。彼らは、クライアントからの読み取りおよび書き込み要求を処理する責任があります。また、NameNodeの決定に基づいて、ブロックの作成、ブロックの削除、およびブロックの複製を行います。

HDFS-Apache Spark vsHadoop-Edureka

YARNは、リソースを割り当て、タスクをスケジュールすることにより、すべての処理アクティビティを実行します。 2つの主要なデーモンがあります。 ResourceManager そして NodeManager



ResourceManager

これはクラスターレベル(クラスターごとに1つ)のコンポーネントであり、マスターマシンで実行されます。リソースを管理し、YARN上で実行されるアプリケーションをスケジュールします。

NodeManager

これはノードレベルのコンポーネント(各ノードに1つ)であり、各スレーブマシンで実行されます。コンテナの管理と各コンテナのリソース使用率の監視を担当します。また、ノードの状態とログ管理を追跡します。 ResourceManagerと継続的に通信して、最新の状態を維持します。そのため、MapReduceを使用してHDFSで並列処理を実行できます。

Hadoopの詳細については、こちらをご覧ください。 ブログ。これで、Hadoopの紹介が完了したので、Sparkの紹介に移りましょう。

Apache SparkとHadoop:ApacheSparkの概要

Apache Sparkは、分散コンピューティング環境でのリアルタイムデータ分析のためのフレームワークです。メモリ内の計算を実行して、データ処理の速度を上げます。メモリ内の計算やその他の最適化を利用するため、大規模なデータの処理が高速になります。したがって、高い処理能力が必要です。

復元力のある分散データセット(RDD)は、Sparkの基本的なデータ構造です。これは、オブジェクトの不変の分散コレクションです。 RDDの各データセットは論理パーティションに分割され、クラスターのさまざまなノードで計算できます。 RDDには、ユーザー定義クラスを含む、任意のタイプのPython、Java、またはScalaオブジェクトを含めることができます。 Sparkコンポーネントにより、高速で信頼性が高くなります。 ApacheSparkには次のコンポーネントがあります。

  1. Spark Core – Spark Coreは、大規模な並列および分散データ処理のベースエンジンです。さらに、コアの上に構築された追加のライブラリにより、ストリーミング、SQL、機械学習のための多様なワークロードが可能になります。これは、メモリ管理と障害回復、クラスター上のジョブのスケジューリング、分散、監視、およびストレージシステムとの対話を担当します。
  2. Sparkストリーミング – Spark Streamingは、リアルタイムストリーミングデータを処理するために使用されるSparkのコンポーネントです。したがって、これはコアSparkAPIへの便利な追加です。ライブデータストリームの高スループットでフォールトトレラントなストリーム処理を可能にします
  3. Spark SQL :Spark SQLは、リレーショナル処理をSparkの関数型プログラミングAPIと統合するSparkの新しいモジュールです。 SQLまたはHiveクエリ言語を介したデータのクエリをサポートします。 RDBMSに精通している方にとって、Spark SQLは、従来のリレーショナルデータ処理の境界を拡張できる以前のツールから簡単に移行できます。
  4. GraphX :GraphXは、グラフおよびグラフ並列計算用のSparkAPIです。したがって、復元力のある分散プロパティグラフを使用してSparkRDDを拡張します。高レベルでは、GraphXは、復元力のある分散プロパティグラフ(各頂点とエッジにプロパティがアタッチされた有向マルチグラフ)を導入することにより、SparkRDDの抽象化を拡張します。
  5. MLlib (機械学習):MLlibはMachine LearningLibraryの略です。 Spark MLlibは、ApacheSparkで機械学習を実行するために使用されます。

ご覧のとおり、Sparkには、R、SQL、Python、Scala、Javaなどのサポートを含む高レベルのライブラリが含まれています。これらの標準ライブラリは、複雑なワークフローでのシームレスな統合を強化します。さらに、MLlib、GraphX、SQL +データフレーム、ストリーミングサービスなど、さまざまなサービスセットを統合して機能を向上させることもできます。

Apache Sparkの詳細については、こちらをご覧ください。 ブログ。これで、ApacheSparkとHadoopの準備が整いました。先に進み、さまざまなパラメーターでApache SparkとHadoopを比較して、それらの長所を理解しましょう。

Apache SparkとHadoop:比較するパラメーター

パフォーマンス

Sparkはメモリ内処理を備えているため、高速です。また、すべてがメモリに収まらないデータにディスクを使用することもできます。 Sparkのインメモリ処理は、ほぼリアルタイムの分析を提供します。これにより、Sparkはクレジットカード処理システム、機械学習、セキュリティ分析、モノのインターネットセンサーに適しています。

Hadoopは元々、データの種類を気にせずに複数のソースからデータを継続的に収集し、分散環境全体に保存するように設定されていました。 MapReduceはバッチ処理を使用します。 MapReduceは、リアルタイム処理用に構築されたことはありません。YARNの背後にある主なアイデアは、分散データセットに対する並列処理です。

2つを比較する際の問題は、処理の実行方法が異なることです。

使いやすさ

Sparkには、Scala、Java、Python、およびSparkSQL用のユーザーフレンドリーなAPIが付属しています。 Spark SQLはSQLと非常に似ているため、SQL開発者が習得しやすくなります。 Sparkは、開発者が他のアクションを照会および実行し、即座にフィードバックを得ることができるインタラクティブなシェルも提供します。

シェルを使用するか、Sqoop、Flumeなどの複数のツールと統合することで、Hadoopにデータを簡単に取り込むことができます。YARNは単なる処理フレームワークであり、HiveやPigなどの複数のツールと統合できます。 HIVEは、SQLのようなインターフェイスを使用して、分散環境で大規模なデータセットの読み取り、書き込み、および管理を実行するデータウェアハウジングコンポーネントです。あなたはこれを通過することができます Hadoopエコシステム Hadoopと統合できるさまざまなツールについて知るためのブログ。

費用

HadoopとSparkはどちらもApacheオープンソースプロジェクトであるため、ソフトウェアに費用はかかりません。コストはインフラストラクチャにのみ関連しています。どちらの製品も、TCOの低いコモディティハードウェアで実行できるように設計されています。

今、あなたはそれらがどのように異なっているのか疑問に思うかもしれません。 Hadoopのストレージと処理はディスクベースであり、Hadoopは標準量のメモリを使用します。そのため、Hadoopでは、より高速なディスクだけでなく、多くのディスクスペースが必要です。 Hadoopでは、ディスクI / Oを分散するために複数のシステムも必要です。

Apache Sparkのメモリ処理のため、大量のメモリが必要ですが、標準の速度とディスク量を処理できます。ディスクスペースは比較的安価な商品であり、Sparkは処理にディスクI / Oを使用しないため、代わりにメモリ内のすべてを実行するために大量のRAMが必要になります。したがって、Sparkシステムにはより多くのコストがかかります。

ただし、覚えておくべき重要なことの1つは、Sparkのテクノロジーによって必要なシステムの数が減ることです。必要なシステムは大幅に少なく、コストも高くなります。したがって、追加のRAM要件があっても、Sparkが計算単位あたりのコストを削減するポイントがあります。

情報処理

データ処理には、バッチ処理とストリーム処理の2種類があります。

バッチ処理とストリーム処理

バッチ処理 :バッチ処理はビッグデータの世界にとって非常に重要です。簡単に言うと、バッチ処理は、一定期間に収集された大量のデータを処理します。バッチ処理では、最初にデータが収集され、その後、処理された結果が後の段階で生成されます。

バッチ処理は、大規模で静的なデータセットを処理する効率的な方法です。通常、アーカイブされたデータセットのバッチ処理を実行します。たとえば、ある国の平均所得を計算したり、過去10年間のeコマースの変化を評価したりします。

ストリーム処理 :ストリーム処理は、ビッグデータの世界における現在の傾向です。時間の必要性は速度とリアルタイムの情報であり、それは蒸気処理が行うことです。バッチ処理では、企業は変化するビジネスニーズにリアルタイムで迅速に対応できません。ストリーム処理では、需要が急速に伸びています。

Apache Spark vs Hadoopに戻ると、YARNは基本的にバッチ処理フレームワークです。 YARNにジョブを送信すると、クラスターからデータが読み取られ、操作が実行され、結果がクラスターに書き戻されます。次に、更新されたデータを再度読み取り、次の操作を実行して、結果をクラスターに書き戻します。

Sparkは同様の操作を実行しますが、メモリ内処理を使用してステップを最適化します。 GraphXを使用すると、ユーザーはグラフおよびコレクションと同じデータを表示できます。ユーザーは、復元力のある分散データセット(RDD)を使用してグラフを変換および結合することもできます。

フォールトトレランス

HadoopとSparkはどちらもフォールトトレランスを提供しますが、どちらもアプローチが異なります。 HDFSとYARNの両方の場合、マスターデーモン(つまり、それぞれNameNodeとResourceManager)は、スレーブデーモン(つまり、それぞれDataNodeとNodeManager)のハートビートをチェックします。いずれかのスレーブデーモンに障害が発生した場合、マスターデーモンは保留中および進行中のすべての操作を別のスレーブに再スケジュールします。この方法は効果的ですが、単一の障害がある操作の完了時間も大幅に長くなる可能性があります。 Hadoopはコモディティハードウェアを使用するため、HDFSがフォールトトレランスを保証するもう1つの方法は、データを複製することです。

上で説明したように、RDDはApacheSparkの構成要素です。 RDDは、Sparkにフォールトトレランスを提供します。これらは、HDFS、HBase、共有ファイルシステムなどの外部ストレージシステムに存在する任意のデータセットを参照できます。それらは並行して操作することができます。

RDDは、操作間でデータセットをメモリに保持できるため、将来のアクションが10倍高速になります。 RDDが失われた場合、元の変換を使用して自動的に再計算されます。これがSparkがフォールトトレランスを提供する方法です。

セキュリティ

Hadoopは認証にKerberosをサポートしていますが、処理が困難です。それでも、認証用にLDAP(Lightweight Directory Access Protocol)などのサードパーティベンダーもサポートしています。また、暗号化も提供します。 HDFSは、従来のファイル権限とアクセス制御リスト(ACL)をサポートしています。 Hadoopは、クライアントがジョブ送信のための適切な権限を持っていることを保証するサービスレベル承認を提供します。

Sparkは現在、共有シークレットを介した認証をサポートしています。 SparkはHDFSと統合でき、HDFSACLとファイルレベルの権限を使用できます。 Sparkは、Kerberosの機能を利用してYARNで実行することもできます。

htmlとxmlの違い

Hadoopが最適なユースケース:

  • アーカイブデータの分析。 YARNを使用すると、大量のデータを並列処理できます。データの一部は、異なるDataNodeで並列かつ個別に処理され、各NodeManagerから結果を収集します。
  • 即時の結果が必要ない場合。 Hadoop MapReduceは、バッチ処理に適した経済的なソリューションです。

Sparkが最適なユースケース:

リアルタイムのビッグデータ分析:

リアルタイムデータ分析とは、毎秒数百万のイベントの速度で着信するリアルタイムイベントストリームによって生成されたデータを処理することを意味します。たとえば、Twitterデータです。 Sparkの強みは、分散処理とともにデータのストリーミングをサポートする能力にあります。これは、データのほぼリアルタイムの処理を提供する便利な組み合わせです。 MapReduceは、大量のデータに対してバッチ兼分散処理を実行するように設計されているため、このような利点がありません。リアルタイムデータは引き続きMapReduceで処理できますが、その速度はSparkの速度にほど遠いです。

Sparkは、MapReduceよりも100倍高速にデータを処理し、ディスクでは10倍高速であると主張しています。

グラフ処理:

ページランクなどのほとんどのグラフ処理アルゴリズムは、同じデータに対して複数の反復を実行します。これには、メッセージパッシングメカニズムが必要です。同じデータに対してこのような複数の反復を処理するには、MapReduceを明示的にプログラムする必要があります。大まかに言うと、次のように機能します。ディスクからデータを読み取り、特定の反復後に結果をHDFSに書き込み、次の反復のためにHDFSからデータを読み取ります。これは、ディスクへのデータの読み取りと書き込みを伴い、フォールトトレランスのためにクラスター全体で大量のI / O操作とデータ複製を伴うため、非常に非効率的です。また、MapReduceの各反復には非常に高い待ち時間があり、次の反復は前のジョブが完全に終了した後にのみ開始できます。

また、メッセージパッシングでは、特定のノードのスコアを評価するために、隣接ノードのスコアが必要です。これらの計算には、MapReduceに欠けているメカニズムである、ネイバーからのメッセージ(またはジョブの複数のステージにわたるデータ)が必要です。グラフ処理アルゴリズムの効率的なプラットフォームの必要性に対処するために、PregelやGraphLabなどのさまざまなグラフ処理ツールが設計されました。これらのツールは高速でスケーラブルですが、これらの複雑な多段階アルゴリズムの作成と後処理には効率的ではありません。

Apache Sparkの導入により、これらの問題は大幅に解決されました。 Sparkには、私たちの生活を簡素化するGraphXと呼ばれるグラフ計算ライブラリが含まれています。インメモリ計算と組み込みのグラフサポートにより、従来のMapReduceプログラムに比べてアルゴリズムのパフォーマンスが1〜2度向上します。 Sparkは、NettyとAkkaの組み合わせを使用して、エグゼキュータ全体にメッセージを配信します。 HadoopとSparkを使用したPageRankアルゴリズムのパフォーマンスを表すいくつかの統計を見てみましょう。

反復機械学習アルゴリズム:

ほとんどすべての機械学習アルゴリズムは繰り返し機能します。前に見たように、反復アルゴリズムには、MapReduce実装のI / Oボトルネックが含まれます。 MapReduceは、反復アルゴリズムには重すぎる粗粒度のタスク(タスクレベルの並列処理)を使用します。分散システムカーネルであるMesosの助けを借りてSparkを実行し、各反復後に中間データセットをキャッシュし、このキャッシュされたデータセットに対して複数の反復を実行します。これにより、I / Oが削減され、フォールトトレラントな方法でアルゴリズムをより高速に実行できます。

Sparkには、MLlibと呼ばれるスケーラブルな機械学習ライブラリが組み込まれています。このライブラリには、反復を活用し、MapReduceで時々使用されるワンパス近似よりも優れた結果が得られる高品質のアルゴリズムが含まれています。

  • 高速データ処理。 ご存知のように、Sparkはメモリ内処理を可能にします。その結果、SparkはRAM内のデータで最大100倍、ストレージ内のデータで最大10倍高速になります。
  • 反復処理。 SparkのRDDを使用すると、中間データセットをディスクに書き込む必要なしに、メモリ内で複数のマップ操作を実行できます。
  • ほぼリアルタイムの処理。 Sparkは、ビジネスに関する洞察を即座に提供する優れたツールです。これが、Sparkがクレジットカードのストリーミングシステムで使用されている理由です。

「ApacheSpark:Apache Hadoopのキラーまたは救世主?」

これに対する答え– HadoopMapReduceとApacheSparkは互いに競合していません。実際、それらは互いに非常によく補完し合っています。 Hadoopは、コモディティシステムによって制御される巨大なデータセットをもたらします。 Sparkは、Sparkを必要とするデータセットにリアルタイムのメモリ内処理を提供します。 Apache Sparkの機能、つまり高速処理、高度な分析、およびコモディティハードウェアでのHadoopの低コスト運用との複数の統合サポートを組み合わせると、最良の結果が得られます。 HadoopはApacheSparkの機能を補完します。 SparkはHadoopを完全に置き換えることはできませんが、良いニュースは、Sparkの需要が現在史上最高になっていることです。これは、Sparkを習得し、あなたの道に来るキャリアの機会を最大限に活用するのに適切な時期です。今すぐ始めましょう!

質問がありますか?コメント欄にご記入ください。早急にご連絡いたします。

Sparkを学び、Sparkのドメインでキャリアを構築して、RDD、Spark Streaming、SparkSQL、MLlib、GraphX、Scalaを実際のユースケースで使用して大規模なデータ処理を実行したい場合は、インタラクティブなライブオンラインをチェックしてください ここに、 それはあなたの学習期間を通してあなたを導くために24 * 7のサポートが付属しています。