spark學習筆記--叢集執行Spark
在叢集上執行Spark
Spark執行架構
在分散式環境下,Spark 叢集採用的是主 / 從結構。
Spark 應用通過一個叫作叢集管理器(Cluster Manager)的外部服務在叢集中的機器上啟動。Spark 自帶的叢集管理器被稱為獨立叢集管理器。Spark 也能執行在 Hadoop YARN 和 Apache Mesos 這兩大開源叢集管理器上。
在一個 Spark 叢集中,有一個節點負責中央協調,排程各個分散式工作節點。這個中央協調節點被稱為驅動器(Driver)節點,與之對應的工作節點被稱為執行器(executor)節點。驅動器節點可以和大量的執行器節點進行通訊,它們也都作為獨立的 Java 程式執行。驅動器節點和所有的執行器節點一起被稱為一個 Spark 應用(application)。
執行機制
驅動器節點
把使用者程式轉為任務
Spark驅動器程式負責把使用者程式轉為多個物理執行的單元(稱為任務)
所有程式都遵循同樣的結構:輸出資料建立一系列RDD-> 轉化操作派生出新的RDD -> 行動操作手機或儲存結果RDD中的資料
有向無環圖:Spark隱式地建立一個有操作組成的邏輯上的無向無環圖,驅動程式執行可將其轉為物理執行計劃為執行器節點排程任務
每個執行器節點代表一個能夠處理任務和儲存RDD資料的程式,執行器程式啟動後,會向驅動器程式註冊自己
驅動程式會根據當前的節點集合,嘗試把所有任務基於資料所在位置分配給合適的執行器程式,同時執行器執行時,會跟蹤各快取資料的位置,進而排程以後的任務,儘量減少資料的網路傳輸
Spark程式資訊:在本地模式下,訪問 http://localhost:4040 就可以看到這個網頁了
執行器節點
Spark執行器節點是一種工作程式,版鎖著整個Spark應用的生命週期,負責執行任務,任務間相互獨立,主要有兩大作用:
- 執行器程式負責執行組成Spark應用的任務,並將結果返回給驅動器程式
- 執行器程式通過自身的塊管理器為使用者程式中要求快取的RDD提供記憶體式儲存
叢集管理器
Spark 依賴於叢集管理器來啟動執行器節點,而在某些特殊情況下,也依賴叢集管理器來啟動驅動器節點。
啟動程式的過程概述
- 使用者通過spark-submit指令碼提交應用
- spark-submit指令碼啟動驅動器程式,呼叫使用者定義的main()方法
- 驅動程式與叢集管理器通訊,申請資源以啟動執行器節點
- 叢集管理器為驅動器程式啟動執行器節點
- 驅動器程式執行使用者應用中的操作,根據程式中所定義的對RDD的轉化和行動操作,驅動器節點把工作以任務的形式傳送到執行器程式
- 任務在執行器程式中進行計算並儲存結果
- 如果驅動程式的main()方法退出,或者呼叫了SparkContext.stop(),驅動器程式會終止執行器程式,並且通過叢集管理器釋放資源
部署應用
spark_submit的一般格式
bin/spark-submit [options] <app jar | python file> [app options]
程式碼:
# 使用獨立叢集模式提交Java應用
$ ./bin/spark-submit \
--master spark://hostname:7077 \
--deploy-mode cluster \
--class com.databricks.examples.SparkExample \
--name "Example Program" \
--jars dep1.jar,dep2.jar,dep3.jar \
--total-executor-cores 300 \
--executor-memory 10g \
myApp.jar "options" "to your application" "go here"
# 使用YARN客戶端模式提交Python應用
$ export HADOP_CONF_DIR=/opt/hadoop/conf
$ ./bin/spark-submit \
--master yarn \
--py-files somelib-1.2.egg,otherlib-4.4.zip,other-file.py \
--deploy-mode client \
--name "Example Program" \
--queue exampleQueue \
--num-executors 40 \
--executor-memory 10g \
my_script.py "options" "to your application" "go here"
打包程式碼與依賴
通常使用者程式需要依賴第三方庫,Java 和 Scala 使用者也可以通過 spark-submit 的 --jars 標記提交獨立的 JAR 包依賴。
當你向 Spark 提交應用時,你必須把應用的整個依賴傳遞圖中的所有依賴都傳給叢集。你不僅要傳遞你直接依賴的庫,還要傳遞這些庫的依賴,以及它們的依賴的依賴,等等。
常規的做法是使用構建工具,生成單個大 JAR 包,包含應用的所有的傳遞依賴。這通常被稱為超級(uber)JAR 或者組合(assembly)JAR,大多數 Java 或 Scala 的構建工具都支援生成這樣的工件。
使用Maven構建用Java編寫的Spark應用
- Maven構建的Spark應用的pom.xml檔案
- 打包使用Maven構建的Spark應用
使用sbt構建的用Scala編寫的Spark應用
使用 sbt 0.13 的 Spark 應用的 build.sbt 檔案
在 sbt 工程構建中新增 assembly 外掛
打包使用 sbt 構建的 Spark 應用
當使用者應用與 Spark 本身依賴同一個庫時可能會發生依賴衝突,導致程式崩潰
配置資源量
執行器程式記憶體
spark-submit 的 --executor-memory 引數來配置此項
佔用核心總數的最大量
spark-submit 的 --total-executorcores 引數設定這個值,或者在你的 Spark 配置檔案中設定 spark.cores.max 的值。
相關文章
- spark學習筆記--Spark SQLSpark筆記SQL
- spark學習筆記-- Spark StreamingSpark筆記
- Spark叢集和任務執行Spark
- Spark學習筆記(三)-Spark StreamingSpark筆記
- spark學習筆記Spark筆記
- spark學習筆記--RDDSpark筆記
- spark學習筆記--Spark調優與除錯Spark筆記除錯
- Spark程式碼在叢集上執行過程理解Spark
- Spark學習(一)——執行模式與執行流程Spark模式
- 搭建spark on yarn 叢集SparkYarn
- Spark 叢集執行任務失敗的故障處理Spark
- spark學習筆記--RDD鍵對操作Spark筆記
- Spark3.0.0叢集搭建Spark
- spark筆記Spark筆記
- spark學習筆記--進階程式設計Spark筆記程式設計
- spark叢集的配置檔案Spark
- 【Spark】 Spark作業執行原理--獲取執行結果Spark
- spark 學習Spark
- Spark學習——記憶體管理Spark記憶體
- docker下,極速搭建spark叢集(含hdfs叢集)DockerSpark
- Spark學習進度-Spark環境搭建&Spark shellSpark
- spark學習筆記--資料讀取與儲存Spark筆記
- 部署spark2.2叢集(standalone模式)Spark模式
- 部署Spark2.2叢集(on Yarn模式)SparkYarn模式
- 大資料Spark叢集模式配置大資料Spark模式
- Spark簡明筆記Spark筆記
- Redis學習筆記(十八) 叢集(下)Redis筆記
- Redis學習筆記(十七) 叢集(上)Redis筆記
- ZooKeeper學習筆記一:叢集搭建筆記
- Redis學習筆記八:叢集模式Redis筆記模式
- Spark的執行原理Spark
- spark執行原理、模型Spark模型
- Spark3.0.1各種叢集模式搭建Spark模式
- Docker中提交任務到Spark叢集DockerSpark
- 基於 ZooKeeper 搭建 Spark 高可用叢集Spark
- Redis學習筆記七:主從叢集Redis筆記
- Nginx學習筆記(反向代理&搭建叢集)Nginx筆記
- Cris 的 Spark SQL 筆記SparkSQL筆記