Spark調研筆記第2篇 - 如何通過Spark客戶端向Spark提交任務

上篇筆記的基礎上,本文介紹Spark客戶端的基本配置及Spark任務提交方式。

1. Spark客戶端及基本配置
從Spark官網下載的pre-built包中集成了Spark客戶端,如與hadoop ver1.x兼容的Spark客戶端位於spark-1.3.1-bin-hadoop1/bin目錄下。
Spark客戶端通常部署在要提交計算任務的機器上,用來向集羣提交應用。特別地,客戶端自帶的bin/pyspark腳本支持以交互模式向集羣提交應用,在交互模式下測試spark python api的執行結果是很方便的
Spark客戶端的配置文件通常位於conf目錄下,典型的配置文件列表如下所列:

spark-defaults.conf  // 設置spark master地址、每個executor進程的內存、佔用核數,等等
spark-env.sh         // spark相關的各種環境變量
log4j.properties.template    // 設置driver向console輸出的日誌的等級及格式
fairscheduler.xml.template   // 設置調度方式
metrics.properties.template  // 設置spark內部metrics系統,一般無需改動
slaves               // 設置spark集羣中的slave節點(即worker節點),無需改動
hadoop-default.xml   // hadoop配置,主要是hdfs的配置
hadoop-site.xml      // hadoop集羣的訪問配置(如master地址)
注意:由於spark的輸入文件通常來自HDFS,故除spark本身的配置文件外,通常還需在conf目錄下包含hadoop相關的配置文件,如上述示例中的hadoop-default.xml和hadoop-site.xml。
在這些配置文件中,最重要的是spark-defaults.conf,典型配置模板如下所示。
# Default system properties included when running spark-submit.
# This is useful for setting default environmental settings.

# Example:
# spark.master                     spark://master:7077
# spark.eventLog.enabled           true
# spark.eventLog.dir               hdfs://namenode:8021/directory
# spark.serializer                 org.apache.spark.serializer.KryoSerializer
# spark.driver.memory              5g
# spark.executor.extraJavaOptions  -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"
從模板可見,必須的配置項是spark.master的地址。此外還有一些影響Spark運行性能的配置項,限於篇幅,這裏不再贅述。建議仔細閱讀Spark Configuration文檔。

2. 如何向spark集羣提交應用
Spark客戶端自帶的bin/spark-submit腳本可以用來向集羣提交應用,如下面的示例命令通過Spark客戶端提交了一個基於ALS算法的矩陣分解模型用來實現電影個性化推薦:

spark-1.3.0.5-bin/bin/spark-submit movie_als_rec.py
如果應用程序依賴了其它庫,則需要將應用程序及其依賴整體打包提交到spark集羣。具體而言,若提交java應用,則可藉助sbt或Maven的相關插件打成jar文件再提交(無需包含spark或hadoop相關的依賴,它們由cluster manager提供);若提交Python應用,則可先將應用腳本及其依賴打包成.zip或.egg包,然後藉助—py-files參數將zip或egg文件傳給spark-submit腳本。
spark-submit支持的參數列表可從官網文檔瞭解,也可打開spark-submit腳本查看,腳本中解析參數的代碼片段如下:

這裏對deploy-mode參數做特別說明:
1) deploy mode分爲client和cluster兩種。
2) 若待提交的應用部署的節點與集羣worker節點在物理網絡上很近,則以client模式提交應用較爲合理。在client模式下,driver由spark應用腳本所在機器節點的spark-submit直接調起,driver針對應用的輸入/輸出會打印至該節點的終端控制檯。
3) 若spark應用腳本部署節點與spark集羣worker節點物理網絡距離較遠,則以cluster提交可以減少driver和executors間的網絡延時(因爲正常情況下,應用分解出的若干tasks均會由driver負責調度executor來執行,每次調度均有網絡開銷)。
4) 目前以standalone或mesos方式部署的spark集羣不支持cluster模式,基於Python的spark應用提交也不支持cluster模式。

未完待續,下篇筆記將會介紹Spark集羣對應用的調度方式。

【參考資料】
1. Spark Configuration

==================== EOF ===================

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章