spark core 提供 spark 最基礎的最核心的功能,主要包括:
sparkcontext 內建的 dagscheduler 負責建立 job,將 dag 中的 rdd 劃分到不同的 stage, 提交 stage 等功能。
sparkcontext 內建的 taskscheduler 負責資源的申請、任務的提交及請求集群對任務的排程 等工作。
spark 優先考慮使用各節點的記憶體作為儲存,當記憶體不足時才會考慮使用磁碟,這極大地 減少了磁碟 i/o,提公升了任務執行的效率,使得 spark 適用於實時計算、流式計算等場景。 此外,spark 還提供了以記憶體為中心的高容錯的分布式檔案系統 tachyon 供使用者進行選擇。 tachyon 能夠為 spark 提供可靠的記憶體級的檔案共享服務。
計算引擎由 sparkcontext 中的 dagscheduler、rdd 以及具體節點上的 executor 負責執行 的 map 和 reduce 任務組成。dagscheduler 和 rdd 雖然位於 sparkcontext 內部,但是在 任務正式提交與執行之前將 job 中的 rdd 組織成有向無關圖(簡稱 dag)、並對 stage 進 行劃分決定了任務執行階段任務的數量、迭代計算、shuffle 等過程。
由於單節點不足以提供足夠的儲存及計算能力,所以作為大資料處理的 spark 在sparkcontext 的 taskscheduler 元件中提供了對 standalone 部署模式的實現和 yarn、mesos 等分布式資源管理系統的支援。通過使用 standalone、yarn、mesos、kubernetes、cloud 等部署模式為 task 分配計算資源,提高任務的併發執行效率。除了可用於實際生產環境 的 standalone、yarn、mesos、kubernetes、cloud 等部署模式外,spark 還提供了 local 模式和 local-cluster 模式便於開發和除錯。
為了擴大應用範圍,spark 陸續增加了一些擴充套件功能,主要包括:
由於 sql 具有普及率高、學習成本低等特點,為了擴大 spark 的應用面,因此增加了對 sql 及 hive 的支援。spark sql 的過程可以總結為:首先使用 sql 語句解析器(sqlparser) 將 sql 轉換為語法樹(tree),並且使用規則執行器(ruleexecutor)將一系列規則(rule) 應用到語法樹,最終生成物理執行計畫並執行的過程。其中,規則包括語法分析器 (analyzer)和優化器(optimizer)。 hive 的執行過程與 sql 類似。
spark streaming與apache storm類似,也用於流式計算。spark streaming支援kafka、flume、 twitter、mqtt、zeromq、kinesis 和簡單的 tcp 套接字等多種資料輸入源。輸入流接收器 (receiver)負責接入資料,是接入資料流的介面規範。dstream 是 spark streaming 中所 有資料流的抽象,dstream 可以被組織為 dstreamgraph。dstream 本質上由一系列連續的 rdd 組成。
spark 提 供 的 分 布 式 圖 計 算 框 架 。 graphx 主 要 遵 循 整 體 同 步 並 行 計 算 模 式 (bulksynchronous parallell,簡稱 bsp)下的 pregel 模型實現。graphx 提供了對圖的抽象 graph,graph 由頂點(vertex)、邊(edge)及繼承了 edge 的 edgetriplet(新增了 srcattr 和 dstattr 用來儲存源頂點和目的頂點的屬性)三種結構組成。graphx 目前已經封裝了最 短路徑、網頁排名、連線元件、三角關係統計等演算法的實現,使用者可以選擇使用。
spark 提供的機器學習框架。機器學習是一門涉及概率論、統計學、逼近論、凸分析、算 法複雜度理論等多領域的交叉學科。mllib 目前已經提供了基礎統計、分類、回歸、決策 樹、隨機森林、樸素貝葉斯、保序回歸、協同過濾、聚類、維數縮減、特徵提取與轉型、 頻繁模式挖掘、預言模型標記語言、管道等多種數理統計、概率論、資料探勘方面的數 學演算法。
spark 應用程式從編寫到提交、執行、輸出的整個過程如下圖所示:
rdd 可以看做是對各種資料計算模型的統一抽象,spark 的計算過程主要是 rdd 的迭代計算 過程,如上圖。rdd 的迭代計算過程非常類似於管道。分割槽數量取決於 partition 數量的設 定,每個分割槽的資料只會在乙個 task 中計算。所有分割槽可以在多個機器節點的 executor 上 並行執行。
Unix 核心概述
核心本身並不是乙個程序,而是程序的管理者。程序 核心模式假定 請求核心服務的程序使用所謂系統調 system call 的特殊程式設計機制。每個系統呼叫都設定了乙個組識別程序請求的引數,然後執行與硬體相關的cpu指令完成從使用者態到核心態的轉換。unix系統還包括幾個所謂核心執行緒 kernel t...
linux Unix核心概述
cpu既可以在執行在使用者態下,也可以執行在核心態下。實際上,一些cpu可以有兩種以上的執行狀態。例如,intel 80 86微處理器有四種不同的執行狀態。但是,所有標準的unix核心都僅僅利用了核心態和使用者態。當乙個程式在使用者態下執行時,它不能直接訪問核心資料結構或者核心的程式。然而,當應用程...
Spark Spark容錯機制
一般來說,分布式資料集的容錯性有兩種方式 資料檢查點和記錄資料的更新。面向大規模資料分析,資料檢查點操作成本很高,需要通過資料中心的網路連線在機器之間複製龐大的資料集,而網路頻寬往往比記憶體頻寬低得多,同時還需要消耗更多的儲存資源。因此,spark選擇記錄更新的方式。但是,如果更新粒度太細太多,那麼...