鎖屏面試題百日百刷-Spark篇(五)
鎖屏面試題百日百刷,每個(gè)工作日?qǐng)?jiān)持更新面試題。鎖屏面試題app、小程序現(xiàn)已上線,官網(wǎng)地址:https://www.demosoftware.cn。已收錄了每日更新的面試題的所有內(nèi)容,還包含特色的解鎖屏幕復(fù)習(xí)面試題、每日編程題目郵件推送等功能。讓你在面試中先人一步!接下來(lái)的是今日的面試題:
1.寬依賴、窄依賴怎么理解?
窄依賴指的是每一個(gè)?parent RDD?的?partition?最多被子?RDD?的一個(gè)?partition?使用(一子一親)
寬依賴指的是多個(gè)子?RDD?的?partition?會(huì)依賴同一個(gè)?parent RDD的?partition(多子一親)
RDD?作為數(shù)據(jù)結(jié)構(gòu),本質(zhì)上是一個(gè)只讀的分區(qū)記錄集合。一個(gè)?RDD?可以包含多個(gè)分區(qū),每個(gè)分區(qū)就是一個(gè)dataset?片段。RDD?可以相互依賴。
首先,窄依賴可以支持在同一個(gè)?cluster node上,以?pipeline?形式執(zhí)行多條命令(也叫同一個(gè)?stage?的操作),例如在執(zhí)行了?map?后,緊接著執(zhí)行?filter。相反,寬依賴需要所有的父分區(qū)都是可用的,可能還需要調(diào)用類似MapReduce?之類的操作進(jìn)行跨節(jié)點(diǎn)傳遞。
其次,則是從失敗恢復(fù)的角度考慮。窄依賴的失敗恢復(fù)更有效,因?yàn)樗恍枰匦掠?jì)算丟失的?parent partition?即可,而且可以并行地在不同節(jié)點(diǎn)進(jìn)行重計(jì)算(一臺(tái)機(jī)器太慢就會(huì)分配到多個(gè)節(jié)點(diǎn)進(jìn)行),相反,寬依賴牽涉?RDD?各級(jí)的多個(gè)?parent partition。
2.Job 和 Task 怎么理解
Job Spark?的?Job?來(lái)源于用戶執(zhí)行?action?操作(這是?Spark?中實(shí)際意義的?Job),就是從?RDD?中獲取結(jié)果的操作,而不是將一個(gè)?RDD?轉(zhuǎn)換成另一個(gè)?RDD?的?transformation?操作。
Task?一個(gè)?Stage?內(nèi),最終的?RDD?有多少個(gè)?partition,就會(huì)產(chǎn)生多少個(gè)?task??匆豢磮D就明白了,可以數(shù)一數(shù)每個(gè)?Stage?有多少個(gè)?Task。
3.講講Checkpoint機(jī)制?
通過(guò)上述分析可以看出在以下兩種情況下,RDD需要加檢查點(diǎn)。
(1)DAG中的Lineage過(guò)長(zhǎng),如果重算,則開銷太大(如在PageRank中)。
(2)在寬依賴上做Checkpoint獲得的收益更大。
在RDD計(jì)算中,通過(guò)檢查點(diǎn)機(jī)制進(jìn)行容錯(cuò),傳統(tǒng)做檢查點(diǎn)有兩種方式:通過(guò)冗余數(shù)據(jù)和日志記錄更新操作。在RDD中的doCheckPoint方法相當(dāng)于通過(guò)冗余數(shù)據(jù)來(lái)緩存數(shù)據(jù),而之前介紹的血統(tǒng)就是通過(guò)相當(dāng)粗粒度的記錄更新操作來(lái)實(shí)現(xiàn)容錯(cuò)的。
4.檢查點(diǎn)的本質(zhì)
檢查點(diǎn)(本質(zhì)是通過(guò)將RDD寫入Disk做檢查點(diǎn))是為了通過(guò)lineage做容錯(cuò)的輔助,lineage過(guò)長(zhǎng)會(huì)造成容錯(cuò)成本過(guò)高,這樣就不如在中間階段做檢查點(diǎn)容錯(cuò),如果之后有節(jié)點(diǎn)出現(xiàn)問(wèn)題而丟失分區(qū),從做檢查點(diǎn)的RDD開始重做Lineage,就會(huì)減少開銷。