鎖屏面試題百日百刷-Spark篇(十六)
鎖屏面試題百日百刷,每個工作日堅持更新面試題。鎖屏面試題app、小程序現(xiàn)已上線,官網(wǎng)地址:https://www.demosoftware.cn。已收錄了每日更新的面試題的所有內(nèi)容,還包含特色的解鎖屏幕復(fù)習面試題、每日編程題目郵件推送等功能。讓你在面試中先人一步!接下來的是今日的面試題:
1.spark中cache后面能不能接其他算子,它是不是action操作?
答:cache可以接其他算子,但是接了算子之后,起不到緩存應(yīng)有的效果,因為會重新觸發(fā)cache。
2.reduceByKey是不是action?
答:不是,很多人都會以為是action,reduce rdd是action
3.Spark提交你的jar包時所用的命令是什么?
答:spark-submit。
4.Spark有哪些聚合類的算子,我們應(yīng)該盡量避免什么類型的算子?
答:在我們的開發(fā)過程中,能避免則盡可能避免使用reduceByKey、join、distinct、repartition等會進行shuffle的算子,盡量使用map類的非shuffle算子。這樣的話,沒有shuffle操作或者僅有較少shuffle操作的Spark作業(yè),可以大大減少性能開銷。
5.對于Spark中的數(shù)據(jù)傾斜問題你有什么好的方案?
1)前提是定位數(shù)據(jù)傾斜,是OOM了,還是任務(wù)執(zhí)行緩慢,看日志,看WebUI
2)解決方法,有多個方面
(1)避免不必要的shuffle,如使用廣播小表的方式,將reduce-side-join提升為map-side-join
(2)分拆發(fā)生數(shù)據(jù)傾斜的記錄,分成幾個部分進行,然后合并join后的結(jié)果
(3)改變并行度,可能并行度太少了,導(dǎo)致個別task數(shù)據(jù)壓力大
(4)兩階段聚合,先局部聚合,再全局聚合
(5)自定義paritioner,分散key的分布,使其更加均勻
詳細解決方案參考我們的教案或者博文《Spark數(shù)據(jù)傾斜優(yōu)化方法》
6.RDD創(chuàng)建有哪幾種方式?
1)使用程序中的集合創(chuàng)建rdd
2)使用本地文件系統(tǒng)創(chuàng)建rdd
3)使用hdfs創(chuàng)建rdd,
4)基于數(shù)據(jù)庫db創(chuàng)建rdd
5)基于Nosql創(chuàng)建rdd,如hbase
6)基于數(shù)據(jù)流,如socket創(chuàng)建rdd
如果只回答了前面三種,是不夠的,只能說明你的水平還是入門級的,實踐過程中有很多種創(chuàng)建方式。
7.Spark并行度怎么設(shè)置比較合適
spark并行度,每個core承載2~4個partition,如,32個core,那么64~128之間的并行度,也就是設(shè)置64~128個partion,并行讀和數(shù)據(jù)規(guī)模無關(guān),只和內(nèi)存使用量和cpu使用時間有關(guān)。
8.Spark中數(shù)據(jù)的位置是被誰管理的?
每個數(shù)據(jù)分片都對應(yīng)具體物理位置,數(shù)據(jù)的位置是被blockManager,無論數(shù)據(jù)是在磁盤,內(nèi)存還是tacyan,都是由blockManager管理。
9.Spark的數(shù)據(jù)本地性有哪幾種?
答:Spark中的數(shù)據(jù)本地性有三種:
1)PROCESS_LOCAL是指讀取緩存在本地節(jié)點的數(shù)據(jù)
2)NODE_LOCAL是指讀取本地節(jié)點硬盤數(shù)據(jù)
3)ANY是指讀取非本地節(jié)點數(shù)據(jù)
通常讀取數(shù)據(jù)PROCESS_LOCAL>NODE_LOCAL>ANY,盡量使數(shù)據(jù)以PROCESS_LOCAL或NODE_LOCAL方式讀取。其中PROCESS_LOCAL還和cache有關(guān),如果RDD經(jīng)常用的話將該RDD cache到內(nèi)存中,注意,由于cache是lazy的,所以必須通過一個action的觸發(fā),才能真正的將該RDD cache到內(nèi)存中。