一、Spark概述
Spark最初由美國(guó)加州伯克利大學(xué)(UCBerkeley)的AMP(Algorithms, Machines and People)實(shí)驗(yàn)室于2009年開發(fā),是基于內(nèi)存計(jì)算的大數(shù)據(jù)并行計(jì)算框架,可用于構(gòu)建大型的、低延遲的數(shù)據(jù)分析應(yīng)用程序。Spark在誕生之初屬于研究性項(xiàng)目,其諸多核心理念均源自學(xué)術(shù)研究論文。2013年,Spark加入Apache孵化器項(xiàng)目后,開始獲得迅猛的發(fā)展,如今已成為Apache軟件基金會(huì)最重要的三大分布式計(jì)算系統(tǒng)開源項(xiàng)目之一(即Hadoop、Spark、Storm)
二、Spark的特點(diǎn)
Spark計(jì)算框架在處理數(shù)據(jù)時(shí),所有的中間數(shù)據(jù)都保存在內(nèi)存中,從而減少磁盤讀寫操作,提高框架計(jì)算效率。同時(shí)Spark還兼容HDFS、Hive,可以很好地與Hadoop系統(tǒng)融合,從而彌補(bǔ)MapReduce高延遲的性能缺點(diǎn)。所以說,Spark是一個(gè)更加快速、高效的大數(shù)據(jù)計(jì)算平臺(tái)。
特點(diǎn)可以概括為以下四點(diǎn)
1:運(yùn)行速度快
2:容易使用
3:通用性
4:運(yùn)行模式多樣
Spark支持使用Scala Java Python和R語(yǔ)言編程,由于Spark采用Scala語(yǔ)言進(jìn)行開發(fā),因此建議采用Scala語(yǔ)言進(jìn)行Spark應(yīng)用程序的編寫,采用Scala語(yǔ)言編寫Spark應(yīng)用程序,可以獲得最好的性能,和其他語(yǔ)言相比,Scala主要有以下三個(gè)方面的優(yōu)勢(shì)
1:Java代碼比較繁瑣
2:Python語(yǔ)言并發(fā)性能不好
3:Scala兼容Java?
三、Spark生態(tài)系統(tǒng)
Spark在2013年加入Apache孵化器項(xiàng)目,之后獲得迅猛的發(fā)展,并于2014年正式成為Apache軟件基金會(huì)的頂級(jí)項(xiàng)目。Spark生態(tài)系統(tǒng)已經(jīng)發(fā)展成為一個(gè)可應(yīng)用于大規(guī)模數(shù)據(jù)處理的統(tǒng)一分析引擎,它是基于內(nèi)存計(jì)算的大數(shù)據(jù)并行計(jì)算框架,適用于各種各樣的分布式平臺(tái)的系統(tǒng)。在Spark生態(tài)圈中包含了Spark SQL、Spark Streaming、GraphX、MLlib等組件。
Spark Core:Spark核心組件,實(shí)現(xiàn)了Spark的基本功能,包含任務(wù)調(diào)度、內(nèi)存管理、錯(cuò)誤恢復(fù)、與存儲(chǔ)系統(tǒng)交互等模塊。Spark Core中還包含對(duì)彈性分布式數(shù)據(jù)集的API定義。
Spark SQL:用來操作結(jié)構(gòu)化數(shù)據(jù)的核心組件,通過Spark SQL可直接查詢Hive、HBase等多種外部數(shù)據(jù)源中的數(shù)據(jù)。Spark SQL的重要特點(diǎn)是能夠統(tǒng)一處理關(guān)系表和RDD。
Spark Streaming:Spark提供的流式計(jì)算框架,支持高吞吐量、可容錯(cuò)處理的實(shí)時(shí)流式數(shù)據(jù)處理,其核心原理是將流數(shù)據(jù)分解成一系列短小的批處理作業(yè)。
MLlib:Spark提供的關(guān)于機(jī)器學(xué)習(xí)功能的算法程序庫(kù),包括分類、回歸、聚類、協(xié)同過濾算法等,還提供了模型評(píng)估、數(shù)據(jù)導(dǎo)入等額外的功能。
GraphX:Spark提供的分布式圖處理框架,擁有對(duì)圖計(jì)算和圖挖掘算法的API接口及豐富的功能和運(yùn)算符,便于對(duì)分布式圖處理的需求,能在海量數(shù)據(jù)上運(yùn)行復(fù)雜的圖算法。
獨(dú)立調(diào)度器、Yarn、Mesos:集群管理器,負(fù)責(zé)Spark框架高效地在一個(gè)到數(shù)千個(gè)節(jié)點(diǎn)之間進(jìn)行伸縮計(jì)算的資源管理。
四、Spark與Hadoop對(duì)比
1:編程方式
Hadoop的MapReduce計(jì)算數(shù)據(jù)時(shí),要轉(zhuǎn)化為Map和Reduce兩個(gè)過程,從而難以描述復(fù)雜的數(shù)據(jù)處理過程;而Spark的計(jì)算模型不局限于Map和Reduce操作,還提供了多種數(shù)據(jù)集的操作類型,編程模型比MapReduce更加靈活。
2:數(shù)據(jù)存儲(chǔ)
Hadoop的MapReduce進(jìn)行計(jì)算時(shí),每次產(chǎn)生的中間結(jié)果都存儲(chǔ)在本地磁盤中;而Spark在計(jì)算時(shí)產(chǎn)生的中間結(jié)果存儲(chǔ)在內(nèi)存中。
3:數(shù)據(jù)處理
Hadoop在每次執(zhí)行數(shù)據(jù)處理時(shí),都要從磁盤中加載數(shù)據(jù),導(dǎo)致磁盤IO開銷較大;而Spark在執(zhí)行數(shù)據(jù)處理時(shí),要將數(shù)據(jù)加載到內(nèi)存中,直接在內(nèi)存中加載中間結(jié)果數(shù)據(jù)集,減少了磁盤的IO開銷。
4:數(shù)據(jù)容錯(cuò)
MapReduce計(jì)算的中間結(jié)果數(shù)據(jù),保存在磁盤中,Hadoop底層實(shí)現(xiàn)了備份機(jī)制,從而保證了數(shù)據(jù)容錯(cuò);Spark RDD實(shí)現(xiàn)了基于Lineage的容錯(cuò)機(jī)制和設(shè)置檢查點(diǎn)方式的容錯(cuò)機(jī)制,彌補(bǔ)數(shù)據(jù)在內(nèi)存處理時(shí),因斷電導(dǎo)致數(shù)據(jù)丟失的問題。
五、Spark的部署方式
?1:Standalone模式
Standalone模式被稱為集群?jiǎn)螜C(jī)模式。
該模式下,Spark集群架構(gòu)為主從模式,即一臺(tái)Master節(jié)點(diǎn)與多臺(tái)Slave節(jié)點(diǎn),Slave節(jié)點(diǎn)啟動(dòng)的進(jìn)程名稱為Worker,存在單點(diǎn)故障的問題。
2:Mesos模式
Mesos模式被稱為Spark on Mesos模式。
Mesos是一款資源調(diào)度管理系統(tǒng),為Spark提供服務(wù),由于Spark與Mesos存在密切的關(guān)系,因此在設(shè)計(jì)Spark框架時(shí)充分考慮到對(duì)Mesos的集成。
3:Yarn模式
Yarn模式被稱為Spark on Yarn模式,即把Spark作為一個(gè)客戶端,將作業(yè)提交給Yarn服務(wù)。
由于在生產(chǎn)環(huán)境中,很多時(shí)候都要與Hadoop使用同一個(gè)集群,因此采用Yarn來管理資源調(diào)度,可以提高資源利用率。
六、Spark運(yùn)行架構(gòu)與原理
Spark運(yùn)行架構(gòu)主要由SparkContext、Cluster Manager和Worker組成,其中Cluster Manager負(fù)責(zé)整個(gè)集群的統(tǒng)一資源管理,Worker節(jié)點(diǎn)中的Executor是應(yīng)用執(zhí)行的主要進(jìn)程,內(nèi)部含有多個(gè)Task線程以及內(nèi)存空間,
七、Spark運(yùn)行基本流程
Spark應(yīng)用在集群上作為獨(dú)立的進(jìn)程組來運(yùn)行,具體運(yùn)行流程如下所示。
?1)當(dāng)一個(gè)Spark應(yīng)用被提交時(shí),根據(jù)提交參數(shù)創(chuàng)建Driver進(jìn)程,為應(yīng)用構(gòu)建起基本的運(yùn)行環(huán)境,即由Driver創(chuàng)建一個(gè)SparkContext進(jìn)行資源的申請(qǐng)、任務(wù)的分配和監(jiān)控。
2)SparkContext根據(jù)RDD的依賴關(guān)系構(gòu)建DAG圖,DAG圖提交給DAGScheduler解析成Stage,然后把一個(gè)個(gè)TaskSet提交給底層調(diào)度器Task Scheduler處理。
3)資源管理器Cluster Manager為Executor分配資源,并啟動(dòng)Executor進(jìn)程
4)Executor向SparkContext申請(qǐng)Task,TaskScheduler將Task發(fā)放給Executor運(yùn)行并提供應(yīng)用程序代碼。
5)Task在Executor上運(yùn)行把執(zhí)行結(jié)果反饋給TaskScheduler,然后反饋給DAGScheduler,運(yùn)行完畢后寫入數(shù)據(jù)并釋放所有資源。文章來源:http://www.zghlxwxcb.cn/news/detail-794717.html
創(chuàng)作不易 覺得有幫助請(qǐng)點(diǎn)贊關(guān)注收藏~~~文章來源地址http://www.zghlxwxcb.cn/news/detail-794717.html
到了這里,關(guān)于【大數(shù)據(jù)技術(shù)Hadoop+Spark】Spark架構(gòu)、原理、優(yōu)勢(shì)、生態(tài)系統(tǒng)等講解(圖文解釋)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!