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