Spark調研筆記第2篇 - 怎樣通過Sparkclient向Spark提交任務


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

1. Sparkclient及基本配置
從Spark官網下載的pre-built包中集成了Sparkclient,如與hadoop ver1.x兼容的Sparkclient位於spark-1.3.1-bin-hadoop1/bin文件夾下。
Sparkclient通常部署在要提交計算任務的機器上。用來向集群提交應用。特別地。client自帶的bin/pyspark腳本支持以交互模式向集群提交應用,在交互模式下測試spark python api的運行結果是非常方便的
Sparkclient的配置文件通常位於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集群提交應用
Sparkclient自帶的bin/spark-submit腳本能夠用來向集群提交應用,如以下的演示樣例命令通過Sparkclient提交了一個基於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 ===================


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM