什麼是spark?
spark 是基於記憶體計算的通用大規模資料處理框架
spark已經融入了hadoop生態系統,可支援的作業型別和應用場景比mapreduce更為廣泛,並且具備了mapreduce所有的高容錯性和高伸縮性特點。
並不是所有的問題都可以簡單的分解成map和reduce兩步模型處理
mapreduce 缺點
延遲高: 不適合互動式sql分析
迭代計算力不從心:斐波那契數列
spark
一站式解決:
離線批處理
流式計算
mapreduce會將中間結果輸出到本地磁碟:例如shuffle過程map的中間結果
有多個mapreduce任務串聯時,依賴hdfs儲存中間結果的輸出對磁碟的io操作太頻繁
例如:hive
spark 盡可能減小中間結果寫入磁碟,盡可能減少不必要的sort/shuffle 反覆用到的資料進行cache 對於dag進行高度的優化、劃分不同的stage ,使用延遲計算技術。
spark 將資料快取在分布式記憶體中
如何實現?rdd
spark的核心
分布式記憶體抽象
提供乙個高度受限的共享記憶體模型
邏輯上集中但是物理上是存在在集群的多台機器上
唯讀通過hdfs或者其它持久化系統建立rdd
通過transformation將父rdd轉化得到新的rdd
rdd 上儲存著前後的之間的依賴關係
partition
基本組成單位,rdd在邏輯上按照partition分塊
分布在各個節點上
分片數量決定平行計算的粒度
rdd中儲存如何計算每乙個分割槽的函式
容錯失敗自動重建
如果發生部分分割槽資料丟失,可以通過依賴關係重新計算
對於rdd有四種型別的運算元
create:
sparkcontext.textfile()
sparkcontext.parallelize()
transformation
作用於乙個或者多個rdd,輸出轉換後的rdd
例如:map,filter,groupby
action:
會觸發spark提交作業,並將結果返回diver program
例如:reduce,countbykey
cache:
cache 快取
persist持久化
惰性運算 遇到action時才會真正的執行
Spark理論學習
彈性分布式資料集 rdd是由多個partition組成 最小單位是partition 與讀取的block是一一對應的.有多少個block就有多少個partion.運算元就是函式 作用再rdd的partition上的.對彈性的理解 某個rdd損壞了,可以進行恢復.他們直接有依賴關係 分割槽器是作用在k...
排隊理論分析
先上結論 當消費方佇列足夠長時,如果生產能力大於消費能力,那麼在某一時刻消費方必定會對外表現出雪潰了的狀況,即所有請求都失敗。假設有兩個系統p producer 和c consumer p是生產方,c是消費方,p throughput producer throughput 為p的生產能力,c th...
Spark原始碼分析 Spark整體架構
術語 描述使用者編寫的程式。driver端的sparkcontext sparkconf和執行在executors上使用者編寫的業務邏輯 即map reduce reducebykey等 driver 執行使用者編寫應用程式的main 方法並建立sparkcontext worker 具體執行應用程...