spark 調優(官方文檔)
阿新 • • 發佈:2018-11-29
gist broadcast html indent transform letter tex cast apache 1.序列化
對象在進行網絡傳輸或進行持久化時需要進行序列化,如果采用序列化慢或者消耗大量字節的序列化格式,則會拖慢計算。
spark 提供了兩種序列化類庫
1). Java serialization
靈活,但是很慢
2) Kryo serialization
比java 快10倍,緊湊,不支持所有 Serializable類型,使用方法
a.在saprkconf 中設置序列化的類
conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer").
b.可選
設置spark.kryo.registrationRequired 為true, 則必須顯示聲明需要序列化的類,否則會報錯
sconf.set("spark.kryo.registrationRequired","true")
sconf.registerKryoClasses(Array(
classOf[NullWritable],
classOf[Array[String]])
)
如果序列化的對象較大,可以調整 spark.kryoserializer.buffer (默認6k)。如果不註冊需要序列化的類,則序列化時會保存類的全稱,比慘耗內存
2.內存優化
Java對象訪問速度很快,但與其字段中的“原始”數據相比,可以輕松占用2-5倍的空間。縮小內存的方法
1)盡量使用array[object] 和基本類型,避免使用 hashmap 等標準集合
2)盡量避免使用包含大量小對象和指針的嵌套結構
3)rdd 緩存時盡量使用序列化格式,比如MEMORY_ONLY_SER,
4)gc 調優?
3.資源允許的情況下增加任務的並行度,充分利用集群資源
4..提高reduceByKey,groupByKey 等shuffle 操作的並行度,以降低每個task 處理的數據量,減少oom
5.大的變量 進行broadcast
6.
spark 調優(官方文檔)