溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

spark的概念與架構(gòu)、工作機(jī)制是怎樣的

發(fā)布時(shí)間:2021-12-03 16:03:00 來源:億速云 閱讀:121 作者:柒染 欄目:大數(shù)據(jù)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)spark的概念與架構(gòu)、工作機(jī)制是怎樣的,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

一、HadoopSpark、Storm三大框架比較

Hadoop:離線海量數(shù)據(jù)批處理,基于磁盤的

Spark:基于內(nèi)存。

Spark特點(diǎn):運(yùn)行速度快,使用DAG執(zhí)行引擎以支持循環(huán)數(shù)據(jù)流與內(nèi)存計(jì)算,

2、容易使用:多種語言編程,通過spark shell進(jìn)行交互式編程

3、通用性:提供了完整而強(qiáng)大的技術(shù)棧,包括sQL查詢、流式計(jì)算、機(jī)器學(xué)習(xí)和圖算法組件

4、運(yùn)行模式多樣:可運(yùn)行在獨(dú)立集群模式中,可以運(yùn)行與hadoop中,也可以運(yùn)行在AmazonEC2等云環(huán)境中,并可以訪問HDFS、HBase、Hive等多種數(shù)據(jù)源

Scala:多范式編程語言

函數(shù)式編程(lisp語言,Haskell語言)

運(yùn)行于java平臺(tái)(jvm,虛擬機(jī)),兼容java程序

scala特性:具備強(qiáng)大的并發(fā)性,支持函數(shù)式編程,支持分布式系統(tǒng),

語法簡(jiǎn)潔,能提供優(yōu)雅的API

scala兼容java,運(yùn)行速度快,能融合到hadoop生態(tài)圈中。

scala是spark的主要編程語言,提供REPL(交互式解釋器),提高程序開發(fā)效率

SparkHadoop的對(duì)比

hadoop的缺點(diǎn):1、表達(dá)能力有限,只能用map和reduce來表示

2、磁盤開銷大

3、延遲高,由于要寫磁盤,因此延遲高

4、任務(wù)之間的銜接涉及IO開銷

Spark相對(duì)于hadoop MapReduce的優(yōu)點(diǎn):

1、不局限于MapReduce,提供多種數(shù)據(jù)集操作類型,編程模型比Hadoop MapReduce更靈活

2、spark提供內(nèi)存計(jì)算,可將中間結(jié)果放到內(nèi)存中,對(duì)于迭代運(yùn)算效率更高

3、基于DAG的任務(wù)調(diào)度機(jī)制,效率更高

spark的概念與架構(gòu)、工作機(jī)制是怎樣的

二、Spark生態(tài)系統(tǒng)

spark生態(tài)系統(tǒng)主要包含了Spark Core、SparkSQLSparkStreaming、MLLibGraphX等組件。

1、海量數(shù)據(jù)批量處理 MapReduce

2、基于歷史數(shù)據(jù)的交互式查詢 Cloudera Impala

3、實(shí)時(shí)數(shù)據(jù)流的處理

spark可以部署在資源管理器Yarn之上,提供一站式大數(shù)據(jù)解決方案

spark可以同時(shí)支持海量數(shù)據(jù)批量處理、歷史數(shù)據(jù)分析、實(shí)時(shí)數(shù)據(jù)處理

spark生態(tài)系統(tǒng)已經(jīng)成為伯克利數(shù)據(jù)分析軟件棧(BDAS)

spark的概念與架構(gòu)、工作機(jī)制是怎樣的

spark的概念與架構(gòu)、工作機(jī)制是怎樣的

Spark生態(tài)系統(tǒng)組件的應(yīng)用場(chǎng)景

spark的概念與架構(gòu)、工作機(jī)制是怎樣的

三、Spark運(yùn)行架構(gòu)

1、基本概念:RDD、DAG、Executor、ApplicationTask、Job、Stage

RDD:彈性分布式數(shù)據(jù)集的簡(jiǎn)稱,是分布式內(nèi)存的一個(gè)抽象概念 ,提供了一個(gè)高度共享的內(nèi)存模型。

spark的概念與架構(gòu)、工作機(jī)制是怎樣的

和MapReduce相比有兩個(gè)優(yōu)點(diǎn)

1、利用多線程來執(zhí)行具體任務(wù),減少任務(wù)的啟動(dòng)開銷。

2、同時(shí)利用內(nèi)存和磁盤作為共同的存儲(chǔ)設(shè)備,有限的減少IO開銷。

2、Spark運(yùn)行基本原理

spark的概念與架構(gòu)、工作機(jī)制是怎樣的

1、構(gòu)建基本的運(yùn)行環(huán)境,由dirver創(chuàng)建一個(gè)SparkContext,分配并監(jiān)控資源使用情況

2、資源管理器為其分配資源,啟動(dòng)Excutor進(jìn)程

3、SparkContext根據(jù)RDD 的依賴關(guān)系構(gòu)建DAG圖,GAG圖提交給DAGScheduler解析成stage,然后提交給底層的taskscheduler處理。

executor向SparkContext申請(qǐng)task,taskscheduler 將task發(fā)放給Executor運(yùn)行并提供應(yīng)用程序代碼

4、Task在Executor運(yùn)行把結(jié)果反饋給TaskScheduler,一層層反饋上去。最后釋放資源

運(yùn)行架構(gòu)特點(diǎn):多線程運(yùn)行、運(yùn)行過程與資源管理器無關(guān)、Task采用了數(shù)據(jù)本地性和推測(cè)執(zhí)行來優(yōu)化。

3、RDD概念

設(shè)計(jì)背景,迭代式算法,若采用MapReduce則會(huì)重用中間結(jié)果;MapReduce不斷在磁盤中讀寫數(shù)據(jù),會(huì)帶來很大開銷。

spark的概念與架構(gòu)、工作機(jī)制是怎樣的

RDD的典型執(zhí)行過程

1)讀入外部數(shù)據(jù)源進(jìn)行創(chuàng)建,分區(qū)

2)RDD經(jīng)過一系列的轉(zhuǎn)化操作,每一次都會(huì)產(chǎn)生不同的RDD供給下一個(gè)轉(zhuǎn)化擦操作使用

3)最后一個(gè)RDD經(jīng)過一個(gè)動(dòng)作操作進(jìn)行計(jì)算并輸出到外部數(shù)據(jù)源

優(yōu)點(diǎn):惰性調(diào)用、調(diào)用、管道化、避免同步等待,不需要保存中間結(jié)果     

高效的原因:

1)容錯(cuò)性:現(xiàn)有方式是用日志記錄的方式。而RDD具有天生的容錯(cuò),任何一個(gè)RDD出錯(cuò),都可以去找父親節(jié)點(diǎn),代價(jià)低。RDD的每次轉(zhuǎn)換都會(huì)生成一個(gè)新的RDD,所以RDD之間就會(huì)形成類似于流水線一樣的前后依賴關(guān)系。在部分分區(qū)數(shù)據(jù)丟失時(shí),Spark可以通過這個(gè)依賴關(guān)系重新計(jì)算丟失的分區(qū)數(shù)據(jù),而不是對(duì)RDD的所有分區(qū)進(jìn)行重新計(jì)算。

2)中間結(jié)果保存到內(nèi)存,避免了不必要的內(nèi)存開銷

3)存放的數(shù)據(jù)可以是java對(duì)象,避免了對(duì)象的序列化和反序列化。

RDD的依賴關(guān)系:窄依賴和寬依賴

窄依賴:(narrow dependency)是指每個(gè)父RDD的一個(gè)Partition最多被子RDD的一個(gè)Partition所使用,例如map、filter、union等操作都會(huì)產(chǎn)生窄依賴;(獨(dú)生子女)即rdd中的每個(gè)partition僅僅對(duì)應(yīng)父rdd中的一個(gè)partition。rdd里面的partition只去向子rdd里的某一個(gè)partition!這叫窄依賴,如果父rdd里面的某個(gè)partition會(huì)去子rdd里面的多個(gè)partition,那它就一定是寬依賴!

寬依賴(shuffle dependency):是指一個(gè)父RDD的Partition會(huì)被多個(gè)子RDD的Partition所使用,例如groupByKey、reduceByKey、sortByKey等操作都會(huì)產(chǎn)生寬依賴;(超生)每一個(gè)父rdd的partition數(shù)據(jù)都有可能傳輸一部分?jǐn)?shù)據(jù)到子rdd的每一個(gè)partition中,即子rdd的多個(gè)partition依賴于父rdd。寬依賴劃分成一個(gè)stage?。。?/strong>

作用:完成Stage的劃分

spark的概念與架構(gòu)、工作機(jī)制是怎樣的

spark劃分stage的整體思路是:從后往前推,遇到寬依賴就斷開,劃分為一個(gè)stage;遇到窄依賴就將這個(gè)RDD加入該stage中。因此在上圖中RDD C,RDD D,RDD E,RDDF被構(gòu)建在一個(gè)stage中,RDD A被構(gòu)建在一個(gè)單獨(dú)的Stage中,而RDD B和RDD G又被構(gòu)建在同一個(gè)stage中。

Stage的劃分:

ShuffleMapStage和ResultStage:

簡(jiǎn)單來說,DAG的最后一個(gè)階段會(huì)為每個(gè)結(jié)果的partition生成一個(gè)ResultTask,即每個(gè)Stage里面的Task的數(shù)量是由該Stage中最后一個(gè)RDD的Partition的數(shù)量所決定的!而其余所有階段都會(huì)生成ShuffleMapTask;之所以稱之為ShuffleMapTask是因?yàn)樗枰獙⒆约旱挠?jì)算結(jié)果通過shuffle到下一個(gè)stage中;也就是說上圖中的stage1和stage2相當(dāng)于mapreduce中的Mapper,而ResultTask所代表的stage3就相當(dāng)于mapreduce中的reducer。

四、Spark SQL

Spark的另外一個(gè)組件。先說一下shark(Hive on Spark),為了實(shí)現(xiàn)與Hive兼容,在HiveQL方面重用了HIveQL的解析、邏輯執(zhí)行計(jì)劃翻譯等邏輯,把HiveQL操作翻譯成Spark上的RDD操作。相當(dāng)于在最后將邏輯計(jì)劃轉(zhuǎn)換為物理計(jì)劃時(shí)將原來轉(zhuǎn)換成MapReduce替換成了轉(zhuǎn)換成Spark。

與spark相比,sparkSQL不再是依賴于Hive,而是形成了一套自己的SQL,只依賴了Hive解析、Hive元數(shù)據(jù)。從hql被解析成語法抽象樹之后,剩下的東西全部是自己的東西,不再依賴Hive原來的組件,增加了SchemaRDD,運(yùn)行在SchemaRDD中封裝更多的數(shù)據(jù),數(shù)據(jù)分析功能更強(qiáng)大。同時(shí)支持更多語言,除R語言外,還支持Scala、Java、python語言。

五、Spark安裝和部署

1Standalone 2、Spark on mesos 3、spark on yarn

企業(yè)中的應(yīng)用部署

spark的概念與架構(gòu)、工作機(jī)制是怎樣的

spark的概念與架構(gòu)、工作機(jī)制是怎樣的

六、spark編程

編寫應(yīng)用程序

1、加載文件到RDD中

2、設(shè)置環(huán)境變量

3、創(chuàng)建SparkContext

4、轉(zhuǎn)換操作

5、Action計(jì)算操作1

6、創(chuàng)建sbt文件

7、使用sbt對(duì)其進(jìn)行打包

8、把jar包提交到spark中運(yùn)行。

上述就是小編為大家分享的spark的概念與架構(gòu)、工作機(jī)制是怎樣的了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI