- Spark大數(shù)據(jù)編程實用教程
- 艾叔主編
- 1605字
- 2021-03-23 18:09:23
1.2 初識Spark
1.2.1 Spark是什么
1.Spark定義

圖1-5 Spark Logo圖
Spark官網(wǎng)給出的英文定義如下:Apache Spark? is a unified analytics engine for large-scale data processing。翻譯成中文為:Apache Spark?是一個統(tǒng)一的大規(guī)模數(shù)據(jù)處理分析引擎。Spark的logo如圖1-5所示。
Apache Spark右上標(biāo)TM表示商標(biāo)符號,即Apache Spark是一個商標(biāo);
Spark的官方網(wǎng)站:http://spark.apache.org/,提供Spark各個版本的下載、Spark新聞發(fā)布以及各種文檔,是Spark學(xué)習(xí)的第一網(wǎng)站;
特別說明:本書基于Spark 2.3.0,后續(xù)如不做特殊說明,默認都是采用Spark 2.3.0版本。
2.認識Spark
結(jié)合官方定義,可以從以下幾個方面來認識Spark:
●Spark是一個Linux下的軟件框架,用戶調(diào)用Spark提供的jar包編寫Spark程序,一個Spark程序可以分布到多個節(jié)點上運行;
●Spark可以將Spark程序中的大數(shù)據(jù)處理任務(wù)分解到多個節(jié)點上,每個節(jié)點負責(zé)一部分任務(wù)并行處理,共同完成總?cè)蝿?wù);
●Spark不僅支持常規(guī)的大數(shù)據(jù)分析任務(wù),它還支持流數(shù)據(jù)、圖數(shù)據(jù),或者是SQL操作的大數(shù)據(jù)任務(wù),因此,它是一個統(tǒng)一的大數(shù)據(jù)分析引擎。
Spark的編程有專門的方法,要按照此方法來做任務(wù)分解,這樣寫出來的Spark程序才可執(zhí)行并行處理任務(wù)。隨便寫一個Spark程序,或者說按照傳統(tǒng)的方法寫一個串行程序,Spark框架是不會、也不可能做任務(wù)分解和并行處理的;
Spark程序在集群上運行,必須要有專門的集群管理器,集群管理器用于集群資源的監(jiān)控、管理和調(diào)度等功能,常用的集群管理器包括Yarn、MMesos和Kubernetes,Spark自帶的資源管理器是Standalone,通常把Spark Standalone也稱為Spark集群;
注意Spark、Spark程序和Spark集群的含義:Spark指Spark框架自身,Spark程序指基于Spark框架和規(guī)則所編寫的程序,Spark集群指Spark自帶的集群管理器Standalone,即Spark Standalone;
Spark利用集群對各種各樣的大數(shù)據(jù)進行分析,屬于大數(shù)據(jù)開發(fā)過程中的大數(shù)據(jù)處理環(huán)節(jié)。
1.2.2 Spark的技術(shù)特點
1.Spark具備更高性能
Spark性能對比的對象是Hadoop MapReduce。MapReduce的輸出只能存儲在文件系統(tǒng)上,新一輪MapReduce的輸入只能從文件系統(tǒng)上讀入,這樣I/O和網(wǎng)絡(luò)的開銷都很大;而在Spark中,Reduce 的結(jié)果可以保存在內(nèi)存中(或者內(nèi)存+文件系統(tǒng)中),這樣,下一輪迭代的輸入可以直接從內(nèi)存獲得,可以大大節(jié)省系統(tǒng)開銷。根據(jù)Spark官網(wǎng)的統(tǒng)計結(jié)果,在某些特定的算法領(lǐng)域,Spark的性能是Hadoop MapReduce的100倍以上。
2.Spark支持多種語言
Spark支持多種語言,包括Java、Scala、Python、R和SQL,其中Spark自身就是用Scala開發(fā)的,因此Scala是Spark的原生開發(fā)語言,Spark對其支持最好。
3.Spark更通用
如前所述,Spark不僅支持常規(guī)的大數(shù)據(jù)分析任務(wù),還提供了SQL操作、流數(shù)據(jù)處理、圖數(shù)據(jù)處理,同時還提供了豐富的機器學(xué)習(xí)算法庫MLlib來支持各種類型的大數(shù)據(jù)分析處理。
4.Spark可以在多個平臺上運行
如前所述,盡管Spark程序的運行依賴于特定的集群管理器(不能直接在操作系統(tǒng)上運行),但是它可以在Hadoop、Apache Mesos、Kubernetes或是Cloud(如EC2)等多種集群管理器下運行。
5.Spark使得分布式處理程序的開發(fā)更容易
如果采用常規(guī)的方法開發(fā)分布式處理程序,需要有分布式開發(fā)的經(jīng)驗,一般的開發(fā)過程如下:首先,需要設(shè)計分布式的處理架構(gòu);其次,自定義消息和網(wǎng)絡(luò)交互協(xié)議,實現(xiàn)進程間的交互;接下來,利用網(wǎng)絡(luò)編程接口Socket或者更上層的網(wǎng)絡(luò)通信機制如RPC等方式實現(xiàn)進程間的網(wǎng)絡(luò)通信;然后,編程實現(xiàn)架構(gòu)中各種角色的邏輯;功能實現(xiàn)后,還要考慮系統(tǒng)的擴展、容錯等機制??傊畯纳蠈拥臉I(yè)務(wù)邏輯,到底層的通信、同步和容錯等,所有的問題都需要開發(fā)者考慮。如果要想將擴展性做得很好,支撐很大的規(guī)模,同時又兼顧穩(wěn)定性的話,開發(fā)難度會很大。
在Spark上開發(fā)程序,就像寫單機版程序一樣簡單(當(dāng)然,具體方法還是不一樣的),開發(fā)者看不到集群上的具體節(jié)點,任務(wù)的分解和并行,節(jié)點間的通信和交互、容錯等都由Spark來完成,開發(fā)者可以將注意力集中在上層的業(yè)務(wù)邏輯,因此可以大幅降低開發(fā)者的負擔(dān),簡化開發(fā)過程。
MapReduce要解決的問題之一就是降低大數(shù)據(jù)開發(fā)難度,通過編程模型向用戶屏蔽分布式開發(fā)的細節(jié),使得用戶能夠?qū)W⒂谏蠈拥奶幚磉壿?。Spark吸取了MapReduce的這個優(yōu)點。因此,Spark能使沒有分布式系統(tǒng)的開發(fā)經(jīng)驗的人員,也能夠開發(fā)出支撐大規(guī)模數(shù)據(jù)處理的分布式程序;
Spark 向開發(fā)者屏蔽了底層細節(jié),從這個角度來說,Spark編程并不是特別高深的技術(shù)。但是,如果要通過 Spark 將集群的性能利用到極致,則又需要透過Spark深入到底層,這就需要很深的技術(shù)功力了。
- Oracle RAC 11g實戰(zhàn)指南
- 業(yè)務(wù)數(shù)據(jù)分析:五招破解業(yè)務(wù)難題
- 商業(yè)分析思維與實踐:用數(shù)據(jù)分析解決商業(yè)問題
- 數(shù)據(jù)結(jié)構(gòu)與算法(C語言版)
- Live Longer with AI
- Enterprise Integration with WSO2 ESB
- 深度剖析Hadoop HDFS
- Proxmox VE超融合集群實踐真?zhèn)?/a>
- 大數(shù)據(jù)分析:數(shù)據(jù)倉庫項目實戰(zhàn)
- 區(qū)域云計算和大數(shù)據(jù)產(chǎn)業(yè)發(fā)展:浙江樣板
- R Machine Learning Essentials
- 企業(yè)級大數(shù)據(jù)項目實戰(zhàn):用戶搜索行為分析系統(tǒng)從0到1
- ECharts數(shù)據(jù)可視化:入門、實戰(zhàn)與進階
- 碼上行動:利用Python與ChatGPT高效搞定Excel數(shù)據(jù)分析
- AI Crash Course