spark原理介绍
1、spark是一個(gè)基于內(nèi)存計(jì)算的開源的集群計(jì)算系統(tǒng),目的是讓數(shù)據(jù)分析更加快速。因此運(yùn)行spark的機(jī)器應(yīng)該盡量的大內(nèi)存,如96G以上。
2、spark所有操作均基于RDD,操作主要分成2大類:transformation與action。
3、spark提供了交互處理接口,類似于shell的使用。
4、spark可以優(yōu)化迭代工作負(fù)載,因?yàn)橹虚g數(shù)據(jù)均保存于內(nèi)存中。
5、spark 是在 Scala 語言中實(shí)現(xiàn)的,它可以使用scala、python進(jìn)行交互式操作,還可以使用scala、python、java進(jìn)行編程。
6、spark可以通過mesos運(yùn)行在hdfs上,但hadoop2.x提供了YARN,這更方便于spark運(yùn)行在hdfs,YARN還提供了內(nèi)存、CPU的集群管理功能。
7、Spark提供的數(shù)據(jù)集操作類型有很多種,不像Hadoop只提供了Map和Reduce兩種操作。比如 map,filter, flatMap,sample, groupByKey, reduceByKey, union,join, cogroup,mapValues, sort,partionBy等多種操作類型,他們把這些操作稱為Transformations。同時(shí)還提供Count,collect, reduce, lookup, save等多種actions。這些多種多樣的數(shù)據(jù)集操作類型,給上層應(yīng)用者提供了方便。各個(gè)處理節(jié)點(diǎn)之間的通信模型不再像Hadoop那樣就是唯一的 Data Shuffle一種模式。用戶可以命名,物化,控制中間結(jié)果的分區(qū)等。可以說編程模型比Hadoop更靈活.
==========================================================
?以下內(nèi)容摘自:http://www.itpub.net/thread-1864721-3-1.html
1、?? Spark VSHadoop有哪些異同點(diǎn)?
?????? Hadoop:分布式批處理計(jì)算,強(qiáng)調(diào)批處理,常用于數(shù)據(jù)挖掘、分析
?????? Spark:是一個(gè)基于內(nèi)存計(jì)算的開源的集群計(jì)算系統(tǒng),目的是讓數(shù)據(jù)分析更加快速, Spark 是一種與 Hadoop 相似的開源集群計(jì)算環(huán)境,但是兩者之間還存在一些不同之處,這些有用的不同之處使 Spark 在某些工作負(fù)載方面表現(xiàn)得更加優(yōu)越,換句話說,Spark 啟用了內(nèi)存分布數(shù)據(jù)集,除了能夠提供交互式查詢外,它還可以優(yōu)化迭代工作負(fù)載。
Spark 是在 Scala 語言中實(shí)現(xiàn)的,它將 Scala 用作其應(yīng)用程序框架。與 Hadoop 不同,Spark 和 Scala 能夠緊密集成,其中的 Scala 可以像操作本地集合對(duì)象一樣輕松地操作分布式數(shù)據(jù)集。
盡 管創(chuàng)建 Spark 是為了支持分布式數(shù)據(jù)集上的迭代作業(yè),但是實(shí)際上它是對(duì) Hadoop 的補(bǔ)充,可以在 Hadoop 文件系統(tǒng)中并行運(yùn)行。通過名為Mesos的第三方集群框架可以支持此行為。Spark 由加州大學(xué)伯克利分校 AMP 實(shí)驗(yàn)室 (Algorithms,Machines,and People Lab) 開發(fā),可用來構(gòu)建大型的、低延遲的數(shù)據(jù)分析應(yīng)用程序。
雖然 Spark 與 Hadoop 有相似之處,但它提供了具有有用差異的一個(gè)新的集群計(jì)算框架。首先,Spark 是為集群計(jì)算中的特定類型的工作負(fù)載而設(shè)計(jì),即那些在并行操作之間重用工作數(shù)據(jù)集(比如機(jī)器學(xué)習(xí)算法)的工作負(fù)載。為了優(yōu)化這些類型的工作負(fù) 載,Spark 引進(jìn)了內(nèi)存集群計(jì)算的概念,可在內(nèi)存集群計(jì)算中將數(shù)據(jù)集緩存在內(nèi)存中,以縮短訪問延遲.
在大數(shù)據(jù)處理方面相信大家對(duì)hadoop已經(jīng)耳熟能詳,基于GoogleMap/Reduce來實(shí)現(xiàn)的Hadoop為開發(fā)者提供了map、reduce原 語,使并行批處理程序變得非常地簡(jiǎn)單和優(yōu)美。Spark提供的數(shù)據(jù)集操作類型有很多種,不像Hadoop只提供了Map和Reduce兩種操作。比如 map,filter, flatMap,sample, groupByKey, reduceByKey, union,join, cogroup,mapValues, sort,partionBy等多種操作類型,他們把這些操作稱為Transformations。同時(shí)還提供Count,collect, reduce, lookup, save等多種actions。這些多種多樣的數(shù)據(jù)集操作類型,給上層應(yīng)用者提供了方便。各個(gè)處理節(jié)點(diǎn)之間的通信模型不再像Hadoop那樣就是唯一的 Data Shuffle一種模式。用戶可以命名,物化,控制中間結(jié)果的分區(qū)等。可以說編程模型比Hadoop更靈活.
??? 2、Spark在容錯(cuò)性方面是否比其他工具更有優(yōu)越性?
?????? 從Spark的論文《Resilient Distributed Datasets: AFault-TolerantAbstraction for In-Memory Cluster Computing》中沒看出容錯(cuò)性做的有多好。倒是提到了分布式數(shù)據(jù)集計(jì)算,做checkpoint的兩種方式,一個(gè)是checkpoint data,一個(gè)是loggingthe updates。貌似Spark采用了后者。但是文中后來又提到,雖然后者看似節(jié)省存儲(chǔ)空間。但是由于數(shù)據(jù)處理模型是類似DAG的操作過程,由于圖中的某 個(gè)節(jié)點(diǎn)出錯(cuò),由于lineage chains的依賴復(fù)雜性,可能會(huì)引起全部計(jì)算節(jié)點(diǎn)的重新計(jì)算,這樣成本也不低。他們后來說,是存數(shù)據(jù),還是存更新日志,做checkpoint還是由用 戶說了算吧。相當(dāng)于什么都沒說,又把這個(gè)皮球踢給了用戶。所以我看就是由用戶根據(jù)業(yè)務(wù)類型,衡量是存儲(chǔ)數(shù)據(jù)IO和磁盤空間的代價(jià)和重新計(jì)算的代價(jià),選擇代 價(jià)較小的一種策略。取代給中間結(jié)果進(jìn)行持久化或建立檢查點(diǎn),Spark會(huì)記住產(chǎn)生某些數(shù)據(jù)集的操作序列。因此,當(dāng)一個(gè)節(jié)點(diǎn)出現(xiàn)故障時(shí),Spark會(huì)根據(jù)存 儲(chǔ)信息重新構(gòu)造數(shù)據(jù)集。他們認(rèn)為這樣也不錯(cuò),因?yàn)槠渌?jié)點(diǎn)將會(huì)幫助重建。
?? 3、Spark對(duì)于數(shù)據(jù)處理能力和效率有哪些特色?
??? Spark提供了高的性能和大數(shù)據(jù)處理能力,使得用戶可以快速得到反饋體驗(yàn)更好。另一類應(yīng)用是做數(shù)據(jù)挖掘,因?yàn)镾park充分利用內(nèi)存進(jìn)行緩存,利用 DAG消除不必要的步驟,所以比較合適做迭代式的運(yùn)算。而有相當(dāng)一部分機(jī)器學(xué)習(xí)算法是通過多次迭代收斂的算法,所以適合用Spark來實(shí)現(xiàn)。我們把一些常 用的算法并行化用Spark實(shí)現(xiàn),可以從R語言中方便地調(diào)用,降低了用戶進(jìn)行數(shù)據(jù)挖掘的學(xué)習(xí)成本。
Spark配 有一個(gè)流數(shù)據(jù)處理模型,與Twitter的 Storm框架相比,Spark采用了一種有趣而且獨(dú)特的辦法。Storm基本上是像是放入獨(dú)立事務(wù)的管道,在其中事務(wù)會(huì)得到分布式的處理。相 反,Spark采用一個(gè)模型收集事務(wù),然后在短時(shí)間內(nèi)(我們假設(shè)是5秒)以批處理的方式處理事件。所收集的數(shù)據(jù)成為他們自己的RDD,然后使用Spark 應(yīng)用程序中常用的一組進(jìn)行處理。作者聲稱這種模式是在緩慢節(jié)點(diǎn)和故障情況下會(huì)更加穩(wěn)健,而且5秒的時(shí)間間隔通常對(duì)于大多數(shù)應(yīng)用已經(jīng)足夠快了。這種方法也很 好地統(tǒng)一了流式處理與非流式處理部分。
隨著大數(shù)據(jù)相關(guān)技術(shù)和產(chǎn)業(yè)的逐漸成熟,單個(gè)組織內(nèi)往往需要同時(shí)進(jìn)行多種類型的大數(shù)據(jù)分析作業(yè):傳統(tǒng)Hadoop MapReduce最為擅長(zhǎng)的批量計(jì)算、各種機(jī)器學(xué)習(xí)算法為代表的迭代型計(jì)算、流式計(jì)算、社交網(wǎng)絡(luò)中常用的圖計(jì)算、SQL關(guān)系查詢、交互式即席查詢等。在 Spark出現(xiàn)前,要在一個(gè)組織內(nèi)同時(shí)完成以上數(shù)種大數(shù)據(jù)分析任務(wù),就不得不與多套獨(dú)立的系統(tǒng)打交道,一方面引入了不容小覷的運(yùn)維復(fù)雜性,另一方面還免不 了要在多個(gè)系統(tǒng)間頻繁進(jìn)行代價(jià)高昂的數(shù)據(jù)轉(zhuǎn)儲(chǔ)。
Spark是發(fā)源于美國(guó)加州大學(xué)伯克利分校AMPLab的集群計(jì)算平臺(tái),它立足于內(nèi)存計(jì)算,性能超過Hadoop百倍,從多迭代批量處理出發(fā),兼收并蓄數(shù) 據(jù)倉(cāng)庫(kù)、流處理和圖計(jì)算等多種計(jì)算范式,是罕見的全能選手。Spark當(dāng)下已成為Apache基金會(huì)的頂級(jí)開源項(xiàng)目,擁有著龐大的社區(qū)支持(活躍開發(fā)者人 數(shù)已超過Hadoop MapReduce),技術(shù)也逐漸走向成熟。
1、spark由于啟用了內(nèi)存分布數(shù)據(jù)集,充分利用了分布式內(nèi)存技術(shù)使其運(yùn)算效率在hadoop至少;使用Scala語言編寫;另外隨著hadoop 2.0的發(fā)布,Spark亦可直接運(yùn)行在YARN上。
2、容錯(cuò)特性:Spark 引進(jìn)彈性分布式數(shù)據(jù)集(RDD) 。RDD 是分布在一組節(jié)點(diǎn)中的只讀對(duì)象集合。集合是彈性的,如果數(shù)據(jù)集一部分丟失,則可以對(duì)它們進(jìn)行重建。重建部分?jǐn)?shù)據(jù)集的過程依賴于容錯(cuò)機(jī)制,該機(jī)制可以維護(hù) "血統(tǒng)"(即允許基于數(shù)據(jù)衍生過程重建部分?jǐn)?shù)據(jù)集的信息)。
3、很明顯采用內(nèi)存計(jì)算的效率遠(yuǎn)高于具有大量磁盤IO操作的Hadoop
4、迷你書,能在最短的時(shí)間內(nèi)掌握盡可能多的內(nèi)容,看起來不至于太累。
我們公司現(xiàn)在數(shù)據(jù)的處理主要是在hadoop上?? 但是也搭建了10臺(tái)的spark的集群? ?
hadoop 可以使用比較廉價(jià)的PC機(jī)器??? 但是spark盡量還是使用內(nèi)存配置比較高的?? 我們這用的是64G內(nèi)存的
網(wǎng)上資料說盡量使用96G內(nèi)存以上的?? 但是我們這沒那么好的機(jī)器做測(cè)試
相比較于hadoop?? 我們使用的spark覺得有幾下幾個(gè)優(yōu)點(diǎn)
第一 spark基于內(nèi)存計(jì)算,速度很明顯 。? 10臺(tái)的SPARK的集群的速度可以和我們這hadoop集群的50臺(tái)的差不多? 但是 hadoop 的集群內(nèi)存大小不一? 有8G的? 有16G的 ?
第二? spark是基于Scala? 相比較hadoop基于java??? spark更適合數(shù)據(jù)挖掘?????? 因?yàn)閟cala就是技術(shù)機(jī)器挖掘的
第三? hadoop 編程模式處理數(shù)據(jù)很死? 只有map 和reduce?? 而spark編程模式更靈活
第四? 據(jù)說 spark的算法比hadoop算法更厲害?? 這個(gè)我們這也不知道怎么看??? 只知道處理數(shù)據(jù)速度確實(shí)快了很多
??? 1、Spark VS Hadoop有哪些異同點(diǎn)?
??? Spark是基于map reduce算法實(shí)現(xiàn)的分布式計(jì)算,擁有Hadoop MapReduce所具有的優(yōu)點(diǎn);但不同于MapReduce的是Job中間輸出和結(jié)果可以保存在內(nèi)存中,從而不再需要讀寫HDFS,因此Spark能更 好地適用于數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)等需要迭代的map reduce的算法。? ?
??? 2、Spark在容錯(cuò)性方面是否比其他工具更有優(yōu)越性?
??? 現(xiàn)有的數(shù)據(jù)流系統(tǒng)對(duì)兩種應(yīng)用的處理并不高效:一是迭代式算法,這在圖應(yīng)用和機(jī)器學(xué)習(xí)領(lǐng)域很常見;二是交互式數(shù)據(jù)挖掘工具。這兩種情況下,將數(shù)據(jù)保存在內(nèi)存 中能夠極大地提高性能。為了有效地實(shí)現(xiàn)容錯(cuò),RDD提供了一種高度受限的共享內(nèi)存,即RDD是只讀的,并且只能通過其他RDD上的批量操作來創(chuàng)建。盡管如 此,RDD仍然足以表示很多類型的計(jì)算,包括MapReduce和專用的迭代編程模型(如Pregel)等。Spark實(shí)現(xiàn)的RDD在迭代計(jì)算方面比 Hadoop快二十多倍,同時(shí)還可以在5-7秒的延時(shí)內(nèi)交互式地查詢1TB的數(shù)據(jù)集。
??? 3、Spark對(duì)于數(shù)據(jù)處理能力和效率有哪些特色?
??? 與Hadoop進(jìn)行對(duì)比,結(jié)果如下:
?? (1)對(duì)于迭代式機(jī)器學(xué)習(xí)應(yīng)用,Spark比Hadoop快20多倍。這種加速比是因?yàn)?#xff1a;數(shù)據(jù)存儲(chǔ)在內(nèi)存中,同時(shí)Java對(duì)象緩存避免了反序列化操作(deserialization)。
?? (2)用戶編寫的應(yīng)用程序執(zhí)行結(jié)果很好。例如,Spark分析報(bào)表比Hadoop快40多倍。
?? (3)如果節(jié)點(diǎn)發(fā)生失效,通過重建那些丟失的RDD分區(qū),Spark能夠?qū)崿F(xiàn)快速恢復(fù)。
?? (4)Spark能夠在5-7s延時(shí)范圍內(nèi),交互式地查詢1TB大小的數(shù)據(jù)集。
?1、Spark VS Hadoop有哪些異同點(diǎn)?
作為通用的并行處理框架,Spark具有類似Hadoop的一些優(yōu)點(diǎn),而且Spark采用了更好的內(nèi)存管理,
在迭代計(jì)算上具有比Hadoop更高的效率,Spark還提供了更為廣泛的數(shù)據(jù)集操作類型,大大方便了
用戶的開發(fā),checkpoint的應(yīng)用使Spark具有很強(qiáng)容錯(cuò)能力,眾多優(yōu)越的性能和比Hadoop更廣泛
的適用面讓Spark的進(jìn)一步發(fā)展值得期待。
? ?
2、Spark在容錯(cuò)性方面是否比其他工具更有優(yōu)越性?
在分布式數(shù)據(jù)集計(jì)算時(shí)通過checkpoint來實(shí)現(xiàn)容錯(cuò),而checkpoint
有兩種方式,一個(gè)是checkpoint data,一個(gè)是logging the updates。
用戶可以控制采用哪種方式來實(shí)現(xiàn)容錯(cuò)。
3、Spark對(duì)于數(shù)據(jù)處理能力和效率有哪些特色?
由于Spark處理數(shù)據(jù)利用內(nèi)存,因此它的速度是非??斓?#xff0c;
Spark Streaming:大大提高Spark流處理的能力和穩(wěn)定性,
使用戶可以用同一套代碼進(jìn)行大數(shù)據(jù)流處理和批量處理。
總結(jié)
- 上一篇: spark1.3.1使用基础教程
- 下一篇: hadoop的关键进程