note
文章目錄
- note
- 一、Spark的常用啟動方式
- 1.1 local本地模式
- 1.2 Standalone模式
- 1.3 Spark on Yarn模式
- 二、spark-submit 詳細參數說明
- --master
- --deploy-mode
- --class
- --name
- --jars
- --packages
- --exclude-packages
- --repositories
- --py-files
- --files
- --conf PROP=VALUE
- --properties-file
- --driver-memory
- --driver-java-options
- --driver-library-path
- --driver-class-path
- --driver-cores
- --executor-memory
- --total-executor-cores
- --num-executors
- --executor-core
- 參數設定
- 三、子產品依賴問題
- Reference
一、Spark的常用啟動方式
1.1 local本地模式
spark單機運作,開發測試,可以
local[N]
來設定使用N個線程,每個線程有一個core。spark-submit預設是
spark-submit --master local
,spark-shell預設是spark-shell --master local。
注:
(1)隻需要把Spark的安裝包解壓後,改一些常用的配置即可使用,而不用啟動Spark的Master、Worker守護程序,也不用啟動Hadoop的各服務(除非需要用到HDFS)。
(2)SparkSubmit程序既是客戶送出任務的Client程序、又是Spark的driver程式、還充當着Spark執行Task的Executor角色。
1.2 Standalone模式
1.3 Spark on Yarn模式
Yarn 模式是把資源統一交給 Yarn 叢集來管理,其優點在于實作了 application 的多樣性,如 MapReduce 程式、HBase 叢集、Storm 叢集、spark 叢集等;
Yarn 模式有兩種運作模式:client 和 cluster,差別在于
- client 模式的 Driver 運作在 client 端,而 client 端可能是 spark 叢集内節點,也可以不是,一般來說不是叢集内節點,這就需要在用戶端節點上安裝程式運作所需環境,以支援 spark 的正常執行;
- cluster 模式的 Driver 運作在 spark 叢集中的某個 NodeManager 上,而且不确定到底是哪個 NodeManager 上,這由 spark 的排程政策決定,
如果知道了在哪個節點,在該節點上安裝程式運作所需環境即可,
但是事實是哪個節點都有可能,這意味着需要在所有節點上安裝程式運作所需環境,顯然這不是個好辦法;
随着 application 的增加,需要不斷安裝新的包,而且不同 application 可能存在版本問題,這對于 client 模式來說或許還可以接受,但 cluster 模式肯定不行的,如果叢集很大,裝環境會很麻煩。
一句通俗的話描述 Pyspark On Yarn:Driver 從本地電腦擷取環境後分發給 Container 來執行。
二、spark-submit 詳細參數說明
–master
master 的位址,送出任務到哪裡執行,例如 spark://host:port, yarn, local
MASTER_URL:設定叢集的主URL,用于決定任務送出到何處執行。
常見的選項有
local:送出到本地伺服器執行,并配置設定單個線程
local[k]:送出到本地伺服器執行,并配置設定k個線程
spark://HOST:PORT:送出到standalone模式部署的spark叢集中,并指定主節點的IP與端口
mesos://HOST:PORT:送出到mesos模式部署的叢集中,并指定主節點的IP與端口
yarn:送出到yarn模式部署的叢集中
–deploy-mode
在本地 (client) 啟動 driver 或在 cluster 上啟動,預設是 client
DEPLOY_MODE:設定driver啟動的位置,可選項如下,預設為client
client:在用戶端上啟動driver,這樣邏輯運算在client上執行,任務執行在cluster上
cluster:邏輯運算與任務執行均在cluster上,cluster模式暫時不支援于Mesos叢集或Python應用程式
–class
應用程式的主類,僅針對 java 或 scala 應用
CLASS_NAME:指定應用程式的類入口,即主類,僅針對java、scala程式,不作用于python程式
–name
應用程式的名稱
–jars
用逗号分隔的本地 jar 包,設定後,這些 jar 将包含在 driver 和 executor 的 classpath 下
–packages
包含在driver 和executor 的 classpath 中的 jar 的 maven 坐标
–exclude-packages
為了避免沖突 ,指定的參數–package中不包含的jars包
–repositories
遠端 repository
附加的遠端資源庫(包含jars包)等,可以通過maven坐标進行搜尋
–py-files
PY_FILES:逗号隔開的的.zip、.egg、.py檔案,這些檔案會放置在PYTHONPATH下,該參數僅針對python應用程式
–files
FILES:逗号隔開的檔案清單,這些檔案将存放于每一個工作節點程序目錄下
–conf PROP=VALUE
指定spark配置屬性的值,格式為PROP=VALUE, 例如 --conf spark.executor.extraJavaOptinotallow=“-XX:MaxPermSize=256m”
–properties-file
指定需要額外加載的配置檔案,用逗号分隔,如果不指定,預設為 conf/spark-defaults.conf
–driver-memory
Driver記憶體,預設 1G
–driver-java-options
傳給 driver 的額外的 Java 選項
–driver-library-path
傳給 driver 的額外的庫路徑
–driver-class-path
傳給 driver 的額外的類路徑,用–jars 添加的jar包會自動包含在類路徑裡
–driver-cores
Driver 的核數,預設是1。在 yarn 或者 standalone 下使用
–executor-memory
每個 executor 的記憶體,預設是1G
–total-executor-cores
所有 executor 總共的核數。僅僅在 mesos 或者 standalone 下使用
–num-executors
啟動的 executor 數量。預設為2。在 yarn 下使用
–executor-core
每個 executor 的核數。在yarn或者standalone下使用
參數設定
當–master參數設定為Standalone,–deploy-mode參數設定為cluster時,如下選項可以設定:
–driver-cores NUM:driver使用的核心數,預設為1
當–master參數設定為Standalone或者Mesos,–deploy-mode參數設定為cluster時,如下選項可以設定:
–supervise:如果設定了該參數,driver失敗是會重新開機
–kill SUBMISSION_ID:如果設定了該參數,則會殺死指定SUBMISSION_ID的driver程序
–status SUBMISSION_ID:如果設定了該參數,則請求傳回指定SUBMISSION_ID的driver的狀态
當–master參數設定為Standalone或者Mesos時,如下選項可以設定:
–total-executor-cores NUM:設定叢集中所有工作節點上executor使用的核心總數
當–master參數設定為Standalone或者YARN時,如下選項可以設定:
–executor-cores NUM:每個executor使用的核數
當–master參數設定為YARN時,如下選項可以設定:
–driver-cores NUM :當–deploy-mode為cluster時,driver使用的核心數,預設為1
–queue QUEUE_NAME :将任務送出給哪個YARN隊列,預設為YARN的預設隊列
–num-executors NUM:設定啟動的executor數量,預設為2
–archives ARCHIVES :被每個executor提取到工作目錄的檔案清單,用逗号隔開
三、子產品依賴問題
- Driver 負責把本地的資源分發給 Container
- 在 client 模式下,Driver 就找在 Client 端,可以把 client 端的資源分發,而 cluster 模式下,Driver 可在叢集任一節點,該節點是沒有資源的
- 如果是 普通依賴:
在 client 模式下,Driver 可能自動收集資源,分發,無需上傳依賴;
在 cluster 模式下,Driver 無法收集資源,必須上傳依賴;
- 如果是 複雜依賴:
在 client 模式 和 cluster 模式下,都需要通過 虛拟環境 上傳依賴
- 在工業環境中,使用的多是 cluster 模式,cluster 模式必須上傳依賴
- 在調試環節,多使用 client 模式,client 隻需上傳複雜依賴即可
Reference
[0] 官方文檔spark-submit說明
[1] spark-submit送出任務及參數說明
[2] Pyspark On Yarn 的子產品依賴問題
[3] Pyspark學習筆記(二)— spark-submit指令