鎖屏面試題百日百刷-Spark篇(十一)
鎖屏面試題百日百刷,每個工作日堅持更新面試題。鎖屏面試題app、小程序現(xiàn)已上線,官網(wǎng)地址:https://www.demosoftware.cn。已收錄了每日更新的面試題的所有內容,還包含特色的解鎖屏幕復習面試題、每日編程題目郵件推送等功能。讓你在面試中先人一步!接下來的是今日的面試題:
1.Mapreduce和Spark的都是并行計算,那么他們有什么相同和區(qū)別
答:兩者都是用mr模型來進行并行計算:
1)hadoop的一個作業(yè)稱為job,job里面分為map task和reduce task,每個task都是在自己的進程中運行的,當task結束時,進程也會結束。
2)spark用戶提交的任務成為application,一個application對應一個sparkcontext,app中存在多個job,每觸發(fā)一次action操作就會產生一個job。這些job可以并行或串行執(zhí)行,每個job中有多個stage,stage是shuffle過程中DAGSchaduler通過RDD之間的依賴關系劃分job而來的,每個stage里面有多個task,組成taskset有TaskSchaduler
分發(fā)到各個executor中執(zhí)行,executor的生命周期是和app一樣的,即使沒有job運行也是存在的,所以task可以快速啟動讀取內存進行計算。
3)hadoop的job只有map和reduce操作,表達能力比較欠缺而且在mr過程中會重復的讀寫hdfs,造成大量的io操作,多個job需要自己管理關系。
spark的迭代計算都是在內存中進行的,API中提供了大量的RDD操作如join,groupby等,而且通過DAG圖可以實現(xiàn)良好的容錯。
2.spark工作機制?
答:用戶在client端提交作業(yè)后,會由Driver運行main方法并創(chuàng)建spark context上下文。
執(zhí)行add算子,形成dag圖輸入dagscheduler,按照add之間的依賴關系劃分stage輸入task scheduler。Task scheduler會將stage劃分為task set分發(fā)到各個節(jié)點的executor中執(zhí)行。
3.spark的優(yōu)化怎么做?
答:spark調優(yōu)比較復雜,但是大體可以分為三個方面來進行,1)平臺層面的調優(yōu):防止不必要的jar包分發(fā),提高數(shù)據(jù)的本地性,選擇高效的存儲格式如parquet,2)應用程序層面的調優(yōu):過濾操作符的優(yōu)化降低過多小任務,降低單條記錄的資源開銷,處理數(shù)據(jù)傾斜,復用RDD進行緩存,作業(yè)并行化執(zhí)行等等,3)JVM層面的調優(yōu):設置合適的資源量,設置合理的JVM,啟用高效的序列化方法如kyro,增大off head內存等等
4.描述Yarn執(zhí)行一個任務的過程?
1)客戶端client向ResouceManager提交Application,ResouceManager接受Application
并根據(jù)集群資源狀況選取一個node來啟動Application的任務調度器driver(ApplicationMaster)
2)ResouceManager找到那個node,命令其該node上的nodeManager來啟動一個新的
JVM進程運行程序的driver(ApplicationMaster)部分,driver(ApplicationMaster)啟動時會首先向ResourceManager注冊,說明由自己來負責當前程序的運行。
3)driver(ApplicationMaster)開始下載相關jar包等各種資源,基于下載的jar等信息決定向ResourceManager申請具體的資源內容。
4)ResouceManager接受到driver(ApplicationMaster)提出的申請后,會最大化的滿足
資源分配請求,并發(fā)送資源的元數(shù)據(jù)信息給driver(ApplicationMaster);
5)driver(ApplicationMaster)收到發(fā)過來的資源元數(shù)據(jù)信息后會根據(jù)元數(shù)據(jù)信息發(fā)指令給具體機器上的NodeManager,讓其啟動具體的container。
6)NodeManager收到driver發(fā)來的指令,啟動container,container啟動后必須向driver(ApplicationMaster)注冊。
7)driver(ApplicationMaster)收到container的注冊,開始進行任務的調度和計算,直到任務完成。
補充:如果ResourceManager第一次沒有能夠滿足driver(ApplicationMaster)的資源請求,后續(xù)發(fā)現(xiàn)有空閑的資源,會主動向driver(ApplicationMaster)發(fā)送可用資源的元數(shù)據(jù)信息以提供更多的資源用于當前程序的運行。