Hadoop と Spark は、どちらも Apache Software Foundation によって開発され、ビッグ データ アーキテクチャ用に広く使用されているオープンソース フレームワークです。
私たちは現在、まさにビッグデータ現象の中心におり、企業はもはや意思決定に対するデータの影響を無視することはできません。
ビッグデータとみなされるデータは、速度、スピード、多様性という 3 つの基準を満たしていることを思い出してください。ただし、従来のシステムやテクノロジーではビッグデータを処理できません。
この問題を克服することを目的として、Apache Software Foundation は最もよく使用されているソリューション、つまり Hadoop と Spark を提案しました。
ただし、ビッグ データ処理に慣れていない人は、これら 2 つのテクノロジーを理解するのが困難です。すべての疑問を取り除くために、この記事では、Hadoop と Spark の主な違いと、どのような場合にどちらかを選択するか、または併用する必要があるかを学びます。
ハドゥープ
Hadoop は、ビッグ データを処理するためのエコシステムを形成する複数のモジュールで構成されるソフトウェア ユーティリティです。 Hadoopがこの処理に使用する原理は、データを分散して並列処理することです。
Hadoop の分散ストレージ システム セットアップは、複数の通常のコンピュータで構成され、複数のノードからなるクラスタを形成します。このシステムを採用することで、Hadoop は複数のタスクを同時に、迅速かつ効率的に実行することで、利用可能な膨大な量のデータを効率的に処理できるようになります。
Hadoop で処理されるデータはさまざまな形式を取ることができます。これらは Excel テーブルまたは従来の DBMS のテーブルのように構造化できます。このデータは、JSON ファイルや XML ファイルなどの半構造化された方法で提示することもできます。 Hadoop は、画像、ビデオ、オーディオ ファイルなどの非構造化データもサポートします。
メインコンポーネント

Hadoop の主なコンポーネントは次のとおりです。
- HDFS または Hadoop 分散ファイル システムは、分散データ ストレージを実行するために Hadoop によって使用されるシステムです。これは、クラスターのメタデータを含むマスター ノードと、データ自体が保存される複数のスレーブ ノードで構成されます。
- MapReduce は 、この分散データを処理するために使用されるアルゴリズム モデルです。この設計パターンは、Java、R、Scala、Go、JavaScript、Python などの複数のプログラミング言語を使用して実装できます。各ノード内で並行して実行されます。
- Hadoop Common : いくつかのユーティリティとライブラリが他の Hadoop コンポーネントをサポートします。
- YARN は 、Hadoop クラスター上のリソースと各ノードによって実行されるワークロードを管理するためのオーケストレーション ツールです。このフレームワークのバージョン 2.0 以降では、MapReduce の実装もサポートされています。
アパッチスパーク

Apache Spark は、コンピュータ科学者の マテイ ザハリア氏 が 2009 年に博士号の一環として最初に作成したオープンソース フレームワークです。その後、彼は 2010 年に Apache Software Foundation に参加しました。
Spark は、複数のノードに分散された計算およびデータ処理エンジンです。 Spark の主な特徴は、メモリ内処理を実行することです。つまり、RAM を使用して、クラスター内に分散された大きなデータをキャッシュして処理します。これにより、パフォーマンスが向上し、処理速度が大幅に向上します。
Spark は、バッチ処理、リアルストリーム処理、機械学習、グラフ計算などのいくつかのタスクをサポートします。 HDFS、RDBMS、さらには NoSQL データベースなど、複数のシステムからのデータを処理することもできます。 Spark の実装は、Scala や Python などのいくつかの言語で行うことができます。
メインコンポーネント
Apache Spark の主なコンポーネントは次のとおりです。

- Spark Core は 、プラットフォーム全体の一般的なエンジンです。タスクの計画と配布、入出力操作の調整、または故障からの回復を担当します。
- Spark SQL は、構造化データおよび半構造化データをサポートする RDD スキーマを提供するコンポーネントです。特に、SQL を実行するか SQL エンジンへのアクセスを提供することにより、構造化型データの収集と処理を最適化することができます。
- ストリーミングデータ分析を可能にする Spark Streaming 。 Spark Streaming は、Flume、Kinesis、Kafka などのさまざまなソースからのデータをサポートします。
- MLib 、機械学習用の Apache Spark の組み込みライブラリ。これは、いくつかの機械学習アルゴリズムと、機械学習パイプラインを作成するためのいくつかのツールを提供します。
- GraphX は、 分散アーキテクチャ内でモデリング、計算、グラフ分析を実行するための一連の API を組み合わせています。
Hadoop と Spark: 違い

Spark は、ビッグ データの計算およびデータ処理エンジンです。つまり、理論的には Hadoop MapReduce に似ており、メモリ内で実行されるためはるかに高速です。では、Hadoop と Spark の違いは何でしょうか?みてみましょう:
- Spark は、特にメモリ内処理のおかげではるかに効率的ですが、Hadoop はバッチで処理されます。
- Spark はパフォーマンスを維持するために大量の RAM を必要とするため、コストの点ではるかに高価です。一方、Hadoop はデータ処理のために通常のマシンのみに依存します。
- Hadoop はバッチ処理に適していますが、Spark はストリーミング データまたは非構造化データ ストリームを扱う場合に最適です。
- Hadoop は継続的にデータをレプリケートするため耐障害性が高くなりますが、Spark はそれ自体が HDFS に依存する復元力のある分散データセット (RDD) を使用します。
- Hadoop は、既存のマシンでは不十分な場合に別のマシンを追加するだけで済むため、よりスケーラブルです。 Spark は、HDFS などの他のフレームワークのシステムに依存して拡張します。
要素 | ハドゥープ | スパーク |
処理 | バッチ処理 | インメモリ処理 |
ファイル管理 | HDFS | HadoopのHDFSを使用 |
スピード | 速い | 10 ~ 1000 倍高速 |
言語サポート | Java、Python、Scala、R、Go、JavaScript | Java、Python、Scala、R |
フォールトトレランス | より寛容になる | 耐性が低い |
料金 | より安価な | もっと高い |
スケーラビリティ | よりスケーラブルな | スケーラビリティが低い |
Hadoop が適しているのは
処理速度が重要でない場合、Hadoop は優れたソリューションです。たとえば、データ処理を夜間に実行できる場合は、Hadoop の MapReduce の使用を検討するのが合理的です。
Hadoop の HDFS は組織にデータを保存および処理するためのより良い方法を提供するため、Hadoop を使用すると、処理が比較的難しいデータ ウェアハウスから大規模なデータセットをオフロードできます。
スパークは次のような用途に適しています。
Spark の復元力のある分散データセット (RDD) により、複数のメモリ内マップ操作が可能になりますが、Hadoop MapReduce は中間結果をディスクに書き込む必要があるため、リアルタイムの対話型データ分析を行う場合には Spark が推奨されるオプションになります。
Spark のメモリ内処理と Cassandra や MongoDB などの分散データベースのサポートは、データをソース データベースから取得して別のターゲット システムに送信する際の、データの移行と挿入のための優れたソリューションです。
Hadoop と Spark を併用する

多くの場合、Hadoop と Spark のどちらかを選択する必要があります。ただし、これら 2 つのフレームワークは非常にうまく共存して連携できるため、ほとんどの場合、選択する必要はありません。実際、Spark を開発した 主な理由は、 Hadoop を置き換えるのではなく、Hadoop を強化することでした。
前のセクションで説明したように、Spark は HDFS ストレージ システムを使用して Hadoop と統合できます。実際、どちらも分散環境内でより高速なデータ処理を実行します。同様に、Hadoop にデータを割り当て、Spark を使用してデータを処理したり、Hadoop MapReduce 内でジョブを実行したりできます。
結論
Hadoop か Spark か?フレームワークを選択する前に、アーキテクチャを考慮する必要があり、それを構成するテクノロジが、達成したい目的と一致している必要があります。さらに、Spark は Hadoop エコシステムと完全な互換性があり、Hadoop 分散ファイル システムおよび Apache Hive とシームレスに動作します。
いくつかのビッグ データ ツールを検討することもできます。