spark任务shell运行_大数据系列:Spark的工作原理及架构
介紹
本Apache Spark教程將說明Apache Spark的運行時架構以及主要的Spark術語,例如Apache SparkContext,Spark shell,Apache Spark應用程序,Spark中的任務(Task),作業(job)和階段(stage)。
此外,我們還將學習Spark運行時體系結構的組件,例如Spark driver,集群管理器(cluster manager)和Spark executors。最后,我們將看到Apache Spark如何使用這些組件工作。
Apache Spark的工作原理–運行時Spark架構
在這里,我們將學習Apache Spark的工作原理。在Apache Spark中,中央協調器稱為driver。當您在spark中輸入代碼時,驅動程序(driver)中的SparkContext將在我們調用Action時創建作業(job)。該作業(job)提交給DAG Scheduler,DAG Scheduler創建操作員圖(operator graph),然后將其提交給Task Scheduler。任務計劃程序通過集群管理器(cluster manager)啟動任務。因此,借助集群管理器,Spark Application在一組計算機上啟動。
現在,讓我們了解下Spark的架構原理。
2. Apache Spark工作原理的內部原理
Apache Spark是一個開放源代碼,通用分布式計算引擎,用于處理和分析大量數據。就像Hadoop MapReduce一樣,它也可以與系統一起在整個群集中分發數據并并行處理數據。Spark使用主/從體系結構,即一個中央協調員(driver)和許多不同節點的workers。在這里,中央協調員稱為驅動程序(driver)。
驅動程序(driver)在其自己的Java進程中運行。這些驅動程序與可能稱為executor的大量分布式executors進行通信。每個執行程序都是一個單獨的java進程。一個Spark應用是驅動程序(driver)和其擁有的executors的組合。在集群管理器的幫助下,Spark Application在一組計算機上啟動。Standalone cluster manager是Spark的默認內置cluster manager。除了內置的群集管理器外,Spark還可以與某些開源群集管理器(如Hadoop Yarn,Apache Mesos等)一起使用。
Spark的術語
- Apache SparkContext
SparkContext是Spark應用程序的核心。它建立與Spark執行環境的連接。它用于創建Spark RDD,累加器(accumulators)和廣播變量(broadcast),訪問Spark服務并運行作業(jobs)。SparkContext是Spark執行環境的客戶端,并充當Spark應用程序的主要部分。Spark Context的主要工作是:
- Apache Spark Shell
Spark Shell是用Scala編寫的Spark應用程序。它提供具有自動完成功能的命令行環境。它有助于我們熟悉Spark的功能,這些功能有助于開發自己的獨立Spark應用程序。因此,該工具有助于了解Spark,也是Spark之所以在處理各種大小的數據集方面如此有用的原因。
$spark-shell --master yarn --num-executors 3 --executor-cores 2 --executor-memory 500M- Spark Application
Spark應用程序是一個獨立的計算,可以運行用戶提供的代碼來計算結果。即使沒有運行作業(job),Spark應用程序也可以代表其運行進程。
- 任務(Task)
一個任務是被發送到執行程序(executor)的工作單元。每個階段都有一個任務,每個分區分配一個任務。同一任務是在RDD的不同分區上完成的。
- 作業(Job)
Job是并行計算的單元,由多個任務組成,這些任務是響應Apache Spark中的Actoion而產生的。
- 任務階段(Stage)每個Job都分成一些較小的任務集,稱為 相互依賴的 階段(Stage)。Stage被分類為計算邊界。不能在單個Stage中完成所有計算。Job通過許多個階段(Stage)來完成。
Spark運行時架構的組件
- Apache Spark驅動(Driver)
該程序的main()方法在驅動程序(Driver)中運行。驅動程序(Driver)是運行用戶代碼的過程,該用戶代碼創建RDD,執行轉換(transformation)和操作(action)以及創建SparkContext。啟動Spark Shell時,這表示我們已經創建了驅動程序(Driver)。在驅動程序終止時,應用程序將結束。
驅動程序(Driver)將Spark應用程序拆分為Task,并安排它們在Executors上運行。任務計劃程序駐留在驅動程序中,并在executors之間分配任務。驅動程序(Driver)的兩個主要關鍵角色是:
Spark程序的高層結構是:RDD由一些輸入數據源組成,使用各種轉換(transformations)從現有RDD派生出新的RDD,然后在執行Action來計算數據之后。在Spark程序中,操作的DAG(有向無環圖)是隱式創建的。當驅動程序運行時,它將Spark DAG轉換為物理執行計劃。
- Apache Spark集群管理器
Spark依靠群集管理器來啟動執行程序,在某些情況下,甚至驅動程序也可以通過它啟動。它是Spark中的可插入組件。在集群管理器上,Spark Scheduler以FIFO方式在Spark應用程序中調度作業和操作。可替代地,調度也可以以循環方式進行。Spark應用程序使用的資源可以根據工作負載動態調整。因此,應用程序可以釋放未使用的資源,并在有需求時再次請求它們。在所有粗粒度群集管理器(即獨立模式,YARN模式和Mesos粗粒度模式)上均可用。
- Apache Spark執行器
給定Spark作業中的單個任務在Spark執行程序中運行。執行程序在Spark應用程序的開頭啟動一次,然后在應用程序的整個生命周期內運行。即使Spark執行程序失敗,Spark應用程序也可以輕松繼續。執行者有兩個主要角色:
5.如何在Spark中啟動程序?盡管使用了任何集群管理器,Spark都具有單個腳本的功能,該腳本可用于提交程序,稱為spark-submit。它在集群上啟動應用程序。通過各種方式,spark-submit可以連接到不同的集群管理器并控制應用程序獲得多少資源。對于某些群集管理器,spark-submit可以在群集內運行驅動程序(例如,在YARN工作節點上),而對于其他群集管理器,它只能在本地計算機上運行。
6.如何在集群上運行Apache Spark應用程序
Apache Spark作業執行流程的完整圖片。
Spark-WebUI
Spark-UI是一個圖形化的web工具,幫助理解代碼執行流程以及完成特定作業所花費的時間。可視化有助于發現執行過程中發生的任何潛在問題,并進一步優化spark應用程序。
以上就是Apache Spark的工作方式。
如果發現任何不正確的地方,或者想分享有關上述主題的更多信息,歡迎反饋。
總結
以上是生活随笔為你收集整理的spark任务shell运行_大数据系列:Spark的工作原理及架构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ad20如何导入库_脱水防锈油如何使用才
- 下一篇: 和搜狗输入法快捷键冲突_这款输入法被调教