Spark的 bin目錄下的spark-submit可被用於在集群上執行應用,他可被用於所有類型的cluster manager。
綁定Application的依賴
如果代碼依賴其他工程,連同Application一起打包,使用maven或sbt。
並將Spark和Hadoop相關的依賴設置為provided:
<dependency> /<dependency>
<groupid>.../<groupid>
<artifactid>.../<artifactid>
<version>.../<version>
<scope>provided/<scope>
因為這些依賴在運行時由cluster manager提供。
使用spark-submit
./bin/spark-submit \\
--class <main-class> \\/<main-class>
--master <master-url> \\/<master-url>
--deploy-mode <deploy-mode> \\/<deploy-mode>
--conf
... # other options
<application-jar> \\/<application-jar>
[application-arguments]
常用選項:
--class:應用入口。
--master:master URL
--deploy-mode:部署驅動到worker node(cluster)或本地執行(client)。默認是client。
--conf:任意的Spark configuration鍵值對(key=value)形式的屬性。
application-jar:打包的jar路徑。這個URL必須對於集群是全局可見的。例如:hdfs:// path 或每個節點都有file://路徑。
application-arguments:傳給main函數的參數。
常用部署策略
1)從一臺網關服務器提交應用,這臺機器與集群中的機器處於同一位置,即為集群中的一臺機器。這種部署方式適合client模式,driver程序作為集群的客戶端在spark-submit線程內啟動,應用程序的輸入輸出附加到控制檯。這種模式特別適合REPL(Read-eval-print-loop,交互式解析器),例如Spark shell。
2)如果在遠離集群的機器上提交應用(比如自己的筆記本電腦),使用cluster模式比較合適,這樣可以使driver和executor間的網絡延遲最小化。
Master URLs
從一個文件加載配置
spark-submit腳本默認從配置文件加載配置值並傳遞給你的應用。默認讀取spark目錄下的conf/spark-defaults.conf。
加載默認配置可以免除通過spark-submit指定部分選項。例如配置文件中設置了spark.master,那麼--master就不用指定了。一般,使用SparkConf設置的配置具有最高優先級,之後是spark-submit,最後才是默認配置。
如果不知道配置來自於哪,可以使用spark-submit到的--verbose選項打印調試信息。
高級依賴管理
使用spark-submit提交命令時,application jar連同--jars選項列表中的jar會自動傳送到集群上,--jars後的多個url必須要用逗號分隔,這個列表會被包含到driver和executor路徑中。--jars不支持目錄形式。
Spark使用下面的URL模式:
1)file:--絕對路徑,file:/URI通過driver的HTTP file server提供服務,每個executor都從driver的HTTP file server拉取文件
2)hdfs:, http:, https:, ftp:--每個executor都從指定的URL拉取文件
3)local:--存在於每個worker node上的本地文件,這意味著沒有網絡IO的影響,對於胖jar而言是一種理想的方式。
Jar和文件會被拷貝到executor節點(可能多個)的每個SparkContext的工作目錄。這可能會佔用大量的硬盤空間。YARN能夠自動清理這些不再使用的文件。Spark standalone模式下可以通過配置spark.worker.cleanup.appDataTtl屬性開啟自動清理特性。
用戶也能使用--packages,包含一個以逗號分隔的Maven座標列表。座標的格式為:groupId:artifactId:version。還可以使用--repositories添加依賴,多個依賴以逗號分隔。例如https://user:password@host/....,https://user:password@host/....
閱讀更多 甜橙很酸 的文章