spark面試必知必會
阿新 • • 發佈:2021-11-03
哈哈哈,沒想到腦海裡復現的是這麼熟悉的話,必知必會,三天入門。
1:SparkSession內部封裝了SparkContext,所以計算實際上是由SparkContext完成的。
session = session.SparkSession \
.builder \
.appName(job_name) \
.enableHiveSupport() \
.getOrCreate()
如把Spark叢集當作服務端,那Spark Driver就是客戶端,SparkContext則是客戶端的核心;如註釋所說 SparkContext用於連線Spark叢集、建立RDD、累加器(accumlator)、廣播變數(broadcast variables),所以說SparkContext為Spark程式的根本都不為過,可以理解為main函式。
2:Spark支援的三種典型叢集部署方式,即standalone、Spark on Mesos和Spark on YARN
3:
- Application:Appliction都是指使用者編寫的Spark應用程式,其中包括一個Driver功能的程式碼和分佈在叢集中多個節點上執行的Executor程式碼
- Driver:Spark中的Driver即執行上述Application的main函式並建立SparkContext,建立SparkContext的目的是為了準備Spark應用程式的執行環境,在Spark中有SparkContext負責與ClusterManager通訊,進行資源申請、任務的分配和監控
- Executor:某個Application執行在worker節點上的一個程序, 該程序負責執行某些Task, 並且負責將資料存到記憶體或磁碟上,每個Application都有各自獨立的一批Executor, 在Spark on Yarn模式下,其程序名稱為CoarseGrainedExecutor Backend。一個CoarseGrainedExecutor Backend有且僅有一個Executor物件, 負責將Task包裝成taskRunner,並從執行緒池中抽取一個空閒執行緒執行Task, 這個每一個oarseGrainedExecutor Backend能並行執行Task的數量取決與分配給它的cpu個數
- Worker:叢集中任何可以執行Application程式碼的節點,在Standalone模式中指的是通過slave檔案配置的Worker節點,在Spark on Yarn模式下就是NoteManager節點
- Task:被送到某個Executor上的工作單元,但hadoopMR中的MapTask和ReduceTask概念一樣,是執行Application的基本單位,多個Task組成一個Stage,而Task的排程和管理等是由TaskScheduler負責
- Job:包含多個Task組成的平行計算,往往由Spark Action觸發生成, 一個Application中往往會產生多個Job
- Stage:每個Job會被拆分成多組Task, 作為一個TaskSet, 其名稱為Stage,Stage的劃分和排程是有DAGScheduler來負責的,Stage有非最終的Stage(Shuffle Map Stage)和最終的Stage(Result Stage)兩種,Stage的邊界就是發生shuffle的地方
- DAGScheduler:根據Job構建基於Stage的DAG(Directed Acyclic Graph有向無環圖),並提交Stage給TASkScheduler。 其劃分Stage的依據是RDD之間的依賴的關係找出開銷最小的排程方法
- Job=多個stage,Stage=多個同種task, Task分為ShuffleMapTask和ResultTask,Dependency分為ShuffleDependency和NarrowDependency
# ref:
https://www.cnblogs.com/xia520pi/p/8609602.html
https://www.cnblogs.com/cxxjohnson/p/8909578.html