1. Spark の基本的な概要

1. Sparkフレームワークの概要

Apache Spark は大規模なデータ処理のための統合分析エンジンです

Spark には Hadoop に比べて大きな利点がありますが、Spark が Hadoop を完全に置き換えることはできません

  • コンピューティング レベルでは、Spark は MR よりもパフォーマンスに大きな利点がありますが、Hive など、MR フレームワークに基づいたコンピューティング ツールはまだ多数あります。
  • Spark は計算のみを行いますが、Hadoop エコシステムには計算 (MR) だけでなく、ストレージ (HDFS) とリソース スケジューリング (YARN) も含まれています。HDFS と YARN は今でも多くのビッグ データ システムの中核アーキテクチャです。

スパークの機能

  • 高速: Spark はメモリ コンピューティングをサポートし、有向非巡回グラフ実行エンジンを使用して非巡回データ フローをサポートするため、メモリ内での計算速度は Hadoop の MR より 100 倍、ハードディスクでは 10 倍高速であると公式は主張しています。Spark はデータを処理するときに、中間処理結果をメモリに保存できます。Spark は、Spark プログラム内の複雑なタスクを完了できる非常に豊富なオペレーター (API) を提供します。
  • 使いやすさ: Spark は、Java、scala、python、R、SQL 言語を含む複数の言語をサポートしています。
  • 強力な汎用性: Spark は、Spark に基づいて、Spark SQL、Spark Streaming、MLib、Graphx などの複数のツール ライブラリを提供し、1 つのアプリケーションでシームレスに使用できます。
  • 複数の実行モード: Spark は、Hadoop や Mesos を含む複数の実行モードをサポートし、スタンドアロンの独立した実行モードもサポートし、クラウド K8 (Spark2.3 以降) 上でも実行できます。

Spark フレームワーク モジュール (理解)
Spark フレームワーク モジュール全体には、Spark Core、Spark SQL、Spark Streaming、Spark GraphxX、Spark MLlib が含まれます。後者の 4 つの機能はすべて Spark Core 上に構築されています。

Spark はデータ抽象化として RDD を使用し、Python、Java、Scala、および R 言語 API を提供し、大量のオフライン データのバッチ処理を実行するようにプログラムすることができます。SparkSQL は構造化データの処理モジュールを提供します
SparkSQL は SQL 言語でのデータ処理をサポートしており、SparkSQL 自体はオフライン コンピューティング シナリオを目的としています。同時に、SparkSQL に基づいて、Spark は SparkSQL Computingに基づいて
データのストリーミング コンピューティングを実行できる StructuredStreaming モジュールを提供し、分散コンピューティング モードでのグラフ コンピューティングに便利な多数のグラフ コンピューティング API を提供します。

Spark の動作モード (理解)
Spark は、ローカル モード (スタンドアロン)、スタンドアロン モード (クラスタ)、Hadoop YARN モード (クラスタ)、K8s モード (コンテナ クラスタ)、クラウド サービス モード (クラウド上で実行) など、さまざまな動作モードを提供します。優れたプラットフォーム)

Spark のアーキテクチャ上の役割 (理解)
Spark の実行役割
Spark は 4 つの役割で構成されます Spark 実行環境全体
マスター ロールは、YARN の ResourceManager に似て、クラスター全体のリソースを管理します ワーカー ロールは、 YARN のNodeManger
に似て、単一サーバーのリソースを管理します
Driver ロールは、実行中の単一の Spark タスクの作業を管理します。これは、
YARN の ApplicationMaster Executor ロールに似ています。単一のタスクの実行時には、ワーカーの束です。YARN コンテナーで実行される TASK に似ています。 。

2つのレベルに分かれています:
リソース管理レベル:
マネージャー: Spark はマスターの役割 ワーク
: Spark はワーカーの役割
タスク実行のレベルから:
タスクマネージャー: Spark はドライバーの役割
タスク実行者: Spark は役割執行者の

注: 通常の状況では、Executor が作業の役割を果たしますが、特別なシナリオ (ローカル モード) では、Driver が管理と作業を同時に行うことができます。

2. Sparkの動作環境

2.1 ローカル

基本原則の
本質: JVM プロセスを開始し (プロセスには複数のスレッドがあります)、タスクを実行します。 タスク
ローカル モードでは、Spark クラスター環境をシミュレートするスレッドの数を制限できます。つまり、Local[N] または Local[ ]
(N は使用を表します) N スレッドの数。指定しない場合、デフォルトは 1 です。Local[
] は、CPU のコアに応じたスレッド数の設定を表します。

役割分担:
リソース管理:
Master:ローカルプロセスそのもの
Worker:ローカルプロセスそのもの
実行時:
Driver:ローカルプロセスそのもの(特別なExecutorとしてカウント可能)
Executor:存在しない

注:時間の都合上、環境構築は行いません。

2.2 スタンドアロン

スタンドアロン モードは、Spark に付属するクラスター モードです。複数のプロセスを起動してクラスター環境をシミュレートするローカル モードとは異なります。スタンドアロン モードは、複数のクラスター間に Spark クラスターが構築される実際の環境です。このモードは、次の目的には使用できません。実際のビッグデータ処理用にマルチマシンクラスターを構築します。

StandAlone は完全な Spark オペレーティング環境であり、
マスターのロールがマスター プロセスに存在し、ワーカーのロールがワーカー プロセスに存在し、ドライバーの
ロールが実行時にマスター プロセスに存在し、エグゼキューターがワーカー プロセスで実行されます。

2.3 Spark プログラムの実行階層

モニタリング ページには異なるポートがあり、4040、8080、18080 ほど良くありません。

4040 は、現在のタスクのステータスを表示するために実行中のアプリケーションによって一時的にバインドされるポートです。4040 が占有されている場合、4041、4042 などに延期されます。4040 は一時的なポートです。プログラムの実行中、4040 はキャンセルされました

8080: デフォルトはスタンドアロンです。マスターの役割は WEB ポート上にあり、現在のマスターのステータスを表示します。

18080: デフォルトは履歴サーバーのポートです。各プログラムが完了すると、ポート 4040 はキャンセルされます。将来、特定のプログラムの実行状況を確認したい場合は、履歴サーバーを通じて確認できます。サーバーは長期間安定して動作し、いつでも使用できます。 録画された実行中のプログラムを表示します。

2.4 スタンドアロン HA

Spark スタンドアロン クラスターは、マスター/スレーブと Karma のクラスター モードです。ほとんどのマスター/スレーブ クラスターと同様に、マスターの単一障害点 (SPOF) の問題があります。

単一障害点を解決するための Spark の 2 つのソリューション:
1. ファイル システムに基づく単一ポイント リカバリ - 開発環境またはテスト環境でのみ使用可能
2. Zookeeper に基づくスタンバイ マスター - 運用環境で使用可能

スタンドアロン HA の原理は
、Zookeeper に基づいて状態を維持し、複数のマスター プロセスを 1 つをアクティブとして開き、もう 1 つをバックアップとして開きます。アクティブなプロセスがダウンすると、バックアップ マスターが引き継ぎます。

環境セットアップをスキップする

2.5 YARN でのスパーク

エンタープライズでは、既存の YARN クラスターの存在下で Spark StandAlone クラスターを別途用意する場合のリソース使用率は高くありません。エンタープライズでは、ほとんどのシナリオで Spark を YARN クラスターで実行します。

YARN 上の Spark の場合、Spark クラスターをデプロイする必要はありません。Spark クライアントとして機能するサーバーが見つかった限り、タスクを YARN クラスターに送信して実行できます。

YARN 上の Spark の本質.
マスター ロールは YARN の ResourceManager によって引き受けられます.
ワーカー ロールは YARN の NodeManager によって引き受けられます.
ドライバー ロールは YARN コンテナ内またはタスクを送信するクライアント プロセス内で実行されます.
エグゼキュータは提供されたコンテナ内で実行されますヤーンによって。

YARN 上の Spark に必要なもの
1. Yarn クラスターが必要です
2. Spark プログラムを YARN に送信できる Spark-submit などの Spark クライアント ツールが必要です
3. 送信する必要があるコード プログラム

DeployMode
Spark on YARN には 2 つの動作モードがあります。1 つはクラスター モード、もう 1 つはクライアント モードです。
これら 2 つのモードの違いは、ドライバーが実行される場所です。クラスター モードでは、ドライバーは YARN コンテナー内で実行され、 ApplicationMaster は同じコンテナ内にあります。内部では、クライアント モードでは、ドライバーはクライアント プロセスで実行されます。たとえば、ドライバーは Spark-submit プログラムのプロセスで実行されます。

クライアント モード: 学習とテストに使用し、出力結果はクライアント側に表示されます。
クラスター モード: 本番環境でこのモードを使用します。

3.パイスパーク

3.1 フレームワークとクラスライブラリ

クラスライブラリ:他人が書いたコードをインポートして利用可能 例えばPandas
フレームワーク:独立して動作し、構造体となるソフトウェア製品を提供 Sparkは独立したフレームワーク

Pandas は小規模なデータセットの処理に使用され
、Spark は大規模なデータセットの処理に使用されます。

3.2 PySpark とは

bin/pyspark は、Spark タスクを実行するための Python インタープリター実行環境を提供する単なるアプリケーションであり、
PySpark は、Python コードで使用できる Python ランタイム クラス ライブラリです。 import pyspark PySpark は、
Spark によって公式に提供される Python クラス ライブラリであり、ビルドされた-in complete Spark API では、PySpark クラス ライブラリを通じて Spark アプリケーションを作成し、Spark クラスターで実行できるように調整できます。

PySpark をインストールする

pip install pyspark
conda install pyspark

3.3 アプリケーションエントリ: SparkContext

Spark アプリケーション プログラムのエントリ ポイントは: SparkContext です。どのアプリケーションでも、最初に SparkContext オブジェクトを構築する必要があります。

conf = SparkConf().setAppName(appName).setMaster(master)
sc = SparkContext(conf=conf)

テスト

from pyspark import SparkConf, SparkContext
import os
os.environ["PYSPARK_PYTHON"] = r"D:\anaconda\envs\spark\Lib\site-packages\pyspark\python.exe"

if __name__ == '__main__':
    # 如果要拷给到服务器中运行,则删除.setMaster("local[*]")
    conf = SparkConf().setMaster("local[*]").setAppName("WordCountHelloWorld")
    # 通过SparkConf对象构建SparkContext对象
    sc = SparkContext(conf = conf)

    # 需求:wordcount单词计数,读取HDFS上的words.txt文件对其内部的单词统计出现的数量
    # 读取文件
    file_rrd = sc.textFile("hdfs://node1:8020/input/words.txt")

    # 将单词进行切割,得到一个存储全部单侧的集合对象
    words_rdd = file_rrd.flatMap(lambda line: line.split(" "))

    # 将单词转换为元组对象,key是单词,value是数字1
    words_with_one_rdd = words_rdd.map(lambda x: (x, 1))

    # 将元组的value 按key来分组,对所有的value执行聚合操作(相加)
    result_rdd = words_with_one_rdd.reduceByKey(lambda a, b: a + b)

    # 通过collect方法收集RDD的数据打印输出结果
    print(result_rdd.collect())

Spark 上の Python の実行原理
PySpark は、Spark の既存のランタイム アーキテクチャを破壊することなく、Spark アーキテクチャの外側に Python API の層をラップし、Py5j の助けを借りて Python と Java の交換を実現し、その後、Spark アプリケーションの作成を実現します。パイソン。

おすすめ

転載: blog.csdn.net/hutc_Alan/article/details/131640389