目錄
1.什么是Spark
2.為什么使用Spark
3.Spark的特點(diǎn)
4.Spark的體系架構(gòu)
5.Spark運(yùn)行機(jī)制及原理分析
1.什么是Spark牵舱?
????Spark是一種快速、通用勒奇、可擴(kuò)展的大數(shù)據(jù)分析引擎荔棉,2009年誕生于加州大學(xué)伯克利分校AMPLab到涂,2010年開源,2013年6月成為Apache孵化項(xiàng)目涤妒,2014年2月成為Apache頂級(jí)項(xiàng)目单雾。目前,Spark生態(tài)系統(tǒng)已經(jīng)發(fā)展成為一個(gè)包含多個(gè)子項(xiàng)目的集合,其中包含SparkSQL硅堆、Spark Streaming屿储、GraphX、MLlib等子項(xiàng)目渐逃,Spark是基于內(nèi)存計(jì)算的大數(shù)據(jù)并行計(jì)算框架够掠。Spark基于內(nèi)存計(jì)算,提高了在大數(shù)據(jù)環(huán)境下數(shù)據(jù)處理的實(shí)時(shí)性茄菊,同時(shí)保證了高容錯(cuò)性和高可伸縮性疯潭,允許用戶將Spark部署在大量廉價(jià)硬件之上,形成集群面殖。Spark得到了眾多大數(shù)據(jù)公司的支持竖哩,這些公司包括Hortonworks、IBM畜普、Intel期丰、Cloudera、MapR吃挑、Pivotal钝荡、百度、阿里舶衬、騰訊埠通、京東、攜程逛犹、優(yōu)酷土豆端辱。當(dāng)前百度的Spark已應(yīng)用于鳳巢、大搜索虽画、直達(dá)號(hào)舞蔽、百度大數(shù)據(jù)等業(yè)務(wù);阿里利用GraphX構(gòu)建了大規(guī)模的圖計(jì)算和圖挖掘系統(tǒng)码撰,實(shí)現(xiàn)了很多生產(chǎn)系統(tǒng)的推薦算法渗柿;騰訊Spark集群達(dá)到8000臺(tái)的規(guī)模,是當(dāng)前已知的世界上最大的Spark集群脖岛。
2.為什么要使用Spark朵栖?
(1)Hadoop的MapReduce計(jì)算模型存在的問題:
????MapReduce的核心是Shuffle(洗牌)。在整個(gè)Shuffle的過程中柴梆,至少會(huì)產(chǎn)生6次的I/O陨溅。下圖是MapReduce的Shuffle的過程。
????中間結(jié)果輸出:基于MapReduce的計(jì)算引擎通常會(huì)將中間結(jié)果輸出到磁盤上绍在,進(jìn)行存儲(chǔ)和容錯(cuò)门扇。另外雹有,當(dāng)一些查詢(如:Hive)翻譯到MapReduce任務(wù)時(shí),往往會(huì)產(chǎn)生多個(gè)Stage(階段)悯嗓,而這些串聯(lián)的Stage又依賴于底層文件系統(tǒng)(如HDFS)來存儲(chǔ)每一個(gè)Stage的輸出結(jié)果件舵,而I/O的效率往往較低,從而影響了MapReduce的運(yùn)行速度脯厨。
(2)Spark的最大特點(diǎn):基于內(nèi)存
????Spark是MapReduce的替代方案铅祸,而且兼容HDFS、Hive合武,可融入Hadoop的生態(tài)系統(tǒng)临梗,以彌補(bǔ)MapReduce的不足。
3.Spark的特點(diǎn):快稼跳、易用盟庞、通用、兼容性
(1)快
????與Hadoop的MapReduce相比汤善,Spark基于內(nèi)存的運(yùn)算速度要快100倍以上什猖,即使,Spark基于硬盤的運(yùn)算也要快10倍红淡。Spark實(shí)現(xiàn)了高效的DAG執(zhí)行引擎不狮,從而可以通過內(nèi)存來高效處理數(shù)據(jù)流。
(2)易用
????Spark支持Java在旱、Python和Scala的API摇零,還支持超過80種高級(jí)算法,使用戶可以快速構(gòu)建不同的應(yīng)用桶蝎。而且Spark支持交互式的Python和Scala的shell驻仅,可以非常方便地在這些shell中使用Spark集群來驗(yàn)證解決問題的方法。
(3)通用
????Spark提供了統(tǒng)一的解決方案登渣。Spark可以用于批處理噪服、交互式查詢(Spark SQL)、實(shí)時(shí)流處理(Spark Streaming)胜茧、機(jī)器學(xué)習(xí)(Spark MLlib)和圖計(jì)算(GraphX)芯咧。這些不同類型的處理都可以在同一個(gè)應(yīng)用中無縫使用。Spark統(tǒng)一的解決方案非常具有吸引力竹揍,畢竟任何公司都想用統(tǒng)一的平臺(tái)去處理遇到的問題,減少開發(fā)和維護(hù)的人力成本和部署平臺(tái)的物力成本邪铲。
????另外Spark還可以很好的融入Hadoop的體系結(jié)構(gòu)中可以直接操作HDFS芬位,并提供Hive on Spark、Pig on Spark的框架集成Hadoop带到。
(4)兼容性
????Spark可以非常方便地與其他的開源產(chǎn)品進(jìn)行融合昧碉。比如,Spark可以使用Hadoop的YARN和Apache Mesos作為它的資源管理和調(diào)度器,器被饿,并且可以處理所有Hadoop支持的數(shù)據(jù)四康,包括HDFS、HBase和Cassandra等狭握。這對(duì)于已經(jīng)部署Hadoop集群的用戶特別重要闪金,因?yàn)椴恍枰鋈魏螖?shù)據(jù)遷移就可以使用Spark的強(qiáng)大處理能力。Spark也可以不依賴于第三方的資源管理和調(diào)度器论颅,它實(shí)現(xiàn)了Standalone作為其內(nèi)置的資源管理和調(diào)度框架哎垦,這樣進(jìn)一步降低了Spark的使用門檻,使得所有人都可以非常容易地部署和使用Spark恃疯。此外漏设,Spark還提供了在EC2上部署Standalone的Spark集群的工具。
4.Spark集群的體系結(jié)構(gòu)
(1)結(jié)構(gòu)
(a)Master:接收任務(wù)請(qǐng)求今妄,分發(fā)任務(wù)
(b)Worker:本節(jié)點(diǎn)任務(wù)調(diào)度郑口,資源管理。默認(rèn)占用該節(jié)點(diǎn)所有資源
- Spark對(duì)內(nèi)存沒有很好管理盾鳞,容易出現(xiàn)OOM犬性。Spark把內(nèi)存管理交給應(yīng)用程序。
- Spark架構(gòu)出現(xiàn)單點(diǎn)故障問題雁仲,通過HA解決仔夺。
(c)Driver:客戶端
(2)啟動(dòng)方式:
1)Spark-submit:
????用于提交Spark 任務(wù)。每個(gè)任務(wù)是一個(gè)jar攒砖。
2)spark-shell:
????類似于 REPL
5.Spark運(yùn)行機(jī)制及原理分析
(1).WordCount執(zhí)行的流程分析
(2).Spark提交任務(wù)的流程