Spark開發注意事項小結(性能方面)

1. 平臺全局配置序列化方式 : kyro

spark-default.conf : spark.serializer org.apache.spark.serializer.KryoSerializer

使用自定義類時,對類進行註冊,否則會存儲每個對象的全類名(full class name)

備註:如果序列化對象較大,提高 spark.kryoserializer.buffer 的值


2. 對多次使用的RDD進行持久化 / Checkpoint


3. 優化數據結構

  1. 優先使用數組以及字符串,而不是集合類
  2. 避免使用多層嵌套的對象結構
  3. 對於有些能夠避免的場景,儘量使用int替代String

4. 並行度設置

Spark官方推薦:設置集羣總CPU數量的兩倍到三倍的並行度


5. 廣播共享數據


6. 優先使用reduceByKey

只有在reduceByKey處理不了時,才用groupByKey().map()來替代


7. 其他進一步提升點

7. 1 設置 spark.locality 系列參數

調節Spark等待task可以進行數據本地化的時間

7. 2 調節executor內存比例

默認 60% 給 RDD 進行緩存,40% 給Task來存放運行期間動態創建的對象

Task內存空間小,會導致GC觸發頻繁

new SparkConf().set(“spark.storage.memoryFraction”, “0.5”)

7.3 降低FullGC的方法:

  1. 降低spark.storage.memoryFraction的比例,給年輕代更多的空間,來存放短時間存活的對象;
  2. 給Eden區域分配更大的空間,使用-Xmn即可,通常建議給Eden區域,預計大小的4/3;
  3. 如果使用的是HDFS文件,那麼很好估計Eden區域大小,如果每個executor有4個task,然後每個hdfs壓縮塊解壓縮後大小是3倍,此外每個hdfs塊的大小是128M,那麼Eden區域的預計大小就是:4 * 3 * 128MB,然後呢,再通過-Xmn參數,將Eden區域大小設置爲4 * 3 * 128 * 4/3。

7.4 針對Shuffle優化

有序補充詳細專題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章