Spark Streaming是架構(gòu)在Spark Core上的一個“應(yīng)用”啄栓,SparkStreaming主要由DStreamGraph撞叽、Job的生成姻成、數(shù)據(jù)的接收和導(dǎo)入以及容錯四大模塊組成,我們今天就從這四大模塊入手愿棋,看看每個模塊都有什么樣的調(diào)優(yōu)方式
1 DStreamGraph
其實(shí)這部分主要是算子的使用優(yōu)化科展,這個跟Spark調(diào)優(yōu)的內(nèi)容是相同,在這一部分可以優(yōu)化的內(nèi)容有
- 重復(fù)使用的rdd進(jìn)行cache
- 使用高性能的算子代替性能差的算子
- reduceByKey\aggregateByKey代替groupByKey
- 使用mappartition代替map
- 使用foreachpartition代替foreach
- 使用Kryo序列化代替Java序列化
- filter之后使用coalesce減少小任務(wù)
2 Job的生成
這一部分主要涉及到的調(diào)優(yōu)是batchInternal的調(diào)整糠雨,為了程序不延遲地執(zhí)行才睹,合理的batchInternal是必要的
3 數(shù)據(jù)的接收和導(dǎo)入
這一部分主要是針對數(shù)據(jù)的接受速度進(jìn)行調(diào)優(yōu),如果接收速度大于處理數(shù)據(jù)甘邀,那么程序會走向無限延遲最后崩潰的道路,所以主要的調(diào)優(yōu)在于限速
對于receiver和direct approach 方式都通用的
spark.streaming.backpressure.enabled=true; sparkstreaming框架會自動地計算處理速度來控制數(shù)據(jù)的接受速度琅攘,建議開啟-
receiver方式
- spark.streaming.receiver.maxRate 來進(jìn)行限速
- spark.streaming.blockInternal 設(shè)置緩存在內(nèi)存塊的大小,防止內(nèi)存被撐爆
-
direct approach方式
- spark.streaming.kafka.maxRatePartition來對每個分區(qū)進(jìn)行限速
4 容錯
主要是數(shù)據(jù)的容錯方式選擇
- 熱備:默認(rèn)開啟數(shù)據(jù)備份數(shù)為2
- 冷備:開啟WAL松邪,將log保存到HDFS上坞琴,executor掛掉后可以從hdfs上進(jìn)行數(shù)據(jù)的恢復(fù)
- 重放:對于數(shù)據(jù)源本身支持重放有效,如Kafka逗抑,失效后可以通過offset值進(jìn)行恢復(fù)