天天看點

《Spark核心技術與進階應用》——3.3節獨立應用程式程式設計

本節書摘來自華章社群《spark核心技術與進階應用》一書中的第3章,第3.3節獨立應用程式程式設計,作者于俊 向海 代其鋒 馬海平,更多章節内容可以通路雲栖社群“華章社群”公衆号檢視

3.3 獨立應用程式程式設計

不同于使用spark shell自動初始化sparkcontext的例子,獨立應用程式需要初始化一個sparkcontext作為程式的一部分,然後将一個包含應用程式資訊的sparkconf對象傳遞給sparkcontext構造函數。

接下來編寫簡單應用程式simpleapp,并描述一些簡單的編碼流程。

3.3.1 建立sparkcontext對象

編寫一個spark程式,首先建立sparkconf對象,該對象包含應用的資訊。sparkconf對象建構完畢,需要建立sparkcontext對象,該對象可以通路spark叢集。

3.3.2 編寫簡單應用程式

一個常見的hadoop資料流模式是mapreduce,spark可以輕易地實作mapreduce資料流,我們通過spark api建立一個簡單的spark應用程式simpleapp.scala。

這個程式統計了spark的readme.md中含有“a”的行數和含有“b”的行數。實際需要用spark的安裝路徑替換your_spark_home。

3.3.3 編譯并送出應用程式

可以采用idea生成jar包的方式,也可以采取sbt或者mvn的方式打成jar包。以sbt package為例,建立一個包含應用程式代碼的jar包。

一旦使用者的應用程式被打包,就可以使用$spark_home./bin/spark-submit腳本啟動應用程式。spark-submit腳本負責建立spark的類路徑和相關依賴,并支援不同的叢集管理(local、standalone、yarn)和部署模式(client、cluster),通過送出參數進行差別。

1.?使用sbt打成jar包

使用sbt打成jar包過程如下:

選項解釋說明:

--class:應用程式入口位置,如org.apache.spark.examples.sparkpi。

--master:叢集的master的url,如spark://xxx.xxx.xxx.xxx:7077;或使用local在本地單線程地運作,或使用local[n]在本地以n個線程運作。通常應該由運作local進行測試開始。

--deploy-mode:叢集部署模式,cluster模式和client模式(預設模式)。

application-jar:包含應用程式和所有依賴的jar包的路徑。該url必須是在叢集中全局可見的,如一個hdfs://路徑或者一個在所有worker節點都出現的f?ile://路徑。

application-arguments:傳遞給主類的main函數的參數。

對于python應用,在的位置傳入一個.py檔案代替一個jar包,并且以-py-f?iles的方式在搜尋路徑下加入python.zip、.egg或.py檔案。

常見的部署政策是從同一實體位置,即同一個網關的伺服器上送出應用程式。在這種設定中,采用client模式比較合适。在client模式中,driver直接在使用者的spark-submit程序中啟動,應用程式的輸入和輸出連接配接到控制台(console)。是以,這個模式對于涉及repl(read-eval-print loop,“讀取-求值-輸出”循環)的應用程式尤其合适。

另外,如果你的應用程式是從遠離worker機器的某台機器上送出的(如你的筆記本電腦上),一般要用cluster模式,使drivers和executors之間的網絡延遲最小化。(目前standalone部署模式、mesos叢集模式和python編寫的應用不支援cluster

模式。)

傳遞給spark的master url可以是如表3-1所示的某個格式。

《Spark核心技術與進階應用》——3.3節獨立應用程式程式設計

3.以local模式送出應用程式

以local模式在4個cpu核上運作應用程式,指令如下: