英文原文連接:http://spark-project.org/docs/latest/spark-standalone.html
翻譯的水平有限,歡迎批評指正,轉載請註明出處。
除了部署在Mesos之上, Spark也支持獨立部署模式,包括一個Spark master進程和多個 Spark worker進程.獨立部署模式可以運行在單機上作爲測試之用,也可以部署在集羣上.如果你打算部署在集羣上,可以使用我們提供的部署腳本啓動一個集羣。
現在開始吧
使用sbt package對進行編譯,可以參考開始指南。如果打算部署單獨模式,就不需要安裝Mesos.
手動方式啓動集羣
通過如下命令啓動單獨模式的master服務:
./runspark.deploy.master.Master
一旦啓動,master就會輸出spark://IP:PORT以提示連接 workers 的方式。也可以通過參數“master”給SparkContext來連接集羣的作業.你可以在master的web管理界面上看到這樣的地址,默認是http://localhost:8080。
同樣,你可以啓動一個或者多個worker,通過下面的語句使之和master建立連接。:
./runspark.deploy.worker.Worker spark://IP:PORT
啓動一個worker後,查看 master的 web管理界面 (默認http://localhost:8080),上面列出了新近加入的節點的CPU和內存的信息。(不包括給操作系統預留的內存空間)。
Finally, the following configuration options can be passed to the masterand worker:
參數 |
含義 |
-i IP, --ip IP |
要監聽的IP地址或者 DNS 機器名 |
-p PORT, --port PORT |
要監聽的端口 (默認: master 7077 ;worker隨機) |
--webui-port PORT |
web UI端口 (默認: master 8080, worker 8081) |
-c CORES, --cores CORES |
作業可用的CPU內核數量(默認: 所有可用); 只在worker上。 |
-m MEM, --memory MEM |
作業可使用的內存容量,默認格式1000M或者 2G (默認: 所有RAM去掉給操作系統用的1 GB); 只在worker上。 |
-d DIR, --work-dir DIR |
伸縮空間和日誌輸入的目錄路徑 (默認: SPARK_HOME/work); 只在worker上。 |
集羣啓動腳本
啓動單獨模式的集羣時,首先在Spark的目錄內建立一個配置文件conf/slaves,列出所有worker機器的機器名,每一個佔一行。Master必須能夠實現無密碼的ssh登錄worker機器,可以使用ssh locakhost來測試。
然後,就可以在SPARK_HOME/bin路徑下執行shell腳本,以啓動或者停止集羣。
l bin/start-master.sh - Starts amaster instance on the machine the script is executed on.
l bin/start-slaves.sh - Starts aslave instance on each machine specified in the conf/slaves file.
l bin/start-all.sh - Starts botha master and a number of slaves as described above.
l bin/stop-master.sh - Stops themaster that was started via the bin/start-master.sh script.
l bin/stop-slaves.sh - Stops theslave instances that were started via bin/start-slaves.sh.
l bin/stop-all.sh - Stops boththe master and the slaves as described above.
注意:只能在運行Spark的master主機上執行上述腳本,而不是你的本地機器。
你可以通過conf/spark-env.sh進一步配置整個集羣的環境變量。這個文件可以用conf/spark-env.sh.template當模版複製生成。然後,複製到所有的worker機器上才奏效。下面給出一些可選的參數以及含義:
環境變量 |
含義 |
SPARK_MASTER_IP |
綁定一個外部IP給master |
SPARK_MASTER_PORT |
從另外一個端口啓動master(默認: 7077) |
SPARK_MASTER_WEBUI_PORT |
Master的web UI端口 (默認: 8080) |
SPARK_WORKER_PORT |
啓動Spark worker 的專用端口(默認:隨機) |
SPARK_WORKER_DIR |
伸縮空間和日誌輸入的目錄路徑 (默認: SPARK_HOME/work); |
SPARK_WORKER_CORES |
作業可用的CPU內核數量(默認: 所有可用的); |
SPARK_WORKER_MEMORY |
作業可使用的內存容量,默認格式1000M或者 2G (默認: 所有RAM去掉給操作系統用的1 GB);每個作業獨立的內存空間由SPARK_MEM決定。 |
SPARK_WORKER_WEBUI_PORT |
worker 的web UI 啓動端口(默認: 8081) |
SPARK_DAEMON_MEMORY |
分配給Spark master和 worker 守護進程的內存空間 (默認: 512m) |
SPARK_DAEMON_JAVA_OPTS |
Spark master 和 worker守護進程的JVM 選項(默認: none) |
提交作業到集羣
運行一個作業在Spark集羣上,只需要發送連接master的spark://IP:PORT到SparkContext構造器.
執行下列命令可以在集羣上運行一個交互式的Spark shell:
MASTER=spark://IP:PORT./spark-shell
作業調度
單獨部署模式目前只支持FIFO作業調度策略。不過,爲了允許作業的併發執行,可以控制每一個作業可獲得資源的最大值。默認情況下,如果系統中只有一個作業,它就會獲得所有資源。使用類似System.setProperty("spark.cores.max","10")的語句可以獲得內核的數量。這個數值在初始化SparkContext之前必須設置好。
監控和日誌
Spark單獨部署模式提供了一個基於WEB的集羣監視器。master和每一個worker都會有一個WEB UI來顯示集羣的統計信息。默認情況下,可以通過8080端口訪問master的WEB UI。當然也可以通過配置文件或者命令來修改這個端口值。
In addition, detailed log output for each job is also written to the workdirectory of each slave node (SPARK_HOME/work by default). You will see two files for each job, with all output itwrote to its console.
另外,每個slave節點上作業運行的日誌也會詳細的記錄到默認的SPARK_HOME/work目錄下。每個作業會對應兩個文件,stdout和stderr,包含了控制檯上的所有的歷史輸出。
和Hadoop同時運行
作爲一個獨立的服務,可以和現有的Hadoop集羣同時運行。
通過hdfs:// URL,Spark可以訪問hadoop集羣的HDFS上的數據。(比如地址可以寫成hdfs://<namenode>:9000/path,從Namenode的web UI可以獲得更確切的URL).或者,專門爲Spark搭建一個集羣,通過網絡訪問其他HDFS上的數據,這樣肯定不如訪問本地數據速度快,除非是都在同一個局域網內。(比如幾臺Spark機器和Hadoop集羣在同一機架上)。