鎖屏面試題百日百刷-Spark篇(二十一)
鎖屏面試題百日百刷,每個工作日堅持更新面試題。鎖屏面試題app、小程序現(xiàn)已上線,官網(wǎng)地址:https://www.demosoftware.cn。已收錄了每日更新的面試題的所有內(nèi)容,還包含特色的解鎖屏幕復(fù)習(xí)面試題、每日編程題目郵件推送等功能。讓你在面試中先人一步!接下來的是今日的面試題:
1.Spark RDD?和?MapReduce2的區(qū)別
1)mr2只有2個階段,數(shù)據(jù)需要大量訪問磁盤,數(shù)據(jù)來源相對單一?,spark RDD ,可以無數(shù)個階段進(jìn)行迭代計算,數(shù)據(jù)來源非常豐富,數(shù)據(jù)落地介質(zhì)也非常豐富spark計算基于內(nèi)存;
2)MapReduce2需要頻繁操作磁盤IO需要 大家明確的是如果是SparkRDD的話,你要知道每一種數(shù)據(jù)來源對應(yīng)的是什么,RDD從數(shù)據(jù)源加載數(shù)據(jù),將數(shù)據(jù)放到不同的partition針對這些partition中的數(shù)據(jù)進(jìn)行迭代式計算計算完成之后,落地到不同的介質(zhì)當(dāng)中。
2.spark和Mapreduces誰快??為什么快呢??快在哪里呢?
Spark更加快的主要原因有幾點(diǎn):
1)基于內(nèi)存計算,減少低效的磁盤交互;
2)高效的調(diào)度算法,基于DAG;
3)容錯機(jī)制Lingage,主要是DAG和Lianage,及時spark不使用內(nèi)存技術(shù),也大大快于mapreduce。
3.Spark sql又為什么比hive快呢?
計算引擎不一樣,一個是spark計算模型,一個是mapreudce計算模型。
另外spark sql中有RBO CBO的優(yōu)化。
4.RDD的數(shù)據(jù)結(jié)構(gòu)是怎么樣的?五大屬性
RDD對象,包含如下5個核心屬性。
1)一個分區(qū)列表,每個分區(qū)里是RDD的部分?jǐn)?shù)據(jù)(或稱數(shù)據(jù)塊)。
2)一個依賴列表,存儲依賴的其他RDD。
3)一個名為compute的計算函數(shù),用于計算RDD各分區(qū)的值。
4)分區(qū)器(可選),用于鍵/值類型的RDD,比如某個RDD是按散列來分區(qū)。
5)計算各分區(qū)時優(yōu)先的位置列表(可選),比如從HDFS上的文件生成RDD時,RDD分區(qū)的位置優(yōu)先選擇數(shù)據(jù)所在的節(jié)點(diǎn),這樣可以避免數(shù)據(jù)移動帶來的開銷。
5.RDD算子里操作一個外部map比如往里面put數(shù)據(jù),然后算子外再遍歷map,會有什么問題嗎?
頻繁創(chuàng)建額外對象,容易o(hù)om。
6.畫圖,講講Spark shuffle的過程。

SortShuffleManager的運(yùn)行機(jī)制主要分成兩種,一種是普通運(yùn)行機(jī)制,另一種是bypass運(yùn)行機(jī)制。當(dāng)shuffle read task的數(shù)量小于等于spark.shuffle.sort.bypassMergeThreshold參數(shù)的值時(默認(rèn)為200),就會啟用bypass機(jī)制。
?

Sort shuffle的bypass機(jī)制

bypass運(yùn)行機(jī)制的觸發(fā)條件如下:
1)shuffle map task數(shù)量小于spark.shuffle.sort.bypassMergeThreshold參數(shù)的值。
2)不是聚合類的shuffle算子(比如reduceByKey)。
此時task會為每個reduce端的task都創(chuàng)建一個臨時磁盤文件,并將數(shù)據(jù)按key進(jìn)行hash然后根據(jù)key的hash值,將key寫入對應(yīng)的磁盤文件之中。當(dāng)然,寫入磁盤文件時也是先寫入內(nèi)存緩沖,緩沖寫滿之后再溢寫到磁盤文件的。最后,同樣會將所有臨時磁盤文件都合并成一個磁盤文件,并創(chuàng)建一個單獨(dú)的索引文件。