Spark submit 是Spark用來送出程式到叢集執行的script。目前支援的叢集平台/模式有下列幾種:
為了讓spark-submit
的script可以順利將程式碼送出執行,除了Python以外,Scala、Java都需要將程式碼編譯並打包成jar,可以使用 Sbt 或是 Maven 來幫忙進行複雜的 dependency 管理與打包。
如果是Python,使用spark-submit時需要使用--py-files
指定要執行的.py、.zip或是.egg檔案。建議若是要執行的python檔案有一個以上,可以將他們打包成.zip或是.egg後再送出。
接下來看一下spark-submit的指令與參數:
./bin/spark-submit \
--class <main-class> \
--master <master-url> \
--deploy-mode <deploy-mode> \
--conf <key>=<value> \
<application-jar> \
[application-arguments]
參數說明:
client
或是 cluster
,預設為client
。假設程式是不需要回傳值,可以使用cluster,如果需要回傳計算結果,那需要使用client,這樣執行spark-submit的視窗才能顯示計算結果。需要注意的是,目前spark standalone不支援在Python程式使用cluster模式來進行。hdfs://
、file://
、http://
。如果是python檔案,這個參數需要以 --py-files
替換。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_DIR 或YARN_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