SparkStreaming推測機制:面試被問遇到什麼問題,說這個顯水平!

背景

老劉最近晚上會刷刷牛客網的大數據開發面經,老是會看到一個高頻的面試題,那就是你在學習過程當中遇到過什麼問題嗎?面試

這個問題其實有點難回答,若是我說的太簡單了,會不會讓面試官以爲水平過低,那我應該講什麼東西呢?我一個自學的不可能遇到什麼高級問題呀!框架

對於這個問題的答案網上也是衆說紛紜,老劉也講講對這個問題的見解,分享一下本身的看法,歡迎各位夥伴前來battle!學習

過程

在尋找這個問題答案的過程當中,老劉正好在學習spark框架的實時計算模塊SparkStreaming,它裏面就有一個很是經典的問題,關於推測機制的!大數據

什麼是推測機制?spa

若是有不少個task都在運行,不少task一下就完成了本身的任務,可是有一個task運行的很慢。在實時計算任務中,若是對實時性要求比較高,就算是兩三秒也要在意這些。視頻

因此在sparkstreaming中有一個推測機制專門來解決這個運行的很慢的task。blog

每隔一段時間來檢查有哪些正在運行的task須要從新調度,假設總的task有10個,成功運行的task數量>0.75x10,正在運行的task的運行時間>1.5x成功運行task的平均時間,則這個正在運行的task須要從新等待調度。開發

可是這裏有一個很嚴重的問題,最開始自學的時候發現了,接着在看一些機構視頻裏面也有講到這個問題,說明老劉在自學過程當中覺悟也在慢慢提升。spark

這個問題就是若是這個正在運行的task遇到數據傾斜怎麼辦?stream

假若有5個task,有一個task遇到了數據傾斜,但就算遇到數據傾斜(稍微有點數據傾斜,也沒事),它也會完成任務,它須要6s,其餘4個任務只須要1s。那開啓推測機制後,這個任務好不容易運行到了2s,快要成功了,但遇到了推測機制,它就須要從新調度從新運行,下一次運行了3s,遇到推測機制就會從新運行,整個過程一直在循環,這就是老劉要說的問題!

某個培訓機構視頻裏面的老師說這個問題還行,老劉本身也想到了看出了推測機制的這個缺點,因此就分享給你們!

解決

那開啓推測機制遇到數據傾斜,怎麼辦?

咱們能夠採用一些解決數據傾斜的辦法,老劉大體講一下關於數據傾斜的幾個解決方案:

一、若是發現致使數據傾斜的key就幾個,並且對計算自己的影響並不大的話,就能夠採用過濾少數致使傾斜的key

二、兩階段聚合,將本來相同的key經過附加隨機前綴的方式,變成多個不一樣的key,就可讓本來被一個task處理的數據分散到多個task上去作局部聚合,進而解決單個task處理數據量過多的問題。接着去除掉隨機前綴,再次進行全局聚合,就能夠獲得最終的結果。可是這個方法只適用於聚合類的shuffle操做,不適合join類的shuffle操做。

三、對於join致使的數據傾斜,若是隻是某幾個key致使了傾斜,能夠將少數幾個key分拆成獨立RDD,並附加隨機前綴打散成n份去進行join,此時這幾個key對應的數據就不會集中在少數幾個task上,而是分散到多個task進行join了。適用於兩個數據量比較大的表進行join。

四、若是在進行join操做時,RDD中有大量的key致使數據傾斜,那麼進行分拆key也沒什麼意義,此時就只能使用這一種方案來解決問題了。將原先同樣的key經過附加隨機前綴變成不同的key,而後就能夠將這些處理後的「不一樣key」分散到多個task中去處理,而不是讓一個task處理大量的相同key。

好啦,SparkStreaming推測機制講完了,你們之後能夠拿這塊的內容回答面試官。若是有什麼問題,能夠聯繫公衆號:努力的老劉,歡迎你們來和老劉battle!

相關文章
相關標籤/搜索