spark 優化套路

spark整個api上手較爲簡單,scala表達起來比較順暢,java根據spark官方文檔,理解scala的幾個特性便可。java

spark離線處理優化

目的減小無效操做,io cpu的有效利用,直接查優化技巧,不如先搞明白spark處理過程。明白如下再對應代碼能夠解決不少問題。sql

  1. DAG圖對應代碼 明白過程api

  2. stages tasks對應實現層性能

  3. shuff過程,如何減小shuff,必須shuff則看寫文件io有效利用率。常見的文件太多則合併文件。優化

好比:本地spark sql跑兩張表join外帶where group操做,遇到shuff就200個,手動repartition無效,確定是默認參數在join指定,查文檔修改生效。時間從13秒降低到1s內。spa

有意思的是根據show這個操做,最後的task任務數爲1,不符合partitions到reduce的數量比,最後看了下是這個操做本事的問題,默認讀取數量調用head,不須要獲取全部partitionsscala

streaming性能與精確性

  1. 時間片內精確性:tran操做轉換保證,內置表達無問題文檔

  2. 時間片外的精確性 :須要存儲數據,性能損耗考慮,因此通常實時數據用,過必定時間用離線計算來補足,好比主動營銷效果分析,最近幾分鐘的數據能夠實時,一小時前的數據徹底能夠經過離線統計如hbase+sparkkafka

  3. 外部數據精確性 仍是時間片數據去重,不依賴外部,跨時間片參考2it

  4. 掛掉恢復精確 經常使用的讀取kafka,本身控制offsets ,如咱們一般的程序也會本身控制offsets

  5. kafka時間片內堆積數據太多,參數控制每秒max消息

  6. 每一個rdd對外部數據的操做批量到partitions

  7. 多個指標統計統計,轉換結構與action過程能合併最好,具體DAG邏輯圖,減小shuff。比較簡單看到rdd轉換多個相同key的單value,那麼還不如直接轉換爲 key,list

相關文章
相關標籤/搜索