大資料面試題 (五)Spark 相關面試題總結

2021-10-02 11:29:37 字數 3331 閱讀 2462

答:rdd(resilient distributed dataset)叫做分布式資料集,是spark中最基本的資料抽象,它代表乙個不可變,可分割槽,裡面的元素可以平行計算的集合

dataset:就是乙個集合,用於存放資料的

destributed:分布式,可以並行在集群計算

resilient:表示彈性的,彈性表示

rdd中的資料可以儲存在記憶體或者磁碟中;

rdd中的分割槽是可以改變的;

五大特性:

a list of partitions:乙個分割槽列表,rdd中的資料都儲存在乙個分割槽列表中

a function for computing each split:作用在每乙個分割槽中的函式

a list of dependencies on other rdds:乙個rdd依賴於其他多個rdd,這個點很重要,rdd的容錯機制就是依據這個特性而來的

optionally,a partitioner for key-value rdds(eg:to say that the rdd is hash-partitioned):可選的,針對於kv型別的rdd才有這個特性,作用是決定了資料的**以及資料處理後的去向

可選項,資料本地性,資料位置最優

答:map:用於遍歷rdd,將函式應用於每乙個元素,返回新的rdd(transformation運算元)

foreach:用於遍歷rdd,將函式應用於每乙個元素,無返回值(action運算元)

foreachpatition:用於遍歷操作rdd中的每乙個分割槽,無返回值(action運算元)

答:rdd和它的父rdd的關係有兩種型別:窄依賴和寬依賴

寬依賴:指的是多個子rdd的partition會依賴同乙個父rdd的partition,關係是一對多,父rdd的乙個分割槽的資料去到子rdd的不同分割槽裡面,會有shuffle的產生

窄依賴:指的是每乙個父rdd的partition最多被子rdd的乙個partition使用,是一對一的,也就是父rdd的乙個分割槽去到了子rdd的乙個分割槽中,這個過程沒有shuffle產生

區分的標準就是看父rdd的乙個分割槽的資料的流向,要是流向乙個partition的話就是窄依賴,否則就是寬依賴,如圖所示:

spark任務會根據rdd之間的依賴關係,形成乙個dag有向無環圖,dag會提交給dagscheduler,dagscheduler會把dag劃分相互依賴的多個stage,劃分依據就是寬窄依賴,遇到寬依賴就劃分stage,每個stage包含乙個或多個task,然後將這些task以taskset的形式提交給taskscheduler執行,stage是由一組並行的task組成。

stage的task的並行度是由stage的最後乙個rdd的分割槽數來決定的,一般來說,乙個partition對應乙個task,但最後reduce的時候可以手動改變reduce的個數,也就是改變最後乙個rdd的分割槽數,也就改變了並行度。例如:reducebykey(+,3)。

優化 :提高stage的並行度:reducebykey(+,patition的個數) ,join(+,patition的個數)。

dagscheduler分析:

答:是乙個面向stage 的排程器

主要入參有:dagscheduler.runjob(rdd, cleanedfunc, partitions, callsite, allowlocal,resulthandler, localproperties.get)

rdd: final rdd;

cleanedfunc: 計算每個分割槽的函式;

resulthander: 結果偵聽器;

主要功能:

接受使用者提交的job;

將job根據型別劃分為不同的stage,記錄那些rdd,stage被物化,並在每乙個stage內產生一系列的task,並封裝成taskset;

決定每個task的最佳位置,任務在資料所在節點上執行,並結合當前的快取情況,將taskset提交給taskscheduler;

重新提交shuffle輸出丟失的stage給taskscheduler;

注:乙個stage內部的錯誤不是由shuffle輸出丟失造成的,dagscheduler是不管的,由taskscheduler負責嘗試重新提交task執行。

job的生成:

有向無環圖:

答:dag,有向無環圖,簡單的來說,就是乙個由頂點和有方向性的邊構成的圖中,從任意乙個頂點出發,沒有任意一條路徑會將其帶回到出發點的頂點位置。通俗說就是所有任務的依賴關係。為每個spark job計算具有依賴關係的多個stage任務階段,通常根據shuffle來劃分stage,如reducebykey,groupbykey等涉及到shuffle的transformation就會產生新的stage ,然後將每個stage劃分為具體的一組任務,以tasksets的形式提交給底層的任務排程模組來執行,其中不同stage之前的rdd為寬依賴關係,taskscheduler任務排程模組負責具體啟動任務,監控和匯報任務運**況。

spark可以使用 persist 和 cache 方法將任意 rdd 快取到記憶體、磁碟檔案系統中。快取是容錯的,如果乙個 rdd 分片丟失,可以通過構建它的 transformation自動重構。被快取的 rdd 被使用的時,訪問速度會被大大加速。一般的executor記憶體60%做 cache, 剩下的40%做task。

spark中,rdd類可以使用cache() 和 persist() 方法來快取。cache()是persist()的特例,將該rdd快取到記憶體中。而persist可以指定乙個storagelevel。storagelevel的列表可以在storagelevel 伴生單例物件中找到。

spark的不同storagelevel ,目的滿足記憶體使用和cpu效率權衡上的不同需求。我們建議通過以下的步驟來進行選擇:

在不會使用cached rdd的時候,及時使用unpersist方法來釋放它。

乙個spark 作業執行時包括乙個driver 程序,也是作業的主程序,具有main 函式,並且有sparkcontext 的例項,是程式的入口點;

功能:負責向集群申請資源,向master 註冊資訊,負責了作業的排程,負責作業的解析、生成stage 並排程task 到executor 上。包括dagscheduler,taskscheduler。

在master 的切換過程中唯一的影響是不能提交新的job:一方面不能夠提交新的應用程式給集群,因為只有active master 才能接受新的程式的提交請求;另外一方面,已經執行的程式中也不能夠因為action 操作觸發新的job 的提交請求。

大資料面試題

海量資料面試題整理 1.給定a b兩個檔案,各存放50億個url,每個url各佔64位元組,記憶體限制是4g,讓你找出a b檔案共同的url?方案1 可以估計每個檔案安的大小為50g 64 320g,遠遠大於記憶體限制的4g。所以不可能將其完全載入到記憶體中處理。考慮採取分而治之的方法。s 求每對小...

大資料面試題

1.列舉spark 比hadoop 快的原 因 以及現在存在的主要問題 2.描述下使用spark streaming 和 graphx實現實時計算的可行性,以及可能會遇到的問題 3.graphx的pregel api 只支援有向圖遍歷 如何實現無xiang 遍歷,描述思路 4.spark 通過yar...

大資料面試題

1 mapreduce的大致流程 2 列出正確的hadoop集群中hadoop都分別啟動那些程序,他們的作用分別是什麼,盡量詳細些。3 請列出你所知道的hadoop排程器,並簡要說明其工作方法。4.flume不採集nginx日誌,通過logger4j採集日誌,優缺點是什麼?在nginx採集日誌時無法...