大數據計算框架Spark之提交Application

大數據計算框架Spark之提交Application

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 =<value> \\/<value>

... # 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之提交Application

從一個文件加載配置

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/....


分享到:


相關文章: