1. 程式人生 > 其它 >spark面試必知必會

spark面試必知必會

哈哈哈,沒想到腦海裡復現的是這麼熟悉的話,必知必會,三天入門。

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部分執行完畢後,Driver同時負責將SparkContext關閉,通常用SparkContext代表Driver
  • 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