更新時(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è)置一下即可
云計(jì)算大數(shù)據(jù)培訓(xùn)之Spark-Streaming的基本原理以及預(yù)寫日志機(jī)制和checkpoint(2)
2017-09-01云計(jì)算大數(shù)據(jù)培訓(xùn)之Spark-Streaming的基本原理以及預(yù)寫日志機(jī)制和checkpoint(1)
2017-09-01云計(jì)算大數(shù)據(jù)培訓(xùn)之10個(gè)常見誤解:算法即預(yù)言家、大數(shù)據(jù)必干凈(下)
2017-08-31云計(jì)算大數(shù)據(jù)培訓(xùn)之10個(gè)常見誤解:算法即預(yù)言家、大數(shù)據(jù)必干凈(上)
2017-08-31