spark调优1
2019獨角獸企業重金招聘Python工程師標準>>>
https://spark.apache.org/docs/1.2.1/tuning.html
Data Serialization
spark現在提供Java serialization和Kryo serialization庫
Java serialization比較慢,Kryo serialization比較快
Memory Tuning
Determining Memory Consumption
衡量你的數據集消耗內存量最好的方式是創建RDD,并放入cache中,通過查看你的driver程序SparkContext logs來得出結論。
Tuning Data Structures
降低內存消耗的第一種方式是避免使用增加開銷的java特性,例如基于指針的數據結構和封裝的對象。有幾種方法來避免:
1.將你的數據結構設計為對象的數組,或者原始類型,而不是java或者scala集合類(例如HashMap)
fastutil庫提供原始數據類型的方便集合類,并且這些類與java標準庫兼容。(http://fastutil.di.unimi.it/)
2.如果可以的話,避免使用有很多小對象的內嵌數據結構
3.考慮使用數字id或者枚舉對象來代替string作為key
4.如果給spark使用的內存少于32g,設置JVM flag -XX:+UseCompressedOops來使指針的大小從原來的8個byte變成4個byte.
你可以在spark-env.sh里添加這個參數。
Serialized RDD Storage
當你的對象通過調優高效地存儲后仍然很大,一個簡單的減少內存使用的方式是以序列化格式的方式存儲對象,使用 RDD persistence API中序列化的等級來指定,例如MEMORY_ONLY_SER。
spark將每個RDD塊存儲為一個大的byte數組。將存儲的數據序列化唯一的缺點是訪問時間變慢了,這應歸于服務器一直在忙碌于每個對象的反序列化。
如果你想在內存中以序列化格式保存數據,我們極力地推薦使用Kryo庫,因為這會產生比java序列化小很多的文件大小。(當然會比沒有序列化的原生java object更小)
Garbage Collection Tuning
轉載于:https://my.oschina.net/forrest420/blog/502460
總結
- 上一篇: PEP 0498 -- Literal
- 下一篇: 数据结构例程——线性表顺序存储的应用