Spark的性能優化之路

spark的parallelize()方法,能夠指定分區數量。在coding階段,對此沒有引發重視,只是隨意填了一個很大的數,認爲分區固然是越多越好。可是到了性能測試階段,發現並非。 1.分區數太多意味着任務數太多,每次調度任務也是很耗時的,因此分區數太多會致使整體耗時增多。 2.分區數太少的話,會致使一些結點沒有分配到任務;另外一方面,分區數少則每一個分區要處理的數據量就會增大,從而對每一個結點的內存要求就會提升;還有分區數不合理,會致使數據傾斜問題。 3.對一個RDD數據集,處理的分區數儘可能和集羣節點數對應,通常是集羣節點的2-3倍。(能夠在配置文件中加入node-size,和partition-number)。 固然,到了這一步,感受本身的設置真的很合理了。可是代碼運行就發現掉進了一個大坑。有的task對這種分區方式並不適用。 例如:List<String> types = .... 節點數有8個,按分區數是節點數2倍計算,分區數爲16;若是types.size小於16,就會浪費計算資源。有的分區就沒有分配到數據集。 因此要進一步對分區進行控制和優化。即分數和和數據集的size數,取最小值,做爲最終分區數。node

相關文章
相關標籤/搜索