spark調優

  1. 複用rdd: 來自同一個數據源的,應該複用同一個rdd,從而減小內存的浪費。
  2. 儘可能減小shuffer類的算子的使用: 由於spark的瓶頸大部分就是在shuffle,因此shuffle類的算子能夠找到其餘方式代替。好比,join的算子,使用使用廣播變量的方式,將一個數據量少的文件分發,而後其餘節點在map中再根據key去作關聯。
  3. 對屢次使用到的rdd作持久化處理: 就是減小重複勞動力的意思,每個rdd執行算子操做的時候,都得從源頭計算一遍,若是有相同的rdd,能夠將其持久化(調用cache()或者persist())將其緩存在內存或者磁盤,下面步驟的rdd若是須要到這個rdd數據的時候,直接拿出來就能夠用了。
  4. 使用預聚合shuffer操做: 這個有點相似於MapReduce的combiner,將map中的數據先進行一遍reduce後獲得的數據量會比原先原先的少,而後再進行shuffer的時候,由於減小了數據規模從而下降的網絡傳輸帶寬的成本。 好比要使用groupByKey的時候,是否能夠根據業務使用reduceByKey、aggregateByKey來替代,這類算子會根據用戶自定義函數,如今對相同key的數據進行預處理。
  5. 序列化: 使用kryo序列化數據,不使用的話,好像默認是用gzip的方法壓縮,可是kryo的效率較高,空間壓縮規模更好。
相關文章
相關標籤/搜索