1. 程式人生 > >spark調優-第一天

spark調優-第一天

         廣大的部落格友們,你們好,在這個剛過完冬至的第一個週末,下班了坐在電腦前對著電腦想了想最近做的專案,spark實時統計分析,真的非常累,做專案的時候不是你把程式碼寫完了就可以了,還要做優化的,讓程式跑的更快,更流暢,本人在公司也負責了小段時間的spark調優,之前做的hadoop調優,自己感覺spark調優跟hadoop差不多,都是從一些層面分析的,設定一些屬性值等等。好啦,不多說了,開始進入正題,這篇部落格是我集合專案中正在用到跟用到的跟大家介紹下,其中有的部分也是在網上查的資料,當然這麼多調優不可能全部用到,今天先給大家做一個大體的調優方案,可以從以下方面入手。更詳細的下篇部落格,

  • 效能調優:
    1. 分配更多資源
    2. 調節並行度
    3. RDD持久化
    4. 廣播變數
  • JVM調優
    1. 降低cache操作的記憶體佔比
    2. 調節executor堆外記憶體與連線等待時長
  • Shuffle調優
    1. 合併map端輸出檔案
    2. 調節map端記憶體緩衝(32KB)跟reduce端記憶體佔比(0.2)
    3. 合理使用hashShuffleManager,sortShuffleManger,tungsten-sort
  • 運算元調優
    1. MapPartitions提升Map類操作效能
    2. filter過後使用coalesce減少分割槽數量
    3. 使用foreachPartition優化寫資料庫效能
    4. 使用repartition解決Spark SQL低並行度的效能問題
    5. reduceByKey本地聚合介紹
  • troubleshooting(故障排除)
    1. 控制shuffle reduce端緩衝大小以避免OOM
    2. 解決JVM GC導致的shuffle檔案拉取失敗
    3. YARN佇列資源不足導致的application直接失敗
    4. 解決各種序列化導致的報錯
    5. 解決運算元函式返回NULL導致的問題
    6. 解決yarn-client模式導致的網絡卡流量激增問題
    7. 解決yarn-cluster模式的JVM棧記憶體溢位問題
    8. 錯誤的持久化方式以及checkpoint的使用
  • 資料傾斜解決方案
    1. 聚合源資料以及過濾導致傾斜的key
    2. 提高shuffle操作reduce並行度
    3. 提升shuffle reduce端並行度的操作方法
    4. 使用隨機key實現雙重聚合
    5. 將reduce join轉換為map join
    6. ample取樣傾斜key單獨進行join使用隨機數以及擴容表進行join