隨筆說明:因爲參加了上海交大組織的飛谷雲項目,並且報名第三組:基於Spark的機器學習。因而打算先花時間把Spark的基礎學習學習。此次學習的參考書選擇的是Spark的官方文檔(這個確定是最權威的)和機械工業的《Spark大數據處理 技術、應用與性能優化》;屆時確定還有項目組提供的學習資料。數組
Spark是基於內存計算的大數據並行計算框架。它基於內存計算,提升了實時性,保證了高容錯性和高可伸縮性,容許用戶將它部署在大量廉價硬件之上,造成集羣。緩存
Spark之於Hadoop:Spark只是一個計算框架,而hadoop中包含計算框架MapReduce和分佈式文件系統HDFS,更加普遍的說,Hadoop還包括在其生態系統上的其餘系統,如Hbase,Hive等。Spark是整個BDAS的核心組件,將分佈式數據抽象爲彈性分佈式數據集(RDD),實現了任務調度、RPC、序列化和壓縮。性能優化
Spark將數據在分佈式環境下分區,而後將做業轉化爲有向無環圖,並分階段進行DAG的調度和任務的分佈式並行處理。數據結構
Spark架構採用了分佈式計算中的Master-Slave模型。Master是對應集羣中的含有Master進程的節點,做爲整個集羣的控制器,負載整個集羣的正常運行;Slave是集羣中含有Worker進程的節點。Worker至關因而計算節點,接受主節點命名與進行狀態彙報。架構
圖中的A,B,C,D,E,F分別表明不一樣的RDD,RDD內的方框表明分區。數據從HDFS輸入Spark,造成RDD A和RDD C,RDD C上執行map操做,轉化爲D,B,E執行join操做,轉換爲F,而在B和E鏈接轉化爲F的過程當中又會執行Shuffle,最後F經過函數saveAsSequenceFile輸出並保存到HDFS中。框架
單機多核環境下,多CPU共享內存和磁盤;而分佈式並行處理系統是由許多鬆耦合的處理單元組成的,每一個單元內的CPU都有本身的資源,如總線,內存,硬盤等。其最大的特色就是不共享資源,即計算能力和存儲擴展性能夠成倍增加。機器學習
Spark:性能-------->將重複利用的數據集緩存到內存分佈式
目標-------->像編寫單機程序同樣編寫分佈式程序函數
RDD(彈性分佈式數據集)--------->Spark的核心數據結構oop
RDD與DSM(分佈式共享內存)的異同:對於落後任務的處理:
RDD:任務備份,從新調度執行;
DSM:diffcult to solve
Spark數據存儲的核心是彈性分佈式數據集RDD----抽象理解---->一個大數組------>分佈在集羣上。
在物理上,RDD實質上是一個元數據結構,存儲着Block,Node等映射關係,一個RDD就是一組分區,在物理數據存儲上,RDD的每一個分區(Partition)對應一個Block(可存儲在內存)。
RDD數據管理模型:
解釋:RDD1有5個分區(p1~p5),分別存儲在4個節點中,RDD2有3個分區,分別存儲在3個節點。
1)輸入:從HDFS,Hive,Hbase這些外部數據空間----輸入進---->Spark----數據進入--->Spark運行時數據空間----轉化爲---->Spark中的數據塊----經過BlockManager---->管理;
2)運行:Spark輸入數據造成RDD後----經過變換算子---->對數據進行操做,將RDD轉化爲新的RDD----Action算子---->觸發Spark提交做業;
3)輸出:輸出Spark運行時空間,存儲到分佈式存儲中,如SaveAsTextFile輸出到HDFS中。
****Spark將經常使用的大數據操做都轉化成爲RDD的子類。
算子的分類:1)Value型transformation;2)key-value型transformation;3)Action算子。
*調度與任務分配:應用Application;Job;Stage;Task;
*I/O:以 塊 爲單位進行管理;
*通訊控制:AKKA框架進行集羣消息通訊;
*容錯:Lineage和checkpoint;
*Shuffle:把一組無規則的數據儘可能轉換成一組具備必定規則的數據。
Spark應用:用戶提交的應用程序----提交---->Spark爲App分配資源,將程序轉換執行------>Driver Program------->RDD遇到Action,造成Graph----轉化爲---->Job----根據RDD的寬依賴關係---->切分爲不少Stage----包含----->一組相同的Task----執行---->RDD中對應Stage中包含的算子。