鎖屏面試題百日百刷-Spark篇(四)
?鎖屏面試題百日百刷,每個工作日堅持更新面試題。鎖屏面試題app、小程序現(xiàn)已上線,官網(wǎng)地址:https://www.demosoftware.cn。已收錄了每日更新的面試題的所有內(nèi)容,還包含特色的解鎖屏幕復(fù)習(xí)面試題、每日編程題目郵件推送等功能。讓你在面試中先人一步!接下來的是今日的面試題:
1.簡述Spark的兩種核心Shuffle(HashShuffle與SortShuffle)的工作流程(包括未優(yōu)化的HashShuffle、優(yōu)化的HashShuffle、普通的SortShuffle與bypass的SortShuffle)(重點)
未經(jīng)優(yōu)化的HashShuffle:


?
優(yōu)化后的Shuffle

普通的SortShuffle:

當(dāng)?shuffle read task?的 數(shù) 量 小 于 等 于?spark.shuffle.sort。
bypassMergeThreshold?參數(shù)的值時(默認(rèn)為?200),就會啟用?bypass?機制。

2.Spark常用算子reduceByKey與groupByKey的區(qū)別(重點)
reduceByKey:按照key進行聚合,在shuffle之前有combine(預(yù)聚合)操作,返回結(jié)果是RDD[k,v]。
groupByKey:按照key進行分組,直接進行shuffle。
開發(fā)指導(dǎo):reduceByKey比groupByKey,建議使用。但是需要注意是否會影響業(yè)務(wù)邏輯。
3.簡述Spark中共享變量(廣播變量和累加器)的基本原理
累加器(accumulator)是Spark中提供的一種分布式的變量機制,其原理類似于mapreduce,即分布式的改變,然后聚合這些改變。累加器的一個常見用途是在調(diào)試時對作業(yè)執(zhí)行過程中的事件進行計數(shù)。而廣播變量用來高效分發(fā)較大的對象。
共享變量出現(xiàn)的原因:
通常在向?Spark?傳遞函數(shù)時,比如使用?map()?函數(shù)或者用?filter()?傳條件時,可以使用驅(qū)動器程序中定義的變量,但是集群中運行的每個任務(wù)都會得到這些變量的一份新的副本,更新這些副本的值也不會影響驅(qū)動器中的對應(yīng)變量。
Spark的兩個共享變量,累加器與廣播變量,分別為結(jié)果聚合與廣播這兩種常見的通信模式突破了這一限制。
4.Transformation和action是什么?舉幾個常用方法
RDD?創(chuàng)建后就可以在?RDD?上進行數(shù)據(jù)處理。RDD?支持兩種操作: 1.?轉(zhuǎn)換(transformation):?即從現(xiàn)有的數(shù)據(jù)集創(chuàng)建一個新的數(shù)據(jù)集?2.?動作(action):?即在數(shù)據(jù)集上進行計算后,返回一個值給?Driver?程序
RDD?的轉(zhuǎn)化操作是返回一個新的?RDD?的操作,比如?map()?和?filter()?,而行動操作則是向驅(qū)動器程序返回結(jié)果或把結(jié)果寫入外部系統(tǒng)的操作,會觸發(fā)實際的計算,比如?count()?和?first()?。Spark?對待轉(zhuǎn)化操作和行動操作的方式很不一樣,因此理解你正在進行的操作的類型是很重要的。如果對于一個特定的函數(shù)是屬于轉(zhuǎn)化操作還是行動操作感到困惑,你可以看看它的返回值類型:轉(zhuǎn)化操作返回的是?RDD,而行動操作返回的是其他的數(shù)據(jù)類型。
RDD?中所有的?Transformation?都是惰性的,也就是說,它們并不會直接計算結(jié)果。相反的它們只是記住了這些應(yīng)用到基礎(chǔ)數(shù)據(jù)集(例如一個文件)上的轉(zhuǎn)換動作。只有當(dāng)發(fā)生一個要求返回結(jié)果給?Driver?的?Action?時,這些Transformation?才會真正運行。
這個設(shè)計讓?Spark?更加有效的運行。