[ビッグ データ処理フレームワーク] Spark ビッグ データ処理フレームワーク (その基礎となる原理、アーキテクチャ、プログラミング モデル、エコシステムを含む)


Spark ビッグ データ処理フレームワークは、効率的なインメモリ コンピューティングを提供し、弾力性のある分散クラスター上で実行できるオープンソースのビッグ データ処理フレームワークです。Spark フレームワークの利点は、コンピューティング リソースをより効率的に利用し、データ処理速度を向上させることができるため、ビッグ データ処理の分野で広く普及しています。

Spark フレームワークの基礎となる原則

Spark フレームワークの基礎となる原理は、Spark の中核概念の 1 つである RDD (Resilient Distributed Datasets) モデルに基づいています。RDD は抽象データ構造であり、分散データのコレクションとみなすことができます。RDDの要素を複数のノードに分散し、各ノードが自身に格納されたデータの一部を処理すると同時に、データの一部をメモリにキャッシュしてデータ処理の効率を向上させることができます。

RDDの特徴は、分割可能(Partition)、キャッシュ可能(Cacheable)、並列処理可能(Parallelizable)であることです。このうち、シャーダビリティとは、RDD 内のデータを複数の異なるフラグメントに分割し、各フラグメントを独立して処理できることを意味し、キャッシュ可能性とは、RDD 操作において、データの一部をメモリにキャッシュして処理効率を向上させることができることを意味し、並列処理を意味します。これは、RDD 内のデータを複数のノードで並行して処理できることを意味し、それによってデータ処理の速度と効率が向上します。

たとえば、100 万個の整数を含むデータセットがある場合、それを 10 個の RDD シャードに分割し、各シャードには 100,000 個の整数が含まれます。次に、これら 10 個のシャードを 10 個の異なるノードに割り当てて処理できます。各ノードは独自のシャードを並列処理し、処理結果をマスター ノードに送信して集約し、最終的にデータ セット全体の処理結果を取得します。

分散コンピューティングの信頼性を確保するために、RDD はログベースのデータ回復メカニズムを採用しています。RDD 内の特定のシャードに障害が発生した場合、ログ情報に基づいてデータ復旧を実行し、データの整合性と一貫性を確保できます。

つまり、RDD は Spark フレームワークにおける非常に重要な概念の 1 つであり、信頼性が高く、シャード可能、キャッシュ可能、並列化可能なデータ構造を提供し、Spark が大規模な分散コンピューティング タスクを効率的に実行できるようにします。

ここで、RDDの概念をより深く理解するためのストーリーを見てみましょう。大手電子商取引会社があるとします。顧客の購買嗜好や行動パターンを理解するために、すべての顧客のショッピング記録のデータ分析を行う必要があります。このデータセットは非常に大きく、何百万もの買い物記録が含まれているため、1 台のコンピューターで処理することはできません。

この問題を解決するために、同社は分散コンピューティング用の Spark フレームワークを使用しています。彼らは、ショッピング レコードを小さなチャンクに分割し、各チャンクには 1,000 レコードが含まれ、これらの小さなチャンクを別のコンピューティング ノードに割り当てて処理しました。各ノードは自身のデータ ブロックを並列処理し、処理結果をマスター ノードに送信して集約し、最終的にデータ セット全体の分析結果を取得します。

データ損失と計算エラーを回避するために、RDD はデータ シャーディングとフォールト トレランス メカニズムを採用しています。データシャーディングにより、データを複数の小さなチャンクに分割し、異なるノードで処理できます。フォールト トレランス メカニズムにより、ノードに障害が発生した場合に、対応するデータ リカバリが実行され、データの整合性と一貫性が保証されます。

この物語を通じて、RDDの概念と役割をより深く理解することができます。これは Spark フレームワークの中核概念の 1 つであり、分散コンピューティングに信頼性が高く、効率的で柔軟なデータ構造を提供します。

Spark フレームワーク アーキテクチャ

これには主に、Spark Core、Spark SQL、Spark Streaming、Spark MLlib、および Spark GraphX が含まれます。

スパークコア

Spark Core は、Apache Spark の最も重要なコンポーネントの 1 つであり、Spark フレームワーク全体の中核です。これは、Spark がメモリ内の大規模データを効率的に処理するための基礎となる、RDD (Resilient Distributed Datasets) データ構造と基本操作 API を提供します。

RDD は Spark の抽象概念であり、複数のノードで並列計算できる不変のデータ コレクションのセットです。RDD は、数値、文字列、オブジェクトなどを含むさまざまなデータ型をサポートします。Spark では、RDD は Spark アプリケーションの基本データ構造であり、すべてのデータ処理は RDD に基づいています。

Spark Core は、Map、Reduce、Filter、Join などの一連の基本操作 API を提供します。これらの操作を RDD 上で実行することで、データの処理、変換、分析を実現できます。さらに、Spark Core は、複雑なデータ分析タスクを容易にする、GroupByKey、ReduceByKey、Cogroup などの高度な操作 API も提供します。

ここで、ストーリーを通してスパーク コアの役割と重要性をより深く理解してみましょう。

オンライン ショッピング モールがあり、より良いレコメンデーション サービスを提供するために、ユーザーの購入行動や興味を理解するためにユーザーの購入履歴データを分析する必要があるとします。

当社のデータセットは非常に大きく、数十億件の購入レコードが含まれており、各レコードにはユーザー ID、製品 ID、購入時刻、購入数量などの情報が含まれています。リレーショナル データベースやファイル ストレージなどの従来のデータ処理方法を使用している場合、パフォーマンスのボトルネックやストレージの制限が発生する可能性があります。

現時点では、Spark Core を使用してこのデータセットを処理できます。まず、購入記録を小さなバッチに分割し、各バッチには数百万のレコードが含まれます。次に、各バッチを RDD に変換し、RDD 上の基本操作 API を使用してデータの変換と処理を行います。たとえば、Map オペレーションを使用して各購入レコードをタプル (ユーザー ID、製品 ID) に変換し、各ユーザーが購入した製品のリストをカウントできます。次に、ReduceByKey オペレーションを使用して、各ユーザーが購入したアイテムを集計し、各ユーザーが購入したアイテムの数と購入数を取得します。最後に、フィルター操作を使用して、購入数が最も多い上位 N 製品を、ユーザーが推奨する製品のリストとしてフィルターで除外できます。

Spark Coreを利用することで、メモリ上の大規模なデータを効率的に処理し、データ分析を高速化できます。同時に、Spark Core は分散コンピューティングもサポートしており、データを複数のノードに分散して並列コンピューティングを行うことができ、コンピューティング効率と処理能力をさらに向上させます。

つまり、Spark Core は Spark フレームワークのコア コンポーネントであり、データ処理と分析のための強力な基本サポートと効率的なコンピューティング機能を提供します。

スパークSQL

Spark SQL は、構造化データを操作する方法を提供する Apache Spark エコシステムのモジュールです。Spark SQL は、SQL 言語と DataFrame API を使用した操作をサポートしており、構造化データの処理プロセスを大幅に簡素化します。

SQLとはStructured Query Languageの略で、リレーショナルデータベースの管理・操作に使用される言語です。Spark SQL は、SQL クエリをサポートすることにより、データ処理に Spark を使用するユーザーが新しいプログラミング言語を学習しなくても、データを迅速に処理できるようにします。DataFrame API は、構造化データを操作するためのより柔軟でスケーラブルな方法を提供します。

たとえば、販売日、製品名、販売数量、販売金額などのフィールドを含む販売データを含むテーブルがあるとします。特定の日に最も売上が高かった製品名をクエリしたい場合は、Spark SQL を使用して簡単にクエリを実行できます。

SELECT product_name
FROM sales_data
WHERE sales_date = '2021-01-01'
ORDER BY sales_amount DESC
LIMIT 1

上記のクエリ ステートメントでは、SELECT ステートメントを使用して返されるデータ フィールドを指定し、FROM ステートメントを使用してクエリ対象のデータ テーブルを指定し、WHERE ステートメントを使用してフィルタ条件を指定し、ORDER BY ステートメントを使用してクエリを指定します。並べ替え方法を選択し、最後に LIMIT ステートメントを使用して、返される結果の数を制限します。

SQL クエリのサポートに加えて、Spark SQL は DataFrame API も提供します。DataFrame は、リレーショナル データベースのテーブルに似た、分散型の読み取り専用データ構造です。DataFrame API は、構造化データを迅速に処理できる、選択、フィルタリング、集計などの多くの一般的な操作を提供します。

たとえば、DataFrame API を使用して同様のクエリ操作を実装できます。

from pyspark.sql.functions import desc

sales_data.filter(sales_data.sales_date == '2021-01-01') \
    .groupBy('product_name') \
    .agg({
    
    'sales_amount': 'sum'}) \
    .orderBy(desc('sum(sales_amount)')) \
    .limit(1) \
    .select('product_name')

上記のコードは、DataFrame APIを使用して、特定の日に最も売上が多かった商品名を問い合わせる操作を実現しています。まずfilterメソッドで指定日の販売データを絞り込み、次にgroupByメソッドで商品名ごとにグループ化し、aggメソッドで各商品の売上合計を計算し、orderByメソッドで並べ替えます。最後に、limit メソッドを使用して返される結果の数を制限し、select メソッドを使用して返す必要があるフィールドを指定します。

Spark SQL と DataFrame API を通じて、構造化データをより便利に処理し、より効率的で柔軟なデータ分析と処理を実現できます。

ストーリー リンク: Xiao Ming はデータ アナリストであり、販売データを含むテーブルを分析する必要があります。テーブルには、販売日、製品名、販売数量、販売金額などのフィールドが含まれます。分析を容易にするために、彼はデータ処理に Spark SQL を使用することにしました。

まず、Xiao Ming は SQL クエリ ステートメントを使用して、特定の日に最も売上が高かった製品名をクエリします。Spark SQL のクエリ機能を使用すると、すぐに「Xiaomi 携帯電話」という結果が得られました。

次に、Xiao Ming は DataFrame API を使用して同じクエリ操作を実装しようとしました。まず、filter メソッドを使用してデータを日付でフィルターし、次に groupBy メソッドと agg メソッドを使用してグループ化と集計操作を実行し、最後に orderBy メソッドとlimit メソッドを使用して結果の並べ替えと数を制限します。このプロセスは SQL クエリよりも若干複雑ですが、Xiao Ming は DataFrame API を通じて同じ結果を取得することに成功しました。その後のデータ分析プロセスでも、Xiao Ming はデータ処理に Spark SQL と DataFrame API を使用し続け、この方法が以前よりも効率的で柔軟であることに気付きました。

スパークストリーミング

Spark Streaming は Spark エコシステムのコンポーネントであり、Spark がリアルタイム データ ストリームを処理できるようにするため、Spark をリアルタイム データの処理と分析に使用できるようになります。Spark Streaming は、リアルタイム データ ストリームを、Spark 上で実行できる一連の軽量バッチに分割して処理します。

Spark Streaming は、タイム ウィンドウ ベースの処理とイベント ベースの処理という 2 種類のデータ ストリーム処理をサポートします。タイム ウィンドウ ベースの処理では、一定期間にわたるデータ ストリームがバッチとして処理されますが、イベント ベースの処理では個々のイベントが処理されます。Spark Streaming は、ファイルやソケットなどのローカル データ ソースだけでなく、Kafka、Flume、Kinesis などのさまざまなデータ ソースを使用できます。

理解を深めるために例を挙げてみましょう。異常を特定するためにユーザーの行動をリアルタイムで分析する必要があるリアルタイム運用監視システムがあるとします。現時点では、Spark Streaming を使用してリアルタイムのユーザー行動データを処理し、リアルタイム分析を実行できます。たとえば、ユーザーが異常な動作をした場合、Spark Streaming で異常をできるだけ早く特定し、イベント リマインダーを通じて関係者に対処するよう通知できます。これにより、ユーザー データとシステム セキュリティをより適切に保護し、運用効率を向上させることができます。

スパークMLlib

Naive Bayes、Decision Tree、Support Vector Machineなどのいくつかの機械学習アルゴリズムを提供します。

機械学習は、データからモデルを自動的に学習する方法です。Spark MLlib は、Apache Spark プラットフォームに統合された機械学習ライブラリであり、一般的に使用される多くの機械学習アルゴリズムを提供し、開発者が大規模なデータセットで迅速にトレーニングおよび予測できるようにします。

Naive Bayes は、ベイズの定理と特徴間の独立性の仮定に基づいた、シンプルだが効果的な分類アルゴリズムです。Naive Bayes 分類器を使用すると、電子メールをスパムとして分類するか、スパムでないかを分類するなど、ドキュメントを分類できます。たとえば、電子商取引 Web サイトでは、Naive Bayes アルゴリズムを使用して製品レビューを分類し、レビューの分類結果に基づいて製品に適切なラベルを設定できます。

デシジョン ツリー アルゴリズムは、ツリー構造に基づく分類および予測アルゴリズムです。デシジョン ツリー アルゴリズムを使用すると、大量のデータからルールを抽出し、将来のイベントを分類または予測するために使用できます。たとえば、デシジョン ツリー アルゴリズムを使用して、人がサービスに料金を支払うかどうかを予測できます。広告シナリオでは、デシジョン ツリー アルゴリズムを使用して、ユーザーが広告をクリックするかどうかを予測し、それに応じて広告を配信するかどうかを決定できます。

サポート ベクター マシン アルゴリズムは、データを高次元空間にマッピングし、分離超平面を使用してデータを分離するバイナリ分類アルゴリズムです。サポート ベクター マシン アルゴリズムは、画像認識、テキスト分類、手書き数字認識などの分野で一般的に使用されています。食品認識シナリオでは、サポート ベクター マシン アルゴリズムを使用して画像内の食品を識別し、それに応じて画像にラベルを付けることができます。

全体として、Spark MLlib は、大規模なデータセットに対する分類、回帰、クラスタリング、協調フィルタリング、およびその他のタスクに使用できる多くの強力な機械学習アルゴリズムを提供します。これらのアルゴリズムは、分散環境で効率的に実行できるように最適化されています。

スパークグラフX

Spark GraphX は Spark エコシステムの重要な部分であり、大規模なグラフ データの処理に使用できるグラフベースの分散並列コンピューティング フレームワークを提供します。GraphX の主な機能は次のとおりです。

  • RDD ベース: GraphX の基礎は、分散グラフィックス処理をサポートできる RDD (Resilient Distributed Dataset) です。GraphXはグラフデータをRDDコレクションに変換することで処理を完了するため、Sparkの分散コンピューティング機能を最大限に活用し、コンピューティング効率を向上させることができます。
  • 頂点とエッジの属性のサポート: GraphX は、グラフの計算と分析に使用できる頂点とエッジへの属性の追加をサポートしています。たとえば、属性を使用して頂点の属性 (ユーザー名、年齢、性別など) を表すことができます。 、など)、属性を使用してエッジの重み、タイプなどを表すことができます。
  • 複数のグラフ アルゴリズムのサポート: GraphX は、PageRank、Triangle Counting、Connected Components など、一般的に使用される多くのグラフ アルゴリズムを提供します。これらのアルゴリズムを使用してグラフの計算と分析を実行し、有用な情報を抽出できます。

GraphX のアプリケーションをより深く理解するために、ストーリーを見てみましょう。

ある日、ソーシャル ネットワーク アナリストがソーシャル プラットフォームから、プラットフォーム上のユーザー関係を分析してほしいという依頼を受けました。プラットフォームはすべてのユーザー間の関係を維持し、グラフ データ構造を使用してこれらの関係を保存します。

アナリストは、ソーシャル ネットワーク分析にはグラフ処理ライブラリが必要であることを認識していました。そこで彼は、Spark GraphX を使用してデータを処理することにしました。まず、社会的関係データを Spark にロードし、それを GraphX のグラフ データ構造に変換します。その後、GraphX が提供するアルゴリズムを使用して分析を実行できます。

まず、PageRank アルゴリズムを使用して、すべてのユーザーの影響力を計算します。PageRank アルゴリズムは、グラフ内のノードの重要性を評価するために使用できる古典的なグラフ アルゴリズムです。各ノードのPageRank値を計算することで、ソーシャルネットワークにおける各ユーザーの影響力を得ることができます。アナリストは、GraphX が提供する PageRank アルゴリズムを使用して、各ユーザーの PageRank 値を計算し、データベースに保存します。

次に、三角計数アルゴリズムを使用して、ソーシャル ネットワーク内の三角形の数を数えました。三角形は、相互にフォローしている 3 人のユーザー間の関係を表します。三角形の数を数えることで、ソーシャル ネットワークの親密さと安定性を評価できます。アナリストは、GraphX が提供する Triangle Counting アルゴリズムを使用して三角形の数を数え、データベースに保存します。

最後に、彼は Connected Components アルゴリズムを使用してソーシャル ネットワーク内のグループを見つけました。接続コンポーネント アルゴリズムは、接続された部分を見つけるために使用されるグラフ アルゴリズムです。グループ内のユーザーを相互に接続することで、ソーシャル ネットワーク内のグループの構成をよりよく理解できます。アナリストは、GraphX が提供する Connected Components アルゴリズムを使用して、ソーシャル ネットワーク内のグループを検索し、データベースに保存します。

Spark GraphX を使用して、アナリストはソーシャル ネットワーク分析を正常に完了し、ユーザー関係に関する貴重な情報をクライアントに提供しました。

Spark フレームワークで採用されているプログラミング モデル

Spark フレームワークは、大規模データ処理用のオープンソース プラットフォームであり、メモリベースのコンピューティング モデルを採用しており、高速な処理速度、強力な耐障害性、および優れたスケーラビリティという利点を備えています。Spark フレームワークでは、関数型プログラミング モデルは重要な機能の 1 つです。

関数型プログラミングは関数ベースのプログラミング パラダイムであり、その主な特徴は不変性、副作用がないこと、高階関数です。Spark フレームワークでは、関数型プログラミング モデルは主に、マップ、フィルター、リデュース、その他の関数などのいくつかの操作関数を使用し、これらの関数はデータ セットに対してさまざまな変換や操作を実行して、データ処理の目標を達成できます。

Spark フレームワークで採用されているプログラミング モデル、つまり関数型プログラミング モデルをより深く理解するために、ストーリーを使用してみましょう。各従業員の名前、年齢、給与を含む会社の従業員データを処理するとします。まず、このデータを処理する前に Spark に読み取る必要があります。

Spark フレームワークでは、map 関数を使用してデータを変換できます。たとえば、全従業員の名前を大文字に変換することで、データをより標準化できます。コードは次のようになります。

val employees = sc.textFile("employees.txt")
val upperCaseNames = employees.map(_.split(",")).map(x => (x(0).toUpperCase(), x(1), x(2)))

上記のコードでは、textFile 関数を使用してemployees.txt ファイル内のデータを Spark に読み取り、次に 2 つのマップ関数を使用してデータを変換し、最後に新しいデータセット upperCaseNames を取得します。大文字に変換されます。

マップ関数に加えて、Spark フレームワークはフィルター関数もサポートしており、データ セット内のデータをフィルター処理するために使用できます。たとえば、給与が 5000 を超える従業員のみを選択して処理できます。コードは次のようになります。

val highSalaryEmployees = employees.map(_.split(",")).filter(x => x(2).toDouble > 5000)

上記のコードでは、フィルター関数を使用してデータ セットをフィルター処理し、給与が 5,000 を超える従業員のみを処理対象に選択しました。

最後に、reduce 関数を使用してデータを集計することもでき、たとえば、全従業員の平均給与を計算することができます。コードは次のようになります。

val totalSalary = employees.map(_.split(",")).map(x => x(2).toDouble).reduce((x, y) => x + y)
val avgSalary = totalSalary / employees.count()

上記のコードでは、reduce 関数を使用して全従業員の給与を合計して給与総額を取得し、それを従業員の総数で割って平均給与を計算します。

以上の話を通じて、皆さんは Spark フレームワークで採用されている関数型プログラミング モデルについての理解が深まったと思います。関数型プログラミングはコードを簡潔かつ理解しやすくし、コードの可読性や保守性も向上させることができるため、データ処理の分野では欠かせないプログラミングモデルです。

スパークエコシステム

Spark エコシステムは、Spark フレームワークで相互にサポートする一連の外部コンポーネントを指し、データ処理、ストレージ、送信などのテクノロジーをカバーし、完全なビッグ データ エコシステムを形成します。以下は、Spark エコシステムのコンポーネントの一部です。

  1. Hadoop: Hadoop は、大規模なデータの処理に使用できるオープンソースの分散処理フレームワークです。Spark は Hadoop と連携してデータをより適切に処理できます。たとえば、Spark は、Hadoop をデータ ストアとして使用して、Hadoop HDFS 上で実行できます。

  2. Hive: Hive は、大規模なデータのクエリと分析に使用できる Hadoop ベースのデータ ウェアハウス ツールです。Spark は Hive と連携してデータをより適切に処理できます。たとえば、Spark はクエリと分析に Hive のメタデータ情報を使用できます。

  3. Pig: Pig は大規模データを処理するための高レベルのプラットフォームであり、データ分析を容易にするために Pig Latin と呼ばれる言語を使用しています。Spark は Pig と連携してデータをより適切に処理できます。たとえば、Spark はデータ処理に Pig Latin 言語を使用できます。

  4. Kafka: Kafka は、リアルタイム データ ストリームの処理に使用できるオープン ソースの分散メッセージ キュー システムです。Spark は Kafka と連携して、リアルタイム データをより適切に処理できます。たとえば、Spark は Kafka を使用してリアルタイム データの読み取りと書き込みを行うことができます。

上記の外部コンポーネントを組み合わせることで、完全なビッグデータ エコシステムを形成でき、データの収集、保存、処理、分析などのプロセスがより効率的かつ便利になります。

たとえば、企業が Web サイトのログ データを分析したい場合、Spark をデータ処理フレームワークとして使用し、ログ データを Hadoop HDFS に保存し、Hive をデータ ウェアハウス ツールとして使用してデータのクエリと分析を行うことができます。データをリアルタイムで処理する必要がある場合は、Kafka をメッセージ キュー システムとして使用し、Spark でリアルタイムでデータの読み取りと書き込みを行うことができます。この組み合わせにより、データ処理がより効率的になり、計算結果がより正確になります。

Spark フレームワークは、開発者がビッグ データをより効率的に処理するのに役立つ多くの拡張ライブラリとツールキットを提供します。以下は、Spark フレームワークによって提供されるいくつかの拡張ライブラリとツールキットの紹介です。

  1. SparkSQL API: SparkSQL は、Spark フレームワークにおける構造化データ処理用の API であり、SQL クエリと DataFrame API を組み合わせることができ、SQL と DataFrame の両方の操作をサポートするため、ユーザーのデータ処理が容易になります。SparkSQL は、Hive、JSON、Parquet などの複数のデータ ソースをサポートし、CSV、JSON などの複数のファイル形式をサポートします。

  2. SparkR: SparkR は、Spark フレームワークによって提供される R 言語用の API であり、R 言語ユーザーがビッグ データ処理に Spark フレームワークを使用できるようにします。SparkR は R 言語のすべてのデータ構造と関数をサポートしており、Spark の API を呼び出すことで大規模なデータ処理と分析を実行できます。

  3. GraphFrames: GraphFrames は、Spark フレームワークによって提供されるグラフ処理用のライブラリであり、ソーシャル ネットワーク、物流ネットワークなどの複雑なグラフ データの処理に使用できます。GraphFrames は、トラバーサル、結合、集計などを含む、さまざまなグラフ アルゴリズムと操作をサポートします。

  4. DataFrames: DataFrames は、分散データ フレームを処理するための Spark フレームワークの API であり、複数のデータ ソースとデータ形式をサポートし、SQL クエリ、DataFrame API などを通じてデータ処理と分析を実行できます。DataFrame は、集計、フィルタリング、並べ替えなどのさまざまなデータ処理操作をサポートします。

  5. MLlib パイプライン API: MLlib は、Spark フレームワークの機械学習用ライブラリであり、分類、クラスタリング、回帰、推奨システムなどのさまざまな機械学習アルゴリズムとツールを提供します。MLlib Pipeline API は、複数の機械学習ステップをパイプラインに結合して、機械学習モデルの迅速な構築とデプロイを実現できる機械学習プロセス管理用の API です。

ストーリー リンク: Xiao Ming は、大量のデータを処理して分析する必要があるデータ アナリストです。データの量が非常に多かったので、従来のデータ処理方法ではニーズを満たすことができなかったため、Spark フレームワークの学習を開始しました。学習プロセス中に、彼は、Spark フレームワークが、ビッグ データをより便利に処理するのに役立つ、SparkSQL API、SparkR、GraphFrames、DataFrames、MLlib Pipeline API などの多くの拡張ライブラリとツールキットを提供していることを発見しました。これらの拡張ライブラリとツールキットを使用することで、Xiao Ming はデータ分析タスクを完了し、データ処理能力を向上させることができました。

一般に、Spark フレームワークは強力なビッグ データ処理フレームワークであり、その基礎となる原理、アーキテクチャ、プログラミング モデル、エコシステムは非常に完全です。ビッグ データ処理の分野では、Spark フレームワークの使用が増えています。

Guess you like

Origin blog.csdn.net/java_wxid/article/details/131588800