spark理論和RDD算子
摘要:Spark 儘可能減小中間結果寫入磁盤,儘可能減少不必要的Sort/Shuffle 反覆用到的數據進行Cache 對於DAG進行高度的優化、劃分不同的Stage ,使用延遲計算技術。Spark 將數據緩存在分佈式內存中。
Spark簡介
什麼是Spark?
Spark 是基於內存計算的通用大規模數據處理框架
Spark已經融入了Hadoop生態系統,可支持的作業類型和應用場景比MapReduce更爲廣泛,並且具備了MapReduce所有的高容錯性和高伸縮性特點。
爲什麼會誕生Spark並不是所有的問題都可以簡單的分解成Map和Reduce兩步模型處理
Mapreduce 缺點
1、 延遲高: 不適合交互式SQL分析
2、 迭代計算力不從心:斐波那契數列
3、 流式數據處理: 統計網站的PV、UV數據
Spark
一站式解決:
離線批處理
流式計算
在線實時分析
Spark爲何快MapReduce會將中間結果輸出到本地磁盤:例如Shuffle過程Map的中間結果
有多個MapReduce任務串聯時,依賴HDFS存儲中間結果的輸出對磁盤的IO操作太頻繁
例如:hive
Spark 儘可能減小中間結果寫入磁盤,儘可能減少不必要的Sort/Shuffle 反覆用到的數據進行Cache 對於DAG進行高度的優化、劃分不同的Stage ,使用延遲計算技術。
彈性分佈式數據集RDDSpark 將數據緩存在分佈式內存中
如何實現?rdd
Spark的核心
分佈式內存抽象
提供一個高度受限的共享內存模型
邏輯上集中但是物理上是存在在集羣的多臺機器上
RDD屬性和特點只讀
通過HDFS或者其它持久化系統創建RDD
通過transformation將父RDD轉化得到新的RDD
RDD 上保存着前後的之間的依賴關係
Partition
基本組成單位,RDD在邏輯上按照Partition分塊
分佈在各個節點上
分片數量決定並行計算的粒度
RDD中保存如何計算每一個分區的函數
容錯
失敗自動重建
如果發生部分分區數據丟失,可以通過依賴關係重新計算
Spark編程模型1、 對於RDD有四種類型的算子
Create:
SparkContext.textFile()
SparkContext.parallelize()
Transformation
作用於一個或者多個RDD,輸出轉換後的RDD
例如:map,filter,groupby
Action:
會觸發Spark提交作業,並將結果返回Diver Program
例如:reduce,countByKey
Cache:
cache 緩存
persist持久化
惰性運算 遇到Action時纔會真正的執行