目錄
1、spark運作時架構
2、兩種操作:轉化操作和行動操作
3、在叢集上運作應用程式
4、使用spark-submit部署應用
1、spark運作時架構
運作時架構描述:
- spark-submit啟動驅動器
- 驅動器和叢集管理器通信,為執行器申請資源
- 叢集管理器啟動執行器
不同結點的職責:
結點類型 | 職責 |
驅動器 |
|
執行器 |
|
叢集管理器 | 1、啟動驅動器 2、啟動執行器 |
2、兩種操作:轉化操作和行動操作
轉化操作,傳回一個新的RDD/Dataframe,例如常見的轉化操作包括filter、map、distinct、union等。轉化操作時惰性求值,隻有在行動操作中用到這些RDD/Dataframe時,才會被計算。
行動操作,是把結果傳回驅動器程式或寫入外部系統的操作,會觸發實際的計算,例如常用的行動操作包括count、take等。每當我們調用一個新的行動操作時,整個RDD/Dataframe會從頭開始計算,要避免這種低效的行為,使用者可以将中間結果持久化。
3、在叢集上運作應用程式
YARN叢集管理器啟動驅動器程式有兩種模式:用戶端模式(client)和叢集模式(cluster)。
采用叢集模式啟動驅動器程式,驅動器程式會被傳輸并執行于主節點上:
1,2:用戶端送出程式給叢集管理器,叢集管理器啟動驅動器
3:叢集管理器運作驅動器程式
4,5:驅動器與叢集管理器通信,為執行器申請資源
6,7:叢集管理器配置設定資源,啟動執行器
8:執行器向驅動器程式注冊
9:驅動器程式為執行器節點排程任務
采用用戶端模式啟動驅動器程式,驅動器程式運作在spark-submit被調用的這台機器上:
1:用戶端運作驅動器程式
2,3:用戶端送出程式給叢集管理器
4,5:驅動器與叢集管理器通信,為執行器申請資源
6,7:叢集管理器配置設定資源,啟動執行器
8:執行器向驅動器程式注冊
9:驅動器程式為執行器節點排程任務
如果使用用戶端模式,驅動器程式運作在叢集外,驅動器程式和執行器通信的時間花銷會增大。
4、使用spark-submit部署應用
Spark-submit送出應用時,提供各種選項控制應用每次運作的各項細節,主要包含兩類:一類是排程資訊如申請的資源量,另一類是應用的運作時依賴。
運作時依賴例如:
spark-submit --deploy-mode cluster --jars /usr/lib/spark/jars/mysql-connector-java-5.1.43-bin.jar clusterStart.py
排程資訊設定:
spark-submit --driver-memory 8G --executor-memory 20G --executor-cores 3 --conf spark.default.parallelism=100 clusterStart.py
通常将排程資訊設定在啟動叢集的Configurations配置中,spark-submit會自動讀取,排程資訊的配置見https://blog.csdn.net/woniu201411/article/details/81985666。
參考資料:
《spark快速大資料分析》
https://amazonaws-china.com/cn/blogs/big-data/submitting-user-applications-with-spark-submit/