1. 程式人生 > >spark調優-持久化策略選擇

spark調優-持久化策略選擇

# RDD的持久化策略: cache、persist、checkpoint三種策略(持久化的單位是partition) 1、cache是persist的一個簡化版,會將rdd中的資料持久化到記憶體中 cache = persists(StorageLevel.MEMORY_ONLY) 不進行序列化 特點:
  • cache的返回值 必須賦值給一個新的RDD變數, 在其他的job中直接使用這個RDD變數就可以
  • cache是一個懶執行(其他兩個也是懶執行),必須有action類的運算元觸發(也就是說,實現快取要先觸發一次)
  • cache運算元的後面不能立即新增action類運算元
var RDD= RDD.cache.foreach X 錯誤的,這樣RDD 的結果就是遍歷後的


2、persist手動指定持久化級別
3、checkpoint
  • checkpoint會另啟 一個job持久化到HDFS上 (安全性)、依賴關係會被切斷。
  • 如果RDD轉換很多,可以使用checkpoint。
  • 當使用checkpoint的時候可以先cache一把,然後再用checkpoint,這時候就會從記憶體中寫入HDFS上(要快一些)
persist持久化級別 1、預設情況下,效能最高的當然是MEMORY_ONLY,但前提是你的記憶體必須足夠足夠大 可以綽綽有餘地存放下整個RDD的所有資料。因為不進行序列化與反序列化操作,就避免了這部分的效能開銷;對這個RDD的後續運算元操作,都是基於純記憶體中的資料的操作,不需要從磁碟檔案中讀取資料,效能也很高;而且不需要複製一份資料副本,並遠端傳送到其他節點上。但是這裡必須要注意的是,在實際的生產環境中,恐怕能夠直接用這種策略的場景還是有限的,如果RDD中資料比較多時(比如幾十億),直接用這種持久化級別,會導致JVM的OOM記憶體溢位異常。
2、如果使用MEMORY_ONLY級別時發生了記憶體溢位,那麼建議嘗試使用MEMORY_ONLY_SER級別。(序列化後,降低了記憶體佔用) 該級別會將RDD資料序列化後再儲存在記憶體中,此時每個partition僅僅是一個位元組陣列而已,大大減少了物件數量,並降低了記憶體佔用。這種級別比MEMORY_ONLY多出來的效能開銷,主要就是序列化與反序列化的開銷。但是後續運算元可以基於純記憶體進行操作,因此效能總體還是比較高的。此外,可能發生的問題同上,如果RDD中的資料量過多的話,還是可能會導致OOM記憶體溢位的異常。 3、如果純記憶體的級別都無法使用,那麼建議使用MEMORY_AND_DISK_SER
策略
而不是MEMORY_AND_DISK策略。因為既然到了這一步,就說明RDD的資料量很大,記憶體無法完全放下。序列化後的資料比較少,可以節省記憶體和磁碟的空間開銷。同時該策略會優先儘量嘗試將資料快取在記憶體中,記憶體快取不下才會寫入磁碟。 4、通常不建議使用DISK_ONLY和字尾為_2的級別 因為完全基於磁碟檔案進行資料的讀寫,會導致效能急劇降低,有時還不如重新計算一次所有RDD。字尾為_2的級別,必須將所有資料都複製一份副本,併發送到其他節點上,資料複製以及網路傳輸會導致較大的效能開銷,除非是要求作業的高可用性,否則不建議使用。

相關推薦

spark調-持久化策略選擇

# RDD的持久化策略: cache、persist、checkpoint三種策略(持久化的單位是partition) 1、cache是persist的一個簡化版,會將rdd中的資料持久化到記

Spark調基本策略

1. RDD的持久化 cahce() persist() checkpoint() 2. 避免建立重複的RDD 儘可能複用同一個RDD,類似於多個RDD的資料有重疊或者包含的情況,應該儘量複用一個RDD,以儘可能減少RDD的數量,從而減少運算

RDD持久化 --- Spark調

問題:重複建立RDD 通常來說,開發一個Spark作業時,首先是建立一個初始的RDD;接著對這個RDD執行某個運算元操作,然後得到下一個RDD;以此類推,迴圈往復,直到計算出最終我們需要的結果。在這個過程中,多個RDD會通過不同的運算元操作(比如map、reduce等)串起來,這個“RDD串

Spark調秘訣——超詳細

多層 嵌套 取數 java版 sta 協調 一句話 string對象 就會 版權聲明:本文為博主原創文章,轉載請註明出處。 Spark調優秘訣 1.診斷內存的消耗 在Spark應用程序中,內存都消耗在哪了? 1.每個Java對象都有一個包含該對象元數據的對象頭,其大小是

Spark篇】---Spark調之代碼調,數據本地化調,內存調,SparkShuffle調,Executor的堆外內存調

左右 任務調度 combiner flight 觸發 年齡 ans minor 序列化機制 一、前述 Spark中調優大致分為以下幾種 ,代碼調優,數據本地化,內存調優,SparkShuffle調優,調節Executor的堆外內存。 二、具體 1、代碼調優 1、避免創

Spark調秘訣

正常 設定 leg 磁盤文件 共享數據 每一個 毫無 als mat 1.診斷內存的消耗 在Spark應用程序中,內存都消耗在哪了? 1.每個Java對象都有一個包含該對象元數據的對象頭,其大小是16個Byte。由於在寫代碼時候,可能會出現這種情況:對象頭比對象本身占有

Spark調之效能調

1.1分配更多資源 1.1.1 分配哪些資源 Executor的數量 每個Executor所能分配的CPU數量 每個Executor所能分配的記憶體量 Driver端分配的記憶體數量 1.1.2 在哪裡分配這些資源 在生產環境中,提交spark作業時,用的spark-subm

Hive on Spark調

之前在Hive on Spark跑TPCx-BB測試時,100g的資料量要跑十幾個小時,一看CPU和記憶體的監控,發現 POWER_TEST階段(依次執行30個查詢)CPU只用了百分之十幾,也就是沒有把整個叢集的效能利用起來,導致跑得很慢。因此,如何調整引數,使整個叢集發揮最大效能顯得尤為

Spark調之JVM調

今天給大家分享Spark調優相關的JVM調優,這個調優方法在開發中也很常見,他主要分為兩種,一種是降低cache操作的記憶體佔比,一種是調節executor堆外記憶體和降低連線等待時長。 在此之前,我們先來了解一下JVM的堆記憶體。 堆記憶體存放我們建立的一些物件,有老年代和年輕代。理想

spark調-JVM調+Shuffle調

          JVM調優: 1 降低cache操作的記憶體佔比        spark中,堆記憶體又被劃分成了兩塊,一塊是專門用來給R

Spark調--效能調

前天跟大家聊spark優化,說了個大體上的方案,今天就效能調優跟大家聊聊,首先分如下4塊 一>  分配更多資源 分配哪些資源? Executor的數量,每個executor所能分配的cpu數量,記憶體量,driver分配的記憶體量 在哪裡分配呢? 在開發中,提交s

spark調-第一天

         廣大的部落格友們,你們好,在這個剛過完冬至的第一個週末,下班了坐在電腦前對著電腦想了想最近做的專案,spark實時統計分析,真的非常累,做專案的時候不是你把程式碼寫完了就可以了,還要做優化的,讓程式跑的

Spark調之Shuffle調

原理概述: 什麼樣的情況下,會發生shuffle? 在spark中,主要是以下幾個運算元:groupByKey、reduceByKey、countByKey、join(分情況,先groupByKey後再join是不會發生shuffle的),等等。 什麼是shuffle? groupByKey

spark 調(官方文件)

1.序列化 物件在進行網路傳輸或進行持久化時需要進行序列化,如果採用序列化慢或者消耗大量位元組的序列化格式,則會拖慢計算。 spark 提供了兩種序列化類庫 1). Java serialization 靈活,但是很慢 2) Kryo serializati

spark 調(官方文檔)

gist broadcast html indent transform letter tex cast apache 1.序列化 對象在進行網絡傳輸或進行持久化時需要進行序列化,如果采用序列化慢或者消耗大量字節的序列化格式,則會拖慢計算。 spark 提供了兩種序列化

spark調(二)-Apache Spark 記憶體管理詳解

Apache Spark 記憶體管理詳解 轉載於:https://www.ibm.com/developerworks/cn/analytics/library/ba-cn-apache-spark-memory-management/index.html Spark 作為一個基於記憶體的分散式計算引擎,

Spark調之並行度那些事~

Spark調優之調節並行度 一、並行度概念:就是指的是Spark作業中,各個stage的task數量,代表了Spark作業的各個階段(Stage)的並行度。 二、試想如果不調節並行度,導致並行度過低,會怎麼樣? 比如現在spark-submit腳本里面,給我們的

Spark 官方文件》Spark調

Spark調優 由於大部分Spark計算都是在記憶體中完成的,所以Spark程式的瓶頸可能由叢集中任意一種資源導致,如:CPU、網路頻寬、或者記憶體等。最常見的情況是,資料能裝進記憶體,而瓶頸是網路頻寬;當然,有時候我們也需要做一些優化調整來減少記憶體佔用,例如將RDD以序列化格式儲存(storing RD

Spark調----Shuffle調

Spark效能調優之Shuffle調優 • Spark底層shuffle的傳輸方式是使用netty傳輸,netty在進行網路傳輸的過程會申請堆外記憶體(netty是零拷貝),所以使用了堆外記憶體。 • shuffle過程中常出現的問題 常見問題一:reduce o

Spark調----資料本地化

Spark資料本地化-->如何達到效能調優的目的 1.Spark資料的本地化:移動計算,而不是移動資料 2.Spark中的資料本地化級別: TaskSetManager 的 Locality Levels 分為以下五個級別: PROCE