可以認為應用是多次批量計算組合起來的過程,在物理上可以表現為你寫的程式包+部署配置。應用的概念類似於計算機中的程式,它只是乙個藍本,尚沒有執行起來。——
spark學習筆記三:spark原理介紹
spark最重要的api,使用者邏輯與spark集群主要的互動介面,它會和cluster master互動,包括向它申請計算資源等。
執行在worker上的executor程序負責執行task,並將結果返回給driver,同時為需要快取的rdd提供儲存功能。
彈性分布式資料集,唯讀分割槽記錄的集合,spark對所處理資料的基本抽象。spark中的計算可以簡單抽象為對rdd的建立、轉換和返回操作結果的過程:
對已有的rdd中的資料執行計算進行轉換,而產生新的rdd,在這個過程中有時會產生中間rdd。spark對於transformation採用惰性計算機制,遇到transformation時並不會立即計算結果,而是要等遇到action時一起執行。
對已有的rdd中的資料執行計算產生結果,將結果返回driver程式或寫入到外部物理儲存。在action過程中同樣可能產生中間rdd
乙個rdd在物理上被切分為多個partition,即資料分割槽,這些partition可以分布在不同的節點上。partition是spark計算任務的基本處理單位,決定了平行計算的粒度,而partition中的每一條record為基本處理物件。例如對某個rdd進行map操作,在具體執行時是由多個並行的task對各自分割槽的每一條記錄進行map對映。
對rdd的transformation或action操作,讓rdd產生了父子依賴關係(事實上,transformation或action操作生成的中間rdd也存在依賴關係),這種依賴分為寬依賴和窄依賴兩種:
parent rdd中的每個partition最多被child rdd中的乙個partition使用。讓rdd產生窄依賴的操作可以稱為窄依賴操作,如map、union。
parent rdd中的每個partition被child rdd中的多個partition使用,這時會依據record的key進行資料重組,這個過程即為shuffle(洗牌)。讓rdd產生kaun寬依賴的操作可以稱為窄依賴操作,如reducebykey, groupbykey。
rdd的每次轉換都會生成乙個新的rdd,所以rdd之間就會形成類似於流水線一樣的前後依賴關係。在部分分割槽資料丟失時,spark可以通過這個依賴關係重新計算丟失的分割槽資料,而不是對rdd的所有分割槽進行重新計算。
——《spark技術內幕》-第3章-rdd實現詳解
有一部分transformation或action會讓rdd產生寬依賴,這樣過程就像是將父rdd中所有分割槽的record進行了「洗牌」(shuffle),資料被打算重組,如屬於transformation操作的join,以及屬於action操作的reduce等,都會產生shuffle。
乙個job中,以shuffle為邊界劃分出的不同階段。每個階段包含一組可以被序列執行的窄依賴或寬依賴操作:
使用者提交的計算任務是乙個由rdd構成的dag,如果rdd在轉換的時候需要做shuffle,那麼這個shuffle的過程就將這個dag分為了不同的階段(即stage)。由於shuffle的存在,不同的stage是不能平行計算的,因為後面stage的計算需要前面stage的shuffle的結果。 ——
《spark技術內幕》-第4章-scheduler模組詳解
在對job中的所有操作劃分stage時,一般會按照倒序進行,即從action開始,遇到窄依賴操作,則劃分到同乙個執行階段,遇到寬依賴操作,則劃分乙個新的執行階段,且新的階段為之前階段的parent,然後依次類推遞迴執行。child stage需要等待所有的parent stage執行完之後才可以執行,這時stage之間根據依賴關係構成了乙個大粒度的dag。
在乙個stage內,所有的操作以序列的pipeline的方式,由一組task完成計算。
對乙個stage之內的rdd進行序列操作的計算任務。每個stage由一組併發的task組成(即taskset),這些task的執行邏輯完全相同,只是作用於不同的partition。乙個stage的總task的個數由stage中最後的乙個rdd的partition的個數決定。
spark driver會根據資料所在的位置分配計算任務,即把所有task根據其partition所在的位置分配給相應的executor,以儘量減少資料的網路傳輸(這也就是所謂的移動資料不如移動計算)。乙個executor內同一時刻可以並行執行的task數由總cpu數/每個task占用的cpu數決定,即spark.executor.cores / spark.task.cpus。
task分為shufflemaptask和resulttask兩種,位於最後乙個stage的task為resulttask,其他階段的屬於shufflemaptask。
Spark基礎概念
spark 提供了乙個全面 統一的框架用於管理各種有著不同性質 文字資料 圖表資料等 的資料集和資料來源 批量資料或實時的流資料 的大資料處理的需求。包含spark 的基本功能 尤其是定義rdd 的api 操作以及這兩者上的動作。其他spark 的庫都是構建在rdd 和spark core 之上的。...
Spark基礎概念梳理
因為最近在學習與使用spark,所以對一些基礎概念與術語做一些梳理。用來加深映像同時方便後續複習 spark是乙個基於記憶體的分布式計算框架,可無縫整合於現有的hadoop生態體系。主要包括四大元件 spark streaming spark sql spark mllib和spark graphx...
Spark基礎概念01 初識Spark架構和RDD
四 核心api 五 rdd是什麼,有哪些特點 六 rdd的特性 七 rdd常用的建立方式 八 rdd常用的運算元 轉換 動作 九 基於rdd的應用程式開發 十 shuffle機制 十一 累加器 可自定義 1 在驅動程式中,通過sparkcontext主導應用的執行 2 sparkcontext可以連...