redis資料持久化什麼作用??(將記憶體中的資料寫入到硬碟中,進行永久儲存)
防止資料丟失!
rdd資料持久化什麼作用?
1、對多次使用的rdd進行快取,快取到記憶體,當後續頻繁使用時直接在記憶體中讀取快取的資料,不需要重新計算。
2、將rdd結果寫入硬碟(容錯機制),當rdd丟失資料時,或依賴的rdd丟失資料時,可以使用持久化到硬碟的資料恢復。
快取方法
persist
cache
這兩個方法被呼叫時立即快取,而是觸發後面的action時
**
val rdd1 = sc.textfile("hdfs://node01:8020/wordcount/input/words.txt")
val rdd2 = rdd1.flatmap(x=>x.split(" ")).map((_,1)).reducebykey(_+_)
rdd2.cache
rdd2.sortby(_._2,false).collect//觸發action,會去讀取hdfs的檔案,rdd2會真正執行持久化
rdd2.sortby(_._2,false).collect
快取級別
掌握的級別
memory_only(預設):資料寫入記憶體,記憶體不足,部分分割槽資料不快取。
memory_and_disk:資料寫入記憶體,記憶體不足寫入磁碟。
disk_only:資料寫入硬碟。
總結:1.rdd持久化/快取的目的是為了提高後續操作的速度
2.快取的級別有很多,預設只存在記憶體中,開發中使用memory_and_disk
3.只有執行action操作的時候才會真正將rdd資料進行持久化/快取
4.實際開發中如果某乙個rdd後續會被頻繁的使用,可以將該rdd進行持久化/快取
將資料寫入hdfs,利用hdfs永久儲存。
操作過程
1、設定持久化的儲存路徑
2、呼叫checkpoint()進行資料的儲存
sparkcontext.setcheckpointdir("目錄") //hdfs的目錄
rdd.checkpoint()
**:
sc.setcheckpointdir("hdfs://node01:8020/ckpdir")
val rdd1 = sc.textfile("hdfs://node01:8020/wordcount/input/words.txt").flatmap(_.split(" ")).map((_,1)).reducebykey(_+_)
rdd1.checkpoint()
rdd1.collect
持久化結果
如何保證資料的安全性性及讀取效率??
先做快取/持久化,再做checkpint操作
cache和checkpoint的區別
位置persist 和 cache將資料儲存在記憶體
checkpoint將資料儲存在hdfs
生命週期
persist 和 cache 程式結束後會被清除或手動呼叫unpersist方法。
checkpoint永久儲存不會被刪除。
rdd依賴關係(血統lineage)
persist和cache,不會丟掉rdd間的依賴鏈/依賴關係
checkpoint會斬斷依賴鏈
rdd的依賴關係
窄依賴:父rdd的乙個分割槽只會被子rdd的乙個分割槽依賴(圖一)
寬依賴:父rdd的乙個分割槽會被子rdd的多個分割槽依賴(涉及到shuffle)(圖二)
為什麼劃分寬窄依賴?
1.對於寬依賴
是劃分stage的依據(目的是實現並行化計算)
2.對於窄依賴
spark stage可以平行計算(平行計算速度快)
什麼是dag
指的是資料轉換執行的過程,有方向,無閉環(其實就是rdd執行的流程)
dag邊界:(在**開始?**結束)
開始:通過sparkcontext建立的rdd
結束:觸發action,一旦觸發action就形成了乙個完整的dag
說明:乙個spark應用中可以有一到多個dag,取決於觸發了多少次action
乙個dag中會有不同的階段/stage,劃分階段/stage的依據就是寬依賴
乙個階段/stage中可以有多個task,乙個分割槽對應乙個task
為什麼要劃分stage?
為了平行計算,提高計算效率。
總結spark會根據shuffle/寬依賴使用回溯演算法來對dag進行stage劃分,從後往前,遇到寬依賴就斷開,遇到窄依賴就把當前的rdd加入到當前的stage/階段中
總結:1.spark應用被提交-->sparkcontext向資源管理器註冊並申請資源-->啟動executor
2.rdd-->構建dag-->dagscheduler劃分stage形成taskset-->taskscheduler提交task-->worker上的executor執行task
當資源排程是yarn時,缺失資源申請過程!!
累加器1.累加器accumulators:累加器支援在所有不同節點之間進行累加計算(比如計數或者求和)
import org.apache.spark.rdd.rdd
import org.apache.spark.
object accumulatortest
}
2.廣播變數broadcast variables:廣播變數用來把變數在所有節點的記憶體之間進行共享,在每個機器上快取乙個唯讀的變數,而不是為機器上的每個任務都生成乙個副本。
import org.apache.spark.broadcast.broadcast
import org.apache.spark.rdd.rdd
import org.apache.spark.
object broadcastvariablestest
}
廣播表變數:通常與用於兩個表(乙個大表乙個小表,將小標廣播出去)的join。 Spark 面板入門
spark 是 flex 4 中的乙個新特性。spark.skins 包包含在 spark 命名空間中,並且已在adobe 的 flex 4 livedocs 中說明 自定義 spark 為 mxml 檔案,定義組成 spark 元件 的邏輯 圖形元素和其他物件 那麼這對於您意味著什麼呢?我希望這篇...
Spark入門系列
讀完spark官方文件後,在研究別人的原始碼以及spark的原始碼之前進行一番入門學習,這個系列不錯。spark系列 除此之外,databricks也是乙個非常不錯的 上面可以使用免費的spark集群進行 提交與測試,在youtube以及spark大會中都有其發布教程以及spark應用部署的相關細節...
Spark入門 常用Spark監控Tab
最近用spark做任務,中間來回配置集群環境,檢視配置後的效果,以及監測程式執行過程中的執行進度等,需要頻繁檢視webui的幾個tab。各個tab功能不一,從不同方面顯示了spark的各方面效能引數和執行進度。特意記錄一下,方便以後用得到的時候能夠快速回顧知識點。第乙個tab是在配置好hadoop之...