天天看點

[spark]在叢集上運作spark1、spark運作時架構2、兩種操作:轉化操作和行動操作3、在叢集上運作應用程式4、使用spark-submit部署應用

目錄

1、spark運作時架構

2、兩種操作:轉化操作和行動操作

3、在叢集上運作應用程式

4、使用spark-submit部署應用

1、spark運作時架構

[spark]在叢集上運作spark1、spark運作時架構2、兩種操作:轉化操作和行動操作3、在叢集上運作應用程式4、使用spark-submit部署應用

運作時架構描述:

  1. spark-submit啟動驅動器
  2. 驅動器和叢集管理器通信,為執行器申請資源
  3. 叢集管理器啟動執行器

不同結點的職責:

結點類型 職責
驅動器
  1. 将程式轉化為多個任務
  2. 為執行器排程任務
執行器
  1. 運作任務,将結果傳回給驅動器
  2. 存儲程式中要求緩存的dataframe
叢集管理器

     1、啟動驅動器

     2、啟動執行器

2、兩種操作:轉化操作和行動操作

轉化操作,傳回一個新的RDD/Dataframe,例如常見的轉化操作包括filter、map、distinct、union等。轉化操作時惰性求值,隻有在行動操作中用到這些RDD/Dataframe時,才會被計算。

行動操作,是把結果傳回驅動器程式或寫入外部系統的操作,會觸發實際的計算,例如常用的行動操作包括count、take等。每當我們調用一個新的行動操作時,整個RDD/Dataframe會從頭開始計算,要避免這種低效的行為,使用者可以将中間結果持久化。

3、在叢集上運作應用程式

YARN叢集管理器啟動驅動器程式有兩種模式:用戶端模式(client)和叢集模式(cluster)。

采用叢集模式啟動驅動器程式,驅動器程式會被傳輸并執行于主節點上:

[spark]在叢集上運作spark1、spark運作時架構2、兩種操作:轉化操作和行動操作3、在叢集上運作應用程式4、使用spark-submit部署應用

1,2:用戶端送出程式給叢集管理器,叢集管理器啟動驅動器

3:叢集管理器運作驅動器程式

4,5:驅動器與叢集管理器通信,為執行器申請資源

6,7:叢集管理器配置設定資源,啟動執行器

8:執行器向驅動器程式注冊

9:驅動器程式為執行器節點排程任務

采用用戶端模式啟動驅動器程式,驅動器程式運作在spark-submit被調用的這台機器上:

[spark]在叢集上運作spark1、spark運作時架構2、兩種操作:轉化操作和行動操作3、在叢集上運作應用程式4、使用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/

繼續閱讀