首頁技術(shù)文章正文

云計算大數(shù)據(jù)培訓(xùn)之Spark-Streaming的基本原理以及預(yù)寫日志機制和checkpoint(3)

更新時間:2017-09-01 來源:黑馬程序員云計算大數(shù)據(jù)培訓(xùn)學院 瀏覽量:

合適啟用checkpoint機制 
1.使用了有狀態(tài)的transformation操作—比如updateStateByKey,或者reduceByKeyAndWindow操作被使用了, 
那么checkpoint目錄要求是必須提供的,也就必須開啟checkpoint機制,從而進行周期性的RDD checkpoint 
2.要保證可以從Driver失敗中進行恢復(fù)—元數(shù)據(jù)checkpoint需要啟用,來進行這種情況的恢復(fù), 
要注意的是,并不是說所有的Spark-Streaming應(yīng)用程序,都要啟用checkpoint機制,如果不強制要求從Driver 
失敗中自動進行恢復(fù),有沒有使用有狀態(tài)的transformation操作,那么就不需要啟用checkpoint,事實上 
這么做反而是用利于提升性能的。

啟動預(yù)寫日志機制 
預(yù)寫日志機制,簡寫為WAL,全稱為Write Ahead Log,從Spark 1.2版本開始,就引入了基于容錯的文件系統(tǒng)的WAL機制,如果啟用該機制,Receiver接收到的所有數(shù)據(jù)都會被寫入配置的checkpoint目錄中的預(yù)寫日志這種機制可以讓driver在恢復(fù)的時候,避免數(shù)據(jù)丟失,并且可以確保整個實時計算過程中,零數(shù)據(jù)丟失

要配置該機制,首先要調(diào)用StreamingContext的checkpoint()方法設(shè)置一個checkpoint目錄,然后需要將spark.streaming.receiver.writeAheadLog.enable參數(shù)設(shè)置為true

然而這種極強的可靠性機制,會導(dǎo)致Receiver的吞吐量大幅度下降,因為單位時間內(nèi)有相當一部分時間需要將數(shù)據(jù)寫入預(yù)寫日志,如果又希望開啟預(yù)寫日志機制,確保數(shù)據(jù)零損失,又不希望影響系統(tǒng)的吞吐量,那么可以創(chuàng)建多個輸入DStream啟動多個Reciver,然后將這些receiver接收到的數(shù)據(jù)使用ssc.union()方法將這些dstream中的數(shù)據(jù)進行合并 
此外在啟用了預(yù)寫日志機制之后,推薦將復(fù)制持久化機制禁用掉,因為所有數(shù)據(jù)已經(jīng)保存在容錯的文件系統(tǒng)中了,不需要再用復(fù)制機制進行持久化,保存一份副本了,只要將輸入的DStream的持久化機制設(shè)置一下即可



本文版權(quán)歸黑馬程序員云計算大數(shù)據(jù)培訓(xùn)學院學院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:黑馬程序員云計算大數(shù)據(jù)培訓(xùn)學院
首發(fā):http://cloud.itheima.com/ 
分享到:
在線咨詢 我要報名
和我們在線交談!