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

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

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

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

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

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

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



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