Spark 入門詳解

2021-10-22 01:26:32 字數 3549 閱讀 6594

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之...