溫馨提示×

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

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

Spark是怎樣工作的

發(fā)布時(shí)間:2022-01-14 17:18:46 來(lái)源:億速云 閱讀:146 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“Spark是怎樣工作的”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Spark是怎樣工作的”吧!

01 概述

隨著越來(lái)越多來(lái)自應(yīng)用領(lǐng)域的細(xì)分需求,人們從最初Hadoop的HDFS和MapReduce開(kāi)始,一步步地構(gòu)造出了各種細(xì)分領(lǐng)域的技術(shù)框架。有專攻處理批處理場(chǎng)景的,有專攻數(shù)據(jù)倉(cāng)庫(kù)場(chǎng)景的,有處理流計(jì)算場(chǎng)景的,也有專職機(jī)器學(xué)習(xí)的。

在我看來(lái)這有點(diǎn)像在給Hadoop打補(bǔ)丁,因?yàn)镠adoop在設(shè)計(jì)之初根本沒(méi)有考慮過(guò)這么多的場(chǎng)景,它只是為了支撐離線批處理。但是需求擺在這里,為了實(shí)現(xiàn)目標(biāo)只得另起爐灶通過(guò)設(shè)計(jì)一個(gè)全新的系統(tǒng)滿足需求。這種現(xiàn)狀造成了很多問(wèn)題。

  • 重復(fù)工作:不同的系統(tǒng)之間都需要解決一些相同的共性問(wèn)題,比如分布式執(zhí)行和容錯(cuò)性。例如MapReduce、SQL查詢引擎和機(jī)器學(xué)習(xí)系統(tǒng)都會(huì)涉及聚合操作。

  • 組合:不同系統(tǒng)之間的組合使用非常“昂貴”,因?yàn)椴煌到y(tǒng)之間無(wú)法有效的功效數(shù)。為了組合使用我們需要將數(shù)據(jù)在不同的系統(tǒng)之間頻繁的導(dǎo)出導(dǎo)入,數(shù)據(jù)用來(lái)移動(dòng)的時(shí)間可能都會(huì)超過(guò)計(jì)算的時(shí)間。

  • 維護(hù)成本:雖然這些系統(tǒng)從每個(gè)個(gè)體的角度來(lái)看都十分優(yōu)秀,但是它們都是在不同時(shí)期由不同的團(tuán)隊(duì)設(shè)計(jì)實(shí)現(xiàn)的,其設(shè)計(jì)思路和實(shí)現(xiàn)方式也各不相同。這導(dǎo)致平臺(tái)在部署運(yùn)維這些系統(tǒng)的時(shí)候十分痛苦,因?yàn)樗鼈儾町愄罅恕?/p>

  • 學(xué)習(xí)成本:系統(tǒng)之間巨大的差異性對(duì)于開(kāi)發(fā)人員來(lái)講更是如此,這些技術(shù)框架擁有不同的邏輯對(duì)象、專業(yè)術(shù)語(yǔ)、API和編程模型,每種框架都需要重新學(xué)習(xí)一遍才能使用。

Spark意識(shí)到了這個(gè)問(wèn)題,作為一個(gè)后起之秀它擁有天然的優(yōu)勢(shì)。Spark誕生于2012年,那個(gè)時(shí)候Hadoop生態(tài)已經(jīng)經(jīng)過(guò)了6個(gè)年頭的發(fā)展,其生態(tài)格局已經(jīng)成型。Spark已經(jīng)能夠看清大數(shù)據(jù)有哪些細(xì)分領(lǐng)域,同時(shí)MapReduce、Hive、Storm等開(kāi)源組件也已經(jīng)發(fā)展多年,Spark也能夠了解到它們的長(zhǎng)處和不足。

于是Spark橫空出世,成為目前開(kāi)源社區(qū)最為火爆的一款分布式內(nèi)存計(jì)算引擎。Spark使用DAG(有向無(wú)環(huán)圖)模型作為其執(zhí)行模型,并且主要使用內(nèi)存計(jì)算的方式進(jìn)行任務(wù)計(jì)算。

Spark基于一套統(tǒng)一的數(shù)據(jù)模型(RDD)和編程模型(Trans-foration /Action)之上,構(gòu)建出了Spark SQL、Spark  Streaming、Spark MLibs等多個(gè)分支,其功能涵蓋了大數(shù)據(jù)的多個(gè)領(lǐng)域,如圖2-14所示。

Spark是怎樣工作的

▲圖2-14 Spark涵蓋的領(lǐng)域

Spark通過(guò)統(tǒng)一的數(shù)據(jù)模型和編程模型,構(gòu)造出了SQL查詢、流計(jì)算、機(jī)器學(xué)習(xí)和圖計(jì)算等多個(gè)分支庫(kù)。

02 數(shù)據(jù)模型

RDD是彈性分布式數(shù)據(jù)集(Resilient Distributed  Datasets)的縮寫,它是MapReduce模型的擴(kuò)展和延伸。Spark之所以能夠同時(shí)支撐大數(shù)據(jù)的多個(gè)領(lǐng)域,在很大程度上是依靠了RDD的能力。

雖然批處理、流計(jì)算、圖計(jì)算和機(jī)器學(xué)習(xí)這些計(jì)算場(chǎng)景之間初看起來(lái)風(fēng)馬牛不相及,但是它們都存在一個(gè)共同的需求,那就是在并行計(jì)算階段能夠高效的共享數(shù)據(jù)。

RDD的設(shè)計(jì)者們洞穿了這一現(xiàn)象,于是通過(guò)高效的數(shù)據(jù)共享概念和類似MapReduce的操作設(shè)計(jì)了RDD,使得它能模擬迭代式算法、關(guān)系查詢、MapReduce和流式處理等多種編程模型。

同時(shí)它也是一個(gè)可容錯(cuò)的、可并行的數(shù)據(jù)結(jié)構(gòu),可以讓用戶指定將數(shù)據(jù)存儲(chǔ)到磁盤和內(nèi)存中,并能控制數(shù)據(jù)的分區(qū)。同時(shí)它還提供了一些高效的編程接口操作數(shù)據(jù)集。

03 編程模型和作業(yè)調(diào)度

Spark將RDD的操作分為兩類:轉(zhuǎn)換(transformation)與行動(dòng)(action)。

轉(zhuǎn)換操作是一種惰性操作,它只會(huì)定義新的RDD,而不會(huì)立即執(zhí)行。而行動(dòng)操作則是立即執(zhí)行計(jì)算,它要么返回結(jié)果給Driver進(jìn)程,或是將結(jié)果輸出到外部存儲(chǔ)。常見(jiàn)轉(zhuǎn)換操作如map、flatMap、filter等,常見(jiàn)行動(dòng)操作如count、collect等。

當(dāng)用戶對(duì)一個(gè)RDD執(zhí)行了行動(dòng)操作之后,調(diào)度器會(huì)根據(jù)RDD的依賴關(guān)系生成一個(gè)DAG(有向無(wú)環(huán)圖)圖來(lái)執(zhí)行程序。DAG由若干個(gè)stage組成,每個(gè)stage內(nèi)都包含多個(gè)連續(xù)的窄依賴。而各個(gè)stage之間則是寬依賴。如圖2-15所示,實(shí)線方框代表的是RDD。方框內(nèi)的矩形代表分區(qū),若分區(qū)已在內(nèi)存中保存則用黑色表示。

Spark是怎樣工作的

▲圖2-15 Spark任務(wù)拆分示意

04 依賴

RDD作為數(shù)據(jù)結(jié)構(gòu),本質(zhì)上是一個(gè)只讀的分區(qū)記錄集合。一個(gè)RDD可以包含多個(gè)分區(qū),每個(gè)分區(qū)是一個(gè)數(shù)據(jù)片段。

RDD可以相互依賴。如果父RDD的每個(gè)分區(qū)最多被一個(gè)子RDD的分區(qū)使用,則稱之為窄依賴;若多個(gè)子RDD分區(qū)依賴一個(gè)父RDD的分區(qū),則稱之為寬依賴。不同的操作依據(jù)其特性,可能會(huì)產(chǎn)生不同的依賴。例如map操作會(huì)產(chǎn)生窄依賴,而join操作則產(chǎn)生寬依賴。

Spark之所以將依賴分為兩種,基于兩點(diǎn)原因。首先,窄依賴支持在同單個(gè)集群上以管道的形式式執(zhí),例如在執(zhí)行了map后,緊接著執(zhí)行filter。相反,寬依賴需要所有的父RDD數(shù)據(jù)都可用并通過(guò)shuffle動(dòng)作才可繼續(xù)執(zhí)行。

其次,窄依賴的失敗恢復(fù)更加高效,因?yàn)樗恍枰匦掠?jì)算丟失的父分區(qū),并且這些計(jì)算可以并行的在不同節(jié)點(diǎn)同時(shí)進(jìn)行。與此相反,在寬依賴的繼承關(guān)系中,單個(gè)失敗的節(jié)點(diǎn)可能導(dǎo)致一個(gè)RDD的所有先祖RDD中的一些分區(qū)丟失,導(dǎo)致計(jì)算的重新執(zhí)行。如圖2-16所示,說(shuō)明了窄依賴與寬依賴之間的區(qū)別。

Spark是怎樣工作的

▲圖2-16 SparkRDD寬依賴和窄依賴示意

05 容錯(cuò)

傳統(tǒng)分布式系統(tǒng)的容錯(cuò)方案有據(jù)復(fù)制和恢復(fù)日志兩種方案。對(duì)于以數(shù)據(jù)為中心的系統(tǒng)而言,這兩種方式都非常昂貴,因?yàn)樗枰缂壕W(wǎng)絡(luò)復(fù)制大量數(shù)據(jù),而網(wǎng)絡(luò)帶寬的速度遠(yuǎn)遠(yuǎn)低于內(nèi)存訪問(wèn)的速度。

RDD天生是支持容錯(cuò)的。首先,它自身是一個(gè)不變的數(shù)據(jù)集,其次,Spark使用DAG作為其執(zhí)行模型,所以它能夠通過(guò)RDD的依賴特性記住一系列操作生成一張DAG圖。因此當(dāng)執(zhí)行的任務(wù)失敗時(shí),Spark只需根據(jù)DAG圖進(jìn)行重新計(jì)算即可實(shí)現(xiàn)容錯(cuò)機(jī)制。由于無(wú)須采用復(fù)制的方式支持容錯(cuò),Spark很好地降低了跨網(wǎng)絡(luò)的數(shù)據(jù)傳輸成本。

06 集群模式

Spark的應(yīng)用以一組獨(dú)立進(jìn)程的形式運(yùn)行在一個(gè)集群之上,由主程序中的SparkContext對(duì)象進(jìn)行協(xié)調(diào)(也被稱為driver程序)。Spark目前支持三種集群運(yùn)行方式。

具體來(lái)說(shuō),Spark既可以通過(guò)standlone模式獨(dú)立運(yùn)行,也可以運(yùn)行在Mesos或者YARN之上。

如圖2-17所示,一旦SparkContext連接到集群,Spark首先會(huì)從集群的節(jié)點(diǎn)中獲得一些executor進(jìn)程,這些進(jìn)程會(huì)用來(lái)執(zhí)行我們程序中的計(jì)算和存儲(chǔ)邏輯,接著它會(huì)通過(guò)jar包的形式分發(fā)我們的程序代碼到各個(gè)executor進(jìn)程。最后,SparkContext會(huì)分派任務(wù)到各executor進(jìn)程進(jìn)行執(zhí)行。

Spark是怎樣工作的

▲圖2-17 Spark任務(wù)進(jìn)程示意

每個(gè)應(yīng)用都擁有自己的executor進(jìn)程,這些進(jìn)程會(huì)在整個(gè)應(yīng)用生命周期內(nèi)持續(xù)運(yùn)行并以多線程的方式執(zhí)行具體的任務(wù)。這種設(shè)計(jì)的好處是將各個(gè)應(yīng)用之間的資源消耗進(jìn)行了隔離,每個(gè)應(yīng)用都運(yùn)行在它們各自的JVM中。但是這也意味著不同應(yīng)用之間的SparkContext無(wú)法共享數(shù)據(jù),除非借助擴(kuò)展的存儲(chǔ)媒介。

Spark對(duì)底層集群管理不可知。只要能夠獲取到executor進(jìn)行,并且這些進(jìn)程之間可以通信,它就能比較容易的運(yùn)行在其他通用集群資源調(diào)度框架之上,如Mesos和YARN。

07 使用場(chǎng)景

Spark借助其RDD的出色設(shè)計(jì),做到了橫跨多個(gè)領(lǐng)域的支撐。這意味著我們?cè)谝惶壮绦蜻壿嬛锌梢约啥喾N操作。

例如使用SQL查詢過(guò)濾數(shù)據(jù),然后進(jìn)行機(jī)器學(xué)習(xí)或是通過(guò)SQL的方式操作流數(shù)據(jù)。在提升便利的同時(shí)也降低了開(kāi)發(fā)人員的學(xué)習(xí)曲線,基于Spark,只需要學(xué)習(xí)一套編程模型即可處理多個(gè)領(lǐng)域。

所以將Spark作為平臺(tái)的一站式計(jì)算解決方案是再合適不過(guò)了。

到此,相信大家對(duì)“Spark是怎樣工作的”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(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