Spark Submit

Spark submit 是Spark用來送出程式到叢集執行的script。目前支援的叢集平台/模式有下列幾種:

  • Standalone- Spark Standalone 模式
  • Apache Mesos
  • Hadoop YARN
  • Kubernetes- 目前在Spark 2.2以上開始支援,目前還在測試階段。

打包程式吧!

為了讓spark-submit的script可以順利將程式碼送出執行,除了Python以外,Scala、Java都需要將程式碼編譯並打包成jar,可以使用 Sbt 或是 Maven 來幫忙進行複雜的 dependency 管理與打包。

如果是Python,使用spark-submit時需要使用--py-files指定要執行的.py、.zip或是.egg檔案。建議若是要執行的python檔案有一個以上,可以將他們打包成.zip或是.egg後再送出。

Spark Submit Usage

接下來看一下spark-submit的指令與參數:

./bin/spark-submit \
  --class <main-class> \
  --master <master-url> \
  --deploy-mode <deploy-mode> \
  --conf <key>=<value> \
  <application-jar> \
  [application-arguments]

參數說明:

  • –class: 主程式的進入點,例如:org.apache.spark.examples.SparkPi。
  • –master: 要執行Spark程式叢集/平台的master url,下面會介紹目前可使用的格式。
  • –deploy-mode: 程式的driver要在哪邊執行。client 或是 cluster,預設為client。假設程式是不需要回傳值,可以使用cluster,如果需要回傳計算結果,那需要使用client,這樣執行spark-submit的視窗才能顯示計算結果。需要注意的是,目前spark standalone不支援在Python程式使用cluster模式來進行。
  • –conf: 各種Spark參數設定都可以用key=value的格式傳入
  • application-jar: 要執行的spark程式(jar)路徑。檔案路徑可以放在HDFS、 本機路徑或是某個http url,但必須帶入指定路徑讓spark-submit可以辨識:hdfs://file://http://。如果是python檔案,這個參數需要以 --py-files替換。
  • application-arguments: 傳遞參數讓主程式使用。

Master URLs:

Master URL 說明
local 使用單一執行緒(thread)在本機執行
local[K] 使用K個執行緒(thread)在本機執行。理想狀況上可以設定單一機器cpu core數量的上限。
local[*] 使用與本機cpu core數量相同的執行緒(thread)在本機執行。
spark://HOST:PORT 連接到Spark Standalone叢集的master node,預設PORT為7070。
mesos://HOST:PORT 連接到Apache Mesos叢集上運行,預設PORT為5050。
yarn 連接到Hadoop YARN的叢集進行運算。首先會根據HADOOP_CONF_DIRYARN_CONF_DIR路徑內的設定檔知道yarn叢集的位址(可以搭配Day 4 Hadoop安裝篇章來複習),再判斷–deploy-mode是client或是cluster模式來運作。

接下來看一些spark-submit的範例:

# Execute SparkPi locally with 6 cores
./bin/spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master local[6] \
  /path/to/spark-examples.jar \

# Execute on a YARN cluster, and jar path is on HDFS
export HADOOP_CONF_DIR=XXX
./bin/spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master yarn \
  --deploy-mode cluster \  # can be client for client mode
  hdfs://path/to/spark-examples.jar \

# Execute Python application on Spark standalone
./bin/spark-submit \
  --master spark://172.124.161.138:7077 \
  examples/src/main/python/pi.py \

最後

看完了spark-submit的介紹後,想必對執行Spark的應用程式的指令有更近一步了瞭解。接下來要來介紹Spark的另一個重要模組Spark Sql