小編給大家分享一下spark架構(gòu)是怎么樣的,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)主要從事成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)鲅魚圈,十載網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792
hadoop和spark
Hadoop這項(xiàng)大數(shù)據(jù)處理技術(shù)大概已有十年歷史,而且被看做是首選的大數(shù)據(jù)集合處理的解決方案。MapReduce是一路計(jì)算的優(yōu)秀解決方案,不過對于需要多路計(jì)算和算法的用例來說,并非十分高效。數(shù)據(jù)處理流程中的每一步都需要一個(gè)Map階段和一個(gè)Reduce階段,而且如果要利用這一解決方案,需要將所有用例都轉(zhuǎn)換成MapReduce模式。
在下一步開始之前,上一步的作業(yè)輸出數(shù)據(jù)必須要存儲(chǔ)到分布式文件系統(tǒng)中。因此,復(fù)制和磁盤存儲(chǔ)會(huì)導(dǎo)致這種方式速度變慢。另外Hadoop解決方案中通常會(huì)包含難以安裝和管理的集群。而且為了處理不同的大數(shù)據(jù)用例,還需要集成多種不同的工具(如用于機(jī)器學(xué)習(xí)的Mahout和流數(shù)據(jù)處理的Storm)。
如果想要完成比較復(fù)雜的工作,就必須將一系列的MapReduce作業(yè)串聯(lián)起來然后順序執(zhí)行這些作業(yè)。每一個(gè)作業(yè)都是高時(shí)延的,而且只有在前一個(gè)作業(yè)完成之后下一個(gè)作業(yè)才能開始啟動(dòng)。
而Spark則允許程序開發(fā)者使用有向無環(huán)圖(DAG)開發(fā)復(fù)雜的多步數(shù)據(jù)管道。而且還支持跨有向無環(huán)圖的內(nèi)存數(shù)據(jù)共享,以便不同的作業(yè)可以共同處理同一個(gè)數(shù)據(jù)。
Spark運(yùn)行在現(xiàn)有的Hadoop分布式文件系統(tǒng)基礎(chǔ)之上(HDFS)提供額外的增強(qiáng)功能。它支持將Spark應(yīng)用部署到現(xiàn)存的Hadoop v1集群(with SIMR – Spark-Inside-MapReduce)或Hadoop v2 YARN集群甚至是Apache Mesos之中。
我們應(yīng)該將Spark看作是Hadoop MapReduce的一個(gè)替代品而不是Hadoop的替代品。其意圖并非是替代Hadoop,而是為了提供一個(gè)管理不同的大數(shù)據(jù)用例和需求的全面且統(tǒng)一的解決方案。
spark生態(tài)圈
Spark力圖整合機(jī)器學(xué)習(xí)(MLib)、圖算法(GraphX)、流式計(jì)算(Spark Streaming)和數(shù)據(jù)倉庫(Spark SQL)等領(lǐng)域,通過計(jì)算引擎Spark,彈性分布式數(shù)據(jù)集(RDD),架構(gòu)出一個(gè)新的大數(shù)據(jù)應(yīng)用平臺(tái)。 Spark生態(tài)圈以HDFS、S3、Techyon為底層存儲(chǔ)引擎,以Yarn、Mesos和Standlone作為資源調(diào)度引擎;使用Spark,可以實(shí)現(xiàn)MapReduce應(yīng)用;基于Spark,Spark SQL可以實(shí)現(xiàn)即席查詢,Spark Streaming可以處理實(shí)時(shí)應(yīng)用,MLib可以實(shí)現(xiàn)機(jī)器學(xué)習(xí)算法,GraphX可以實(shí)現(xiàn)圖計(jì)算,SparkR可以實(shí)現(xiàn)復(fù)雜數(shù)學(xué)計(jì)算。
Spark Streaming:
Spark Streaming基于微批量方式的計(jì)算和處理,可以用于處理實(shí)時(shí)的流數(shù)據(jù)。它使用DStream,簡單來說就是一個(gè)彈性分布式數(shù)據(jù)集(RDD)系列,處理實(shí)時(shí)數(shù)據(jù)。
Spark SQL:
Spark SQL可以通過JDBC API將Spark數(shù)據(jù)集暴露出去,而且還可以用傳統(tǒng)的BI和可視化工具在Spark數(shù)據(jù)上執(zhí)行類似SQL的查詢。用戶還可以用Spark SQL對不同格式的數(shù)據(jù)(如JSON,Parquet以及數(shù)據(jù)庫等)執(zhí)行ETL,將其轉(zhuǎn)化,然后暴露給特定的查詢。
Spark MLlib:
MLlib是一個(gè)可擴(kuò)展的Spark機(jī)器學(xué)習(xí)庫,由通用的學(xué)習(xí)算法和工具組成,包括二元分類、線性回歸、聚類、協(xié)同過濾、梯度下降以及底層優(yōu)化原語。
Spark GraphX:
GraphX是用于圖計(jì)算和并行圖計(jì)算的新的(alpha)Spark API。通過引入彈性分布式屬性圖(Resilient Distributed Property Graph),一種頂點(diǎn)和邊都帶有屬性的有向多重圖,擴(kuò)展了Spark RDD。為了支持圖計(jì)算,GraphX暴露了一個(gè)基礎(chǔ)操作符集合(如subgraph,joinVertices和aggregateMessages)和一個(gè)經(jīng)過優(yōu)化的Pregel API變體。此外,GraphX還包括一個(gè)持續(xù)增長的用于簡化圖分析任務(wù)的圖算法和構(gòu)建器集合。
spark基本概念
Client:客戶端進(jìn)程,負(fù)責(zé)提交作業(yè)到Master。
Application:Spark Application的概念和Hadoop MapReduce中的類似,指的是用戶編寫的Spark應(yīng)用程序,包含了一個(gè)Driver 功能的代碼和分布在集群中多個(gè)節(jié)點(diǎn)上運(yùn)行的Executor代碼;
Cluster Manager:指的是在集群上獲取資源的外部服務(wù),目前有:
Standalone:Spark原生的資源管理,由Master負(fù)責(zé)資源的分配;
Hadoop Yarn:由YARN中的ResourceManager負(fù)責(zé)資源的分配;
Master:Standalone模式中主控節(jié)點(diǎn),負(fù)責(zé)接收Client提交的作業(yè),管理Worker,并命令Worker啟動(dòng)Driver和Executor。
Worker:集群中任何可以運(yùn)行Application代碼的節(jié)點(diǎn),類似于YARN中的NodeManager節(jié)點(diǎn)。在Standalone模式中指的就是通過Slave文件配置的Worker節(jié)點(diǎn),在Spark on Yarn模式中指的就是NodeManager節(jié)點(diǎn),負(fù)責(zé)管理本節(jié)點(diǎn)的資源,定期向 Master匯報(bào)心跳,接收Master的命令,啟動(dòng)Driver和Executor;
Driver: 一個(gè)Spark作業(yè)運(yùn)行時(shí)包括一個(gè)Driver進(jìn)程,也是作業(yè)的主進(jìn)程,負(fù)責(zé)作業(yè)的解析、生成Stage并調(diào)度Task到Executor上。包括DAGScheduler,TaskScheduler。
Executor:即真正執(zhí)行作業(yè)的地方,一個(gè)集群一般包含多個(gè)Executor,每個(gè)Executor接收Driver的命令Launch Task,一個(gè)Executor可以執(zhí)行一到多個(gè)Task。
作業(yè)(Job):包含多個(gè)Task組成的并行計(jì)算,往往由Spark Action催生,一個(gè)JOB包含多個(gè)RDD及作用于相應(yīng)RDD上的各種Operation;
Stage:一個(gè)Spark作業(yè)一般包含一到多個(gè)Stage。
Task:一個(gè)Stage包含一到多個(gè)Task,通過多個(gè)Task實(shí)現(xiàn)并行運(yùn)行的功能。
DAGScheduler: 實(shí)現(xiàn)將Spark作業(yè)分解成一到多個(gè)Stage,每個(gè)Stage根據(jù)RDD的Partition個(gè)數(shù)決定Task的個(gè)數(shù),然后生成相應(yīng)的Task set放到TaskScheduler中。
TaskScheduler:實(shí)現(xiàn)Task分配到Executor上執(zhí)行。
SparkContext:整個(gè)應(yīng)用的上下文,控制應(yīng)用的生命周期。
RDD:Spark的基本計(jì)算單元,一組RDD可形成執(zhí)行的有向無環(huán)圖RDD Graph。
SparkEnv:線程級別的上下文,存儲(chǔ)運(yùn)行時(shí)的重要組件的引用。
SparkEnv內(nèi)創(chuàng)建并包含如下一些重要組件的引用。
MapOutPutTracker:負(fù)責(zé)Shuffle元信息的存儲(chǔ)。
BroadcastManager:負(fù)責(zé)廣播變量的控制與元信息的存儲(chǔ)。
BlockManager:負(fù)責(zé)存儲(chǔ)管理、創(chuàng)建和查找塊。
MetricsSystem:監(jiān)控運(yùn)行時(shí)性能指標(biāo)信息。
SparkConf:負(fù)責(zé)存儲(chǔ)配置信息。
spark架構(gòu)
Spark架構(gòu)采用了分布式計(jì)算中的Master-Slave模型。Master是對應(yīng)集群中的含有Master進(jìn)程的節(jié)點(diǎn),Slave是集群中含有Worker進(jìn)程的節(jié)點(diǎn)。Master作為整個(gè)集群的控制器,負(fù)責(zé)整個(gè)集群的正常運(yùn)行;Worker相當(dāng)于是計(jì)算節(jié)點(diǎn),接收主節(jié)點(diǎn)命令與進(jìn)行狀態(tài)匯報(bào);Executor負(fù)責(zé)任務(wù)的執(zhí)行;Client作為用戶的客戶端負(fù)責(zé)提交應(yīng)用,Driver負(fù)責(zé)控制一個(gè)應(yīng)用的執(zhí)行,如圖所示。
Spark集群部署后,需要在主節(jié)點(diǎn)和從節(jié)點(diǎn)分別啟動(dòng)Master進(jìn)程和Worker進(jìn)程,對整個(gè)集群進(jìn)行控制。在一個(gè)Spark應(yīng)用的執(zhí)行過程中,Driver和Worker是兩個(gè)重要角色。Driver 程序是應(yīng)用邏輯執(zhí)行的起點(diǎn),負(fù)責(zé)作業(yè)的調(diào)度,即Task任務(wù)的分發(fā),而多個(gè)Worker用來管理計(jì)算節(jié)點(diǎn)和創(chuàng)建Executor并行處理任務(wù)。在執(zhí)行階段,Driver會(huì)將Task和Task所依賴的file和jar序列化后傳遞給對應(yīng)的Worker機(jī)器,同時(shí)Executor對相應(yīng)數(shù)據(jù)分區(qū)的任務(wù)進(jìn)行處理。
Spark的整體流程為:Client 提交應(yīng)用,Master找到一個(gè)Worker啟動(dòng)Driver,Driver向Master或者資源管理器申請資源,之后將應(yīng)用轉(zhuǎn)化為RDD Graph,再由DAGScheduler將RDD Graph轉(zhuǎn)化為Stage的有向無環(huán)圖提交給TaskScheduler,由TaskScheduler提交任務(wù)給Executor執(zhí)行。在任務(wù)執(zhí)行的過程中,其他組件協(xié)同工作,確保整個(gè)應(yīng)用順利執(zhí)行。
1.在集群啟動(dòng)的時(shí)候,各個(gè)slave節(jié)點(diǎn)(也可以說是worker)會(huì)向集群的Master注冊,告訴Master我隨時(shí)可以干活了,隨叫隨到
2.Master會(huì)根據(jù)一種心跳機(jī)制來實(shí)時(shí)監(jiān)察集群中各個(gè)worker的狀態(tài),是否能正常工作
3.Driver Application提交作業(yè)的時(shí)候也會(huì)先向Master注冊信息
4.作業(yè)注冊完畢之后,Master會(huì)向worker發(fā)射Executor命令
5.worker產(chǎn)生若干個(gè)Executor準(zhǔn)備執(zhí)行
6.各個(gè)worker中的Executor會(huì)向Driver Application注冊Executor信息,以便Driver Application能夠?qū)⒆鳂I(yè)分發(fā)到具體的Executor
7.Executor會(huì)定期向Driver Application報(bào)告當(dāng)前的狀態(tài)更新信息
8.Driver Application發(fā)射任務(wù)到Executor執(zhí)行
以上是“spark架構(gòu)是怎么樣的”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!