spark初識

隨筆說明因爲參加了上海交大組織的飛谷項目,並且報名第三組:基於Spark的機器學習。因而打算先花時間把Spark的基礎學習學習。此次學習的參考書選擇的是Spark的官方文檔(這個確定是最權威的)和機械工業的《Spark大數據處理   技術、應用與性能優化》;屆時確定還有項目組提供的學習資料。數組

 

 1.Spark簡介

 1.1概念

Spark是基於內存計算的大數據並行計算框架。它基於內存計算,提升了實時性,保證了高容錯性和高可伸縮性,容許用戶將它部署在大量廉價硬件之上,造成集羣。緩存

Spark之於Hadoop:Spark只是一個計算框架,而hadoop中包含計算框架MapReduce和分佈式文件系統HDFS,更加普遍的說,Hadoop還包括在其生態系統上的其餘系統,如Hbase,Hive等。
 
Spark是MapReduce的替代,並且兼容HDFS,Hive等分佈式存儲層,可融入Hadoop生態系統,以彌補缺失MapReduce的不足。
 
Spark相對於Hadoop的優點以下:
(1)無需將中間結果輸出到HDFS
(2)RDD
(3)執行策略,有向無環圖DAG
 

1.2Spark生態系統BDAS(伯克利數據分析棧)

Spark是整個BDAS的核心組件,將分佈式數據抽象爲彈性分佈式數據集(RDD),實現了任務調度、RPC、序列化和壓縮。性能優化

Spark將數據在分佈式環境下分區,而後將做業轉化爲有向無環圖,並分階段進行DAG的調度和任務的分佈式並行處理。數據結構

1.3Spark架構

Spark架構採用了分佈式計算中的Master-Slave模型。Master是對應集羣中的含有Master進程的節點,做爲整個集羣的控制器,負載整個集羣的正常運行;Slave是集羣中含有Worker進程的節點。Worker至關因而計算節點,接受主節點命名與進行狀態彙報。架構

1.4Spark運行邏輯

圖中的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中。框架

 

1.5Spark分佈式架構與單機多核架構的異同

單機多核環境下,多CPU共享內存和磁盤;而分佈式並行處理系統是由許多鬆耦合的處理單元組成的,每一個單元內的CPU都有本身的資源,如總線,內存,硬盤等。其最大的特色就是不共享資源,即計算能力和存儲擴展性能夠成倍增加。機器學習

 

2.Spark計算模型

2.1Spark程序模型

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個節點。

2.2Spark算子

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算子。

 

3.Spark的主要模板

*調度與任務分配:應用Application;Job;Stage;Task;

*I/O:以 塊 爲單位進行管理;

*通訊控制:AKKA框架進行集羣消息通訊;

*容錯:Lineage和checkpoint;

*Shuffle:把一組無規則的數據儘可能轉換成一組具備必定規則的數據。

 

Spark應用:用戶提交的應用程序----提交---->Spark爲App分配資源,將程序轉換執行------>Driver Program------->RDD遇到Action,造成Graph----轉化爲---->Job----根據RDD的寬依賴關係---->切分爲不少Stage----包含----->一組相同的Task----執行---->RDD中對應Stage中包含的算子。

相關文章
相關標籤/搜索