Apache Spark筆記04_Apache Spark 集群模式(Cluster Modes)

Spark Cluster Manager
  • 與集群通信以獲取運行應用程序所需的資源
  • 作為應用程序外部的服務運行,並抽象化集群管理器類型。
  • 當應用程序運行時,Spark Context 創建任務並通知集群管理器所需的資源。
Cluster Manager種類(Spark 內建支持幾種集群管理器):

  • Spark Standalone 包含了一個獨立的集群管理器。它最適合設置一個簡單的集群。
    Spark Standalone 隨 Spark 安裝一起打包,因此不需要額外的依賴來配置和部署。
    Spark Standalone 專門設計用來運行 Spark,通常是快速搭建並運行應用程序的最快方式。
    有兩個主要組件:Workers 和 Master。
    工作節點上運行的是 Workers。它們啟動一個或多個保留核心的執行器進程。
    必須有一個可在任何集群節點上運行的 Master 可用。
    它將工作節點連接到集群並通過心跳輪詢跟踪它們。如果 Master 與 Worker 在一起,不要為 Worker 預留節點的所有核心和內存。


  • Apache Hadoop YARN,或稱作另一資源協商器,是來自 Hadoop 項目的集群管理器。
    在大數據生態系統中很受歡迎,支持除 Spark 之外的許多其他框架。
    YARN 集群有自己的依賴性、設置和配置要求。
    因此部署它們比Spark Standalone 更複雜。


  • Apache Mesos 是一個通用的集群管理器,Spark 運行在其上可以獲得額外的好處。
    可以在 Spark 和其他大數據框架之間提供動態分割,以及在多個 Spark 實例之間提供可擴展的分割。
    然而,在 Apache Mesos 上運行 Spark 可能需要根據客製化配置要求,進行一些額外的設置。

  • Kubernetes 是一個用於運行容器化應用程序的開源系統。
    Kubernetes 集群運行容器化應用程序。這使得 Spark 應用程序更具可移植性,並有助於自動化部署,簡化依賴性管理,並根據需要擴展集群。





  • 本地模式在機器上本地作為單一進程運行 Spark 應用程序。
  • 該進程調用‘spark-submit’,並在主進程中以單獨線程運行執行器。
  • 本地模式不連接到任何集群或需要外部基本 Spark 安裝之外的配置。
  • 本地模式可以在筆記本電腦上運行。
  • 這對於測試或調試 Spark 應用程序很有用,例如,在集群上運行應用程序之前,測試一小部分數據以驗證正確性。
  • 然而,由於受限於單一進程,本地模式並不是為了最佳性能而設計的。



Start the Spark Master

wget https://archive.apache.org/dist/spark/spark-3.3.3/spark-3.3.3-bin-hadoop3.tgz && tar xf spark-3.3.3-bin-hadoop3.tgz && rm -rf spark-3.3.3-bin-hadoop3.tgz


運行以下命令來設置在環境中預先安裝的 JAVA_HOME 和剛下載的 SPARK_HOME。
export JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64
export SPARK_HOME=/home/project/spark-3.3.3-bin-hadoop3

運行以下命令以創建主伺服器的配置文件。
touch /home/project/spark-3.3.3-bin-hadoop3/conf/spark-defaults.conf


編輯 spark-defaults.conf 
將設置 master 必須分配給 worker 的 cores 和 memory。
spark.executor.memory 4g
spark.executor.cores 2

切換到 SPARK_HOME 目錄。
cd $SPARK_HOME

通過執行以下命令運行 Spark Master。
./sbin/start-master.sh


開啟Spark Master Web UI介面確認顯示,已成功啟動。

spark://theiadocker-chousml:7077
Start the worker



./sbin/start-worker.sh spark://theiadocker-chousml:7077 --cores 1 --memory 1g


產生python code做提交測試

touch submit.py

import findspark
findspark.init()
from pyspark import SparkContext, SparkConf
from pyspark.sql import SparkSession
from pyspark.sql.types import StructField, StructType, IntegerType, StringType
spark = SparkSession.builder \
    .master('spark://theiadocker-chousml:7077') \
    .config('spark.executor.cores', '1') \
    .config('spark.executor.memory', '512m') \
    .getOrCreate()
df = spark.createDataFrame(
    [
        (1, "foo"),
        (2, "bar"),
    ],
    StructType(
        [
            StructField("id", IntegerType(), False),
            StructField("txt", StringType(), False),
        ]
    ),
)
print(df.dtypes)
print("\nDataFrame:")
df.show()

export JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64
export SPARK_HOME=/home/project/spark-3.3.3-bin-hadoop3

pip3 install findspark

python3 submit.py

當再次刷新返回Spark Master介面就會看到出現的新Completed Applications





留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header

(2021年度)駕訓學科筆試準備題庫歸納分析_法規是非題