Spark Streaming高級特性在NDCG計算實踐

從storm到spark streaming,再到flink,流式計算獲得長足發展, 依託於spark平臺的spark streaming走出了一條本身的路,其借鑑了spark批處理架構,經過批處理方式實現了實時處理框架。爲進一步瞭解spark streaming的相關內容,飛馬網於3月20日晚邀請到歷任百度大數據的高級工程師—王富平,在線上直播中,王老師針對spark streaming高級特性以及ndcg計算實踐進行了分享。java

幻燈片0.jpg 

如下是本次直播的主要內容:sql

一.Spark Streaming簡介數據庫

 

1.spark是什麼?緩存

spark就是一個批處理框架,它具備高性能、生態豐富的優點。安全

幻燈片1.jpg 

在沒有spark以前,咱們是怎麼作大數據分析的呢?其實在沒有spark以前,咱們用的是基於Hadoop的MapReduce框架來作數據分析。時至今日,傳統的MapReduce任務並無徹底退出市場,在一些數據量很是大的場景下,MapReduce表現地仍是至關穩定的。架構

 

2.spark streaming是什麼?框架

spark streaming是按時間對數據進行分批處理的框架,.spark平臺帶來的優點,使得spark streaming開發簡單、普遍使用。運維

幻燈片2.jpg 

spark streaming的實現方式是基於spark的批處理理念,所以它能夠直接使用spark平臺提供的工具組件。分佈式

 

幻燈片3.jpg 

經過上面這張圖,咱們能夠把spark streaming的輸入當成一個數據流,經過時間將數據進行分批處理,分批時間根據咱們本身的業務狀況而定。函數

 

3.WordCount的例子:

下面舉一個WordCount的例子,咱們能夠看到,短短几行代碼,就實現了一個WordCount。因爲spark平臺與Hadoop是直接打通的,咱們能夠很方便地把數據保存到HDFS或數據庫裏,只須要運維一套spark平臺,咱們就能夠既作實時任務,又作離線分析任務,比較方便。

幻燈片4.jpg 

二.Spark Streaming的高級特性

 

1.Window特性:

幻燈片5.jpg 

基於上面簡單的WordCount例子,咱們升級一下,假設咱們須要每十秒鐘統計一次單詞在前一分鐘內出現次數,這個需求不是簡單的WordCount可以實現的,這時候,咱們就要使用到spark streaming提供的Window機制。

 

幻燈片6.jpg

 

 

關於spark streaming的Window特性,有三個參數須要注意:Batch Internal(分批時間間隔)、Window width(窗口長度)、Sliding Internal(窗口滑動間隔)。根據剛纔的需求,窗口長度是60s,窗口滑動間隔是10s,分批時間間隔是1s,這裏須要注意,分批時間間隔必須能被窗口長度和窗口滑動間隔整除。

 

  

經過講述,或許你感受Window特性有些複雜,但實際上,建立一個窗口的流是很是簡單的,下面的兩張圖,是關於建立Window數據流和Window相關計算函數的,能夠簡單瞭解下。

幻燈片7.jpg 

幻燈片8.jpg 

下面這張圖片是計算30s窗口期內的請求失敗率。咱們看一下它的參數,窗口時間設置爲30s,滑動間隔是2s。整個代碼很是簡單,只須要多加一行代碼,就能實現窗口流,以後這個流就能作一些正常計算。

幻燈片9.jpg 

咱們簡單讀一下這個函數,首先建立一個窗口流,以後在任務裏面計算失敗的條數,用它來除以總條數,就獲得請求失敗率。

 

2.Sql特性:

spark streaming的第二個特性就是Sql特性,spark streaming把數據封裝成DataFrame以後,自然就可使用spark sql特性。

幻燈片10.jpg 

想完整使用寫sql的方式,咱們首先要註冊臨時表。咱們註冊的臨時表還能夠與咱們建的多張臨時表作join關聯,比較實用。

 

使用sql,自定義函數會給咱們帶來不少擴展性,定義UDF有兩種方式:加載jar包UDF和動態定義UDF。

幻燈片11.jpg 

4.CheckPoint機制:

Spark經過使用CheckPoint保存處理狀態甚至當前處理數據,一旦任務失敗後,能夠利用CheckPoint對數據進行恢復。咱們作數據處理,數據可靠性是很重要的,必須保證數據不丟失,Spark的CheckPoint機制就是幫助咱們保障數據安全的。

CheckPoint機制主要有兩種:

幻燈片12.jpg 

 

那麼怎麼去實現CheckPoint機制呢?

有如下三個條件:

幻燈片13.jpg 

幻燈片14.jpg 

咱們來對比一下有WAL和無WAL的兩張圖。實際上有WAL,它首先會把數據先存到HDFS,而後對任務邏輯進行備份,再去執行處理,任務失敗時,它會根據CheckPoint的數據,去讀HDFS保存的數據,進行任務恢復。但實際上,這樣會有缺點,一方面是下降了receivers的性能,另外一方面它只能保證At-Least-Once,不能保證exactly-once。

 

針對WAL的缺點,spark streaming對kafka進行優化,提供了Kafka direct API,性能大大提高。

幻燈片15.jpg 

三.NDCG指標計算

 

1.NDCG是什麼?

幻燈片16.jpg 

下面兩張圖片,是NDCG計算的具體例子。

幻燈片17.jpg 

幻燈片18.jpg 

2.NDCG在spark streaming實現:

咱們如何用spark streaming實現NDCG計算呢?首先咱們作了一個數據調研。

幻燈片19.jpg 

開始進行NDCG計算。

幻燈片20.jpg 

3.NDCG性能保障:

咱們開發一個數據任務,不是靜態工做,要保障數據的穩定性,根據數據的狀況,作一個容量預估,以保證數據的性能。容量預估是一個必不可少的步驟。

幻燈片21.jpg 

咱們最多見的容量調節。

幻燈片22.jpg 

在NDCG指標計算過程當中,咱們還會遇到一些問題,就是NDCG支持四個維度的組合計算,維度組合較多、較複雜。

幻燈片23.jpg 

這時候,多維分析就要藉助於咱們的OLAP引擎,目前咱們使用的是Druid。

幻燈片24.jpg 

以上三大部分,就是此次線上直播分享的主要內容,在最後,王老師還針對你們提出的問題進行了一一解答,都有些什麼問題呢?咱們一塊兒來看一下。

 

 

1.每間隔5s讀一批數據,須要遍歷天天數據進行各類計算分析,計算的結果還須要緩存做爲下一次計算的參考,怎麼實現?

王老師:這是一個實時任務,須要存儲狀態數據的話,有幾種實現方式,第一個是spark streaming有保存狀態數據的機制,第二種方式是,你能夠把狀態數據保存在一些KV數據庫裏,好比說spark等,也能夠經過這種方式本身實現,無論哪條路,關鍵在於怎麼實現。

 

2.學spark有推薦的上船方式麼?

王老師:你們不要把spark看得那麼神奇,java8裏面提供的stream處理方式相關知識,和寫spark沒有多大區別,原理都是同樣的,你理解了java8怎麼寫、stream處理的各類方法和計算邏輯,那麼你就能理解spark streaming裏的各類計算邏輯,spark streaming惟一高大上的就是它作的分佈式。

 

3. spark streaming 未來最有可能被什麼技術取代?

王老師:每一個平臺都有各自的優缺點,目前來看,雖然Flink比較火,可是Storm依然存在,Spark也有本身所適合的場景,Flink也有它自己先進的機制,因此說,各有優點。

 

 

最後,王老師向你們推薦了關於scala最經典的一本書—《programming in scala》,本次針對 spark streaming的直播內容簡明且有針對性,相信你必定收穫頗多。想了解更多更詳細內容的小夥伴們,能夠關注服務號:FMI飛馬網,點擊菜單欄飛馬直播,便可進行學習。

 

服務號.jpg

相關文章
相關標籤/搜索