hadoop和spark算法
Hadoop這項大數據處理技術大概已有十年曆史,並且被看作是首選的大數據集合處理的解決方案。MapReduce是一路計算的優秀解決方案,不過對於須要多路計算和算法的用例來講,並不是十分高效。數據處理流程中的每一步都須要一個Map階段和一個Reduce階段,並且若是要利用這一解決方案,須要將全部用例都轉換成MapReduce模式。數據庫
在下一步開始以前,上一步的做業輸出數據必需要存儲到分佈式文件系統中。所以,複製和磁盤存儲會致使這種方式速度變慢。另外Hadoop解決方案中一般會包含難以安裝和管理的集羣。並且爲了處理不一樣的大數據用例,還須要集成多種不一樣的工具(如用於機器學習的Mahout和流數據處理的Storm)。架構
若是想要完成比較複雜的工做,就必須將一系列的MapReduce做業串聯起來而後順序執行這些做業。每個做業都是高時延的,並且只有在前一個做業完成以後下一個做業才能開始啓動。機器學習
而Spark則容許程序開發者使用有向無環圖(DAG)開發複雜的多步數據管道。並且還支持跨有向無環圖的內存數據共享,以便不一樣的做業能夠共同處理同一個數據。分佈式
Spark運行在現有的Hadoop分佈式文件系統基礎之上(HDFS)提供額外的加強功能。它支持將Spark應用部署到現存的Hadoop v1集羣(with SIMR – Spark-Inside-MapReduce)或Hadoop v2 YARN集羣甚至是Apache Mesos之中。ide
咱們應該將Spark看做是Hadoop MapReduce的一個替代品而不是Hadoop的替代品。其意圖並不是是替代Hadoop,而是爲了提供一個管理不一樣的大數據用例和需求的全面且統一的解決方案。工具
spark生態圈oop
Spark力圖整合機器學習(MLib)、圖算法(GraphX)、流式計算(Spark Streaming)和數據倉庫(Spark SQL)等領域,經過計算引擎Spark,彈性分佈式數據集(RDD),架構出一個新的大數據應用平臺。 Spark生態圈以HDFS、S三、Techyon爲底層存儲引擎,以Yarn、Mesos和Standlone做爲資源調度引擎;使用Spark,能夠實現MapReduce應用;基於Spark,Spark SQL能夠實現即席查詢,Spark Streaming能夠處理實時應用,MLib能夠實現機器學習算法,GraphX能夠實現圖計算,SparkR能夠實現複雜數學計算。性能
Spark Streaming:
Spark Streaming基於微批量方式的計算和處理,能夠用於處理實時的流數據。它使用DStream,簡單來講就是一個彈性分佈式數據集(RDD)系列,處理實時數據。
Spark SQL:
Spark SQL能夠經過JDBC API將Spark數據集暴露出去,並且還能夠用傳統的BI和可視化工具在Spark數據上執行相似SQL的查詢。用戶還能夠用Spark SQL對不一樣格式的數據(如JSON,Parquet以及數據庫等)執行ETL,將其轉化,而後暴露給特定的查詢。
Spark MLlib:
MLlib是一個可擴展的Spark機器學習庫,由通用的學習算法和工具組成,包括二元分類、線性迴歸、聚類、協同過濾、梯度降低以及底層優化原語。
Spark GraphX:
GraphX是用於圖計算和並行圖計算的新的(alpha)Spark API。經過引入彈性分佈式屬性圖(Resilient Distributed Property Graph),一種頂點和邊都帶有屬性的有向多重圖,擴展了Spark RDD。爲了支持圖計算,GraphX暴露了一個基礎操做符集合(如subgraph,joinVertices和aggregateMessages)和一個通過優化的Pregel API變體。此外,GraphX還包括一個持續增加的用於簡化圖分析任務的圖算法和構建器集合。學習
spark基本概念
Client:客戶端進程,負責提交做業到Master。
Application:Spark Application的概念和Hadoop MapReduce中的相似,指的是用戶編寫的Spark應用程序,包含了一個Driver 功能的代碼和分佈在集羣中多個節點上運行的Executor代碼;
Cluster Manager:指的是在集羣上獲取資源的外部服務,目前有:
Standalone:Spark原生的資源管理,由Master負責資源的分配;
Hadoop Yarn:由YARN中的ResourceManager負責資源的分配;
Master:Standalone模式中主控節點,負責接收Client提交的做業,管理Worker,並命令Worker啓動Driver和Executor。
Worker:集羣中任何能夠運行Application代碼的節點,相似於YARN中的NodeManager節點。在Standalone模式中指的就是經過Slave文件配置的Worker節點,在Spark on Yarn模式中指的就是NodeManager節點,負責管理本節點的資源,按期向 Master彙報心跳,接收Master的命令,啓動Driver和Executor;
Driver: 一個Spark做業運行時包括一個Driver進程,也是做業的主進程,負責做業的解析、生成Stage並調度Task到Executor上。包括DAGScheduler,TaskScheduler。
Executor:即真正執行做業的地方,一個集羣通常包含多個Executor,每一個Executor接收Driver的命令Launch Task,一個Executor能夠執行一到多個Task。
做業(Job):包含多個Task組成的並行計算,每每由Spark Action催生,一個JOB包含多個RDD及做用於相應RDD上的各類Operation;
Stage:一個Spark做業通常包含一到多個Stage。
Task:一個Stage包含一到多個Task,經過多個Task實現並行運行的功能。
DAGScheduler: 實現將Spark做業分解成一到多個Stage,每一個Stage根據RDD的Partition個數決定Task的個數,而後生成相應的Task set放到TaskScheduler中。
TaskScheduler:實現Task分配到Executor上執行。
SparkContext:整個應用的上下文,控制應用的生命週期。
RDD:Spark的基本計算單元,一組RDD可造成執行的有向無環圖RDD Graph。
SparkEnv:線程級別的上下文,存儲運行時的重要組件的引用。
SparkEnv內建立幷包含以下一些重要組件的引用。
MapOutPutTracker:負責Shuffle元信息的存儲。
BroadcastManager:負責廣播變量的控制與元信息的存儲。
BlockManager:負責存儲管理、建立和查找塊。
MetricsSystem:監控運行時性能指標信息。
SparkConf:負責存儲配置信息。
spark架構
Spark架構採用了分佈式計算中的Master-Slave模型。Master是對應集羣中的含有Master進程的節點,Slave是集羣中含有Worker進程的節點。Master做爲整個集羣的控制器,負責整個集羣的正常運行;Worker至關因而計算節點,接收主節點命令與進行狀態彙報;Executor負責任務的執行;Client做爲用戶的客戶端負責提交應用,Driver負責控制一個應用的執行,如圖所示。
Spark集羣部署後,須要在主節點和從節點分別啓動Master進程和Worker進程,對整個集羣進行控制。在一個Spark應用的執行過程當中,Driver和Worker是兩個重要角色。Driver 程序是應用邏輯執行的起點,負責做業的調度,即Task任務的分發,而多個Worker用來管理計算節點和建立Executor並行處理任務。在執行階段,Driver會將Task和Task所依賴的file和jar序列化後傳遞給對應的Worker機器,同時Executor對相應數據分區的任務進行處理。
Spark的總體流程爲:Client 提交應用,Master找到一個Worker啓動Driver,Driver向Master或者資源管理器申請資源,以後將應用轉化爲RDD Graph,再由DAGScheduler將RDD Graph轉化爲Stage的有向無環圖提交給TaskScheduler,由TaskScheduler提交任務給Executor執行。在任務執行的過程當中,其餘組件協同工做,確保整個應用順利執行。
1.在集羣啓動的時候,各個slave節點(也能夠說是worker)會向集羣的Master註冊,告訴Master我隨時能夠幹活了,隨叫隨到2.Master會根據一種心跳機制來實時監察集羣中各個worker的狀態,是否能正常工做3.Driver Application提交做業的時候也會先向Master註冊信息4.做業註冊完畢以後,Master會向worker發射Executor命令5.worker產生若干個Executor準備執行6.各個worker中的Executor會向Driver Application註冊Executor信息,以便Driver Application可以將做業分發到具體的Executor7.Executor會按期向Driver Application報告當前的狀態更新信息8.Driver Application發射任務到Executor執行