spark中local模式与cluster模式使用场景_不可不知的Spark调优点
在利用Spark處理數(shù)據(jù)時,如果數(shù)據(jù)量不大,那么Spark的默認配置基本就能滿足實際的業(yè)務(wù)場景。但是當數(shù)據(jù)量大的時候,就需要做一定的參數(shù)配置調(diào)整和優(yōu)化,以保證業(yè)務(wù)的安全、穩(wěn)定的運行。并且在實際優(yōu)化中,要考慮不同的場景,采取不同的優(yōu)化策略。
1.合理設(shè)置微批處理時間
在SparkSreaming流式處理中,合理的設(shè)置微批處理時間(batchDuration)是非常有必要的。
如果batchDuration設(shè)置過短,會導(dǎo)致SparkStreaming頻繁提交job。如果每個batchDuration所產(chǎn)生的job不能在這個時間內(nèi)完成處理,就會造成job不斷堆積,最終導(dǎo)致SparkStreaming發(fā)生阻塞,甚至程序宕掉。
需要根據(jù)不同的應(yīng)用場景和硬件配置等確定,可以根據(jù)SparkStreaming的可視化監(jiān)控界面,觀察Total Delay等指標來進行batchDuration的調(diào)整。
2.控制消費的最大速率
比如SparkStreaming和Kafka集成,采用direct模式時,需要設(shè)置參數(shù)spark.streaming.kafka.maxRatePerPartition以控制每個Kafka分區(qū)最大消費數(shù)。該參數(shù)默認沒有上線,即Kafka當中有多少數(shù)據(jù)它就會直接全部拉出。
但在實際使用中,需要根據(jù)生產(chǎn)者寫入Kafka的速率以及消費者本身處理數(shù)據(jù)的速度綜合考慮。
同時還需要結(jié)合上面的batchDuration,使得每個partition拉取的數(shù)據(jù),要在每個batchDuration期間順利處理完畢,做到盡可能高的吞吐量,該參數(shù)的調(diào)整需參考可視化監(jiān)控界面中的Input Rate和Processing Time。
3.緩存反復(fù)使用的"數(shù)據(jù)集
"Spark中的RDD和SparkStreaming中的DStream,如果被反復(fù)的使用,最好利用cache或者persist算子,將"數(shù)據(jù)集"緩存起來,防止過度的調(diào)度資源造成的不必要的開銷。
4.合理的設(shè)置GC
JVM垃圾回收是非常消耗性能和時間的,尤其是stop world、full gc非常影響程序的正常運行。
關(guān)于JVM和參數(shù)配置,建議研讀《JVM內(nèi)存管理和垃圾回收》、《JVM垃圾回收器、內(nèi)存分配與回收策略》、《內(nèi)存泄漏、內(nèi)存溢出和堆外內(nèi)存,JVM優(yōu)化配置參數(shù)》。
5.合理設(shè)置CPU
每個executor可以占用一個或多個core,可以通過觀察CPU的使用率變化來了解計算資源的使用情況。
要避免CPU的使用浪費,比如一個executor占用多個core,但是總的CPU利用率卻不高。此時建議讓每個executor占用相對之前較少的core,同時worker下面增加更多的executor進程來增加并行執(zhí)行的executor數(shù)量,從而提高CPU利用率。同時要考慮內(nèi)存消耗,畢竟一臺機器運行的executor越多,每個executor的內(nèi)存就越小,容易產(chǎn)生OOM。
6.使用Kryo進行序列化和反序列化
Spark默認使用Java的序列化機制,但這種Java原生的序列化機制性能卻比Kryo差很多。
使用Kryo需要進行設(shè)置:
//設(shè)置序列化器為KryoSerializerSparkConf.set("spark.serializer","org.apache.spark.serializer.KryoSerializer")
//注冊要序列化的自定義類型SparkConf.registerKryoClasses(Array(classOf[CustomClass1],classOf[CustomClass2]))
7.使用高性能的算子
1)使用reduceByKey、aggregateByKey替代groupByKey
2)filter之后進行coalesce操作
3)使用repartitionAndSortWithinPartition
替代repartition與sort操作
4)使用mapPartition替代map
5)使用foreachPartition替代foreach
要結(jié)合實際使用場景,進行算子的替代優(yōu)化。
除了上述常用調(diào)優(yōu)策略,還有合理設(shè)置Spark并行度,比如參數(shù)spark.default.parallelism的設(shè)置等,所有這些都要求對Spark內(nèi)核原理有深入理解,這里不再一一闡述。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的spark中local模式与cluster模式使用场景_不可不知的Spark调优点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 运放电路的工作原理_图文讲解!教你看懂7
- 下一篇: 如何查看一个组件的 classid是多少