spark 調優(官方文件)
阿新 • • 發佈:2018-11-29
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.