Apache Spark筆記04_Apache Spark 集群模式(Cluster Modes)
Spark Cluster Manager
- 與集群通信以獲取運行應用程序所需的資源
- 作為應用程序外部的服務運行,並抽象化集群管理器類型。
- 當應用程序運行時,Spark Context 創建任務並通知集群管理器所需的資源。
- 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
./sbin/start-worker.sh spark://theiadocker-chousml:7077 --cores 1 --memory 1g
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
留言
張貼留言