天天看點

【Spark】spark-submit作業送出及參數設定

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的常用啟動方式

【Spark】spark-submit作業送出及參數設定

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提取到工作目錄的檔案清單,用逗号隔開

三、子產品依賴問題

  1. Driver 負責把本地的資源分發給 Container
  2. 在 client 模式下,Driver 就找在 Client 端,可以把 client 端的資源分發,而 cluster 模式下,Driver 可在叢集任一節點,該節點是沒有資源的
  3. 如果是 普通依賴:

在 client 模式下,Driver 可能自動收集資源,分發,無需上傳依賴;

在 cluster 模式下,Driver 無法收集資源,必須上傳依賴;

  1. 如果是 複雜依賴:

在 client 模式 和 cluster 模式下,都需要通過 虛拟環境 上傳依賴

  1. 在工業環境中,使用的多是 cluster 模式,cluster 模式必須上傳依賴
  2. 在調試環節,多使用 client 模式,client 隻需上傳複雜依賴即可

Reference

[0] ​​官方文檔spark-submit說明​​​

[1] spark-submit送出任務及參數說明

[2] Pyspark On Yarn 的子產品依賴問題

[3] ​​​Pyspark學習筆記(二)— spark-submit指令​​

繼續閱讀