Spark操做算子本質-RDD的容錯

Spark操做算子本質-RDD的容錯
spark模式
1.standalone
master 資源調度
worker
2.yarn
resourcemanager 資源調度
nodemanager
在一個集羣中只能有一個資源調度,若是有兩個資源調度的話,master和resourcemanager之間是不通訊的,master分配某個資源,resourcemanager是不知道的
一個application對應一個driver,driver是用來分配任務的

流程示意
分佈式文件系統(File system)加載數據集
transformations延遲執行 針對RDD的操做
Action觸發執行(生成並提交job)node

 


默認緩存策略是MEMORY_ONLY
OFF_HEAP:不使用Java堆內存,使用tachyon,可是須要spark和tachyon作對接(百度用的多,tachyon是國產)數據庫

轉換算子 操做算子緩存

 

transformations:延時執行,從一個RDD到另外一個RDD
map:經過匿名函數將RDD中T類型的數據轉換爲U類型的數據
filter:經過匿名函數判斷某個字段返回true/false,true保留,false過濾,RDD中的數據類型不變,可是有可能會被過濾掉
flatMap::經過匿名函數將RDD中的T類型的每條數據轉換爲類型爲U的序列集合,先作一步Map操做,再作一步flat操做,壓扁
sample:傳一個Float進來,隨機採樣
groupByKey:按照key分組,把key相同的值聚合在一塊兒,每一個key對應一個序列集合,有個shuffle,上游的partition根據某些規則將數據分到下游不一樣的partition中去
reduceByKey:對鍵值對操做,消除重複的key,相鄰元素依次進行操做,操做產生的結果類型不可變
union:合併兩個RDD,RDD類型必須一致
join:傳入兩個鍵值對的RDD,將兩個RDD相同key的value值整合到一塊兒,並進行一個排列組合
cogroup:傳入兩個鍵值對的RDD,將兩個RDD相同key的value放到兩個序列集合中
crossProduct():將兩個RDD封裝爲一個RDD,一個RDD的值爲key,一個爲value
mapValues:RDD中元素爲鍵值對的,對每一個元素進行操做,可是隻對value進行操做。
sort:對某個值進行排序
partitionBy:能夠傳一個自定義的partitioner,若是RDD爲鍵值對,就能夠傳一個新的partitioner進行分區
actions:當即執行,從RDD到最終結果
count():返回RDD中元素個數
collect():慎用,把RDD中的元素所有返回,放入序列集合中
reduce():把RDD中的元素依次進行操做,生成最後的一個值
lookup():根據傳入的key在RDD中找對應的值,放入序列集合中
save():對操做結果作存儲,好比存入HDFS,本地文件系統app

transformations和actions的本質區別
transformations是從一個RDD到另外一個RDD
actions是從一個RDD到最終結果
現象:碰到action操做就封裝一個job執行分佈式

 

 

checkpoint
Lineage過長
對RDD作doCheckpoint()
SparkContext.setCheckPointDir() 須要設置磁盤路徑,一般是HDFS中。
設置數據庫路徑
把RDD存到磁盤中去,即便內存中的緩存被清掉,也能夠去磁盤中讀取,計算效率更高。
壞處:佔用DiskIO函數

若是RDD的代價特別大,除了普通緩存,還可使用checkpoint,存入磁盤,RDD複用時會先找cache() persist(),再找checkpoint中的spa

相關文章
相關標籤/搜索