深度解析:Spark優(yōu)于Hadoop嗎?
對(duì)于任何一個(gè)進(jìn)入大數(shù)據(jù)世界的人來(lái)講,大數(shù)據(jù)和Hadoop 就成了同義詞。隨著人們學(xué)習(xí)了大數(shù)據(jù)生態(tài)系統(tǒng)及其工具和運(yùn)作原理,他們更能理解大數(shù)據(jù)的實(shí)際意義以及Hadoop 在生態(tài)系統(tǒng)中所扮演的角色。
維基百科對(duì)大數(shù)據(jù)這樣解釋:大數(shù)據(jù)是一個(gè)寬泛的術(shù)語(yǔ),它指?jìng)鹘y(tǒng)數(shù)據(jù)處理應(yīng)用程序無(wú)法處理的巨大而復(fù)雜的數(shù)據(jù)集。
簡(jiǎn)單來(lái)講,隨著數(shù)據(jù)量的增加,采用常規(guī)處理方法需要花費(fèi)大量時(shí)間且價(jià)格不菲。
Doug Cutting受谷歌GFS及MapReduce白皮書(shū)的啟發(fā),在 2005年創(chuàng)辦了Hadoop 。Hadoop 采用開(kāi)源軟件框架對(duì)超大數(shù)據(jù)集進(jìn)行分布式存儲(chǔ)技術(shù)及分布式處理。換句話說(shuō),設(shè)計(jì)這一產(chǎn)品的目的在于縮減處理大數(shù)據(jù)集的時(shí)間和成本。
Hadoop,其分布式文件系統(tǒng)(HDFS)和分布式處理模塊(MapReduce)成為大數(shù)據(jù)計(jì)算的實(shí)際標(biāo)準(zhǔn)。Hadoop 這一術(shù)語(yǔ)不僅可以與基礎(chǔ)模塊相關(guān),也與可兼容Hadoop的其他軟件包生態(tài)系統(tǒng)息息相關(guān)。
隨著時(shí)間的推移,生成的數(shù)據(jù)量猛增,處理大量數(shù)據(jù)的需求也隨之猛增。這最終使大數(shù)據(jù)計(jì)算需要滿足各種不同需求,而這些需求并非都可以全部由Hadoop 完成。
大多數(shù)數(shù)據(jù)分析本質(zhì)上是迭代處理。盡管迭代處理可以由MapReduce完成,但數(shù)據(jù)讀取應(yīng)該在每次迭代中進(jìn)行。通常情況下,這并沒(méi)有問(wèn)題。但如果讀取100GB的數(shù)據(jù)或幾個(gè)TB的數(shù)據(jù)時(shí),就會(huì)費(fèi)時(shí),而人們會(huì)不耐煩
許多人認(rèn)為數(shù)據(jù)分析是一門(mén)藝術(shù)而非一門(mén)科學(xué)。在任何藝術(shù)領(lǐng)域,藝術(shù)家創(chuàng)造一小塊部分拼圖,又將小拼圖將放到更大的拼圖上,見(jiàn)證它的生長(zhǎng)??梢源致缘姆g為:數(shù)據(jù)分析師想在下一個(gè)處理開(kāi)始之前得到前一個(gè)處理的結(jié)果。換句話說(shuō),許多數(shù)據(jù)分析學(xué)在本質(zhì)上都是交互式的。在傳統(tǒng)意義上,交互式分析習(xí)慣上受結(jié)構(gòu)化查詢語(yǔ)言(SQL)的影響。分析師在數(shù)據(jù)庫(kù)中撰寫(xiě)可在數(shù)據(jù)中運(yùn)行的查詢條件。盡管Hadoop 也有同類產(chǎn)品(Hive和Pig),這原本也耗時(shí),因?yàn)槊總€(gè)查詢條件需要大量時(shí)間處理數(shù)據(jù)。
這些障礙促使了Spark的誕生,這種新型處理模塊能促進(jìn)迭代編程和交互式分析。Spark裝備了一個(gè)將數(shù)據(jù)載入存儲(chǔ)器并反復(fù)查詢的內(nèi)存原始模型。這使Spark非常適合大量數(shù)據(jù)分析及機(jī)器學(xué)習(xí)算法。
注意,Spark僅僅規(guī)定了分布式處理模塊。存儲(chǔ)數(shù)據(jù)部分仍然依賴Hadoop(分布式文件系統(tǒng)HDFS)采用分布存儲(chǔ)方式高效存儲(chǔ)數(shù)據(jù),而不由Spark完成
Spark 將大數(shù)據(jù)生態(tài)系統(tǒng)設(shè)置在超光速磁盤(pán)上,確保比MapReduce快10-100倍。許多人認(rèn)為這可能是MapReduce的終結(jié)。
操作簡(jiǎn)單
相比MapReduce來(lái)講,Spark操作簡(jiǎn)單,甚至可以說(shuō)非常便捷。即使對(duì)于一個(gè)簡(jiǎn)單邏輯或算法,MapReduce也需要100行代碼;但使用Spark,一個(gè)簡(jiǎn)單邏輯,幾行代碼就可以完成。這就引出了一個(gè)關(guān)鍵因素,叫做用途廣泛。許多對(duì)于MapReduce來(lái)講不可能完成的機(jī)器學(xué)習(xí)或圖表問(wèn)題的高級(jí)算法,都可以由Spark完成。這讓Spark的采用率相當(dāng)高。
MapReduce沒(méi)有交互模塊。盡管Hive和Pig包含命令行接口,這些系統(tǒng)的性能仍然依賴MapReduce。MapReduce對(duì)于批處理仍然十分受用。
Spark 在內(nèi)存中處理數(shù)據(jù),而MapReduce卻將處理后的數(shù)據(jù)傳送回磁盤(pán)。所以Spark將優(yōu)于MapReduce。
在2014年,Spark晉級(jí)Daytona GraySort測(cè)試并拔得頭籌。對(duì)于門(mén)外漢來(lái)說(shuō),DaytonaGraySort是測(cè)試系統(tǒng)檢索100TB(一萬(wàn)億條記錄)數(shù)據(jù)速度的第三方評(píng)判基準(zhǔn)。
Spark使用206個(gè)AWS EC2 設(shè)備,在23分鐘內(nèi)將100TB的數(shù)據(jù)存儲(chǔ)到磁盤(pán)上。此前的***記錄保持者是MapReduce,它使用了2100臺(tái)設(shè)備,總共花費(fèi)了72分鐘。Spark在相同的條件下卻比MapReduce快了3倍,使用的設(shè)備總數(shù)也少了10倍。
Spark占用大量?jī)?nèi)存。如果我們運(yùn)行Spark的同時(shí)運(yùn)行其他占用內(nèi)存的服務(wù),其性能可能大打折扣。但是,我們可以有把握地說(shuō),Spark在迭代處理方面占上風(fēng)(需要多次傳遞同一數(shù)據(jù))。
成本
這兩者在計(jì)算能力、磁盤(pán)和網(wǎng)絡(luò)環(huán)境方面的硬件要求都十分相似。內(nèi)存越大,Spark表現(xiàn)越好。這兩者都使用商品服務(wù)器。
MapReduce編程費(fèi)力,市場(chǎng)上這方面的專家并不多。即便有為數(shù)不多的Spark專家,但這也僅僅是因?yàn)镾park是初創(chuàng)產(chǎn)品。所以學(xué)習(xí)Spark編程比MapReduce要容易的多。
脫離了Hadoop 的Spark
運(yùn)行Spark其實(shí)并不需要Hadoop的支持。如果我們沒(méi)有從分布式文件系統(tǒng)(HDFS)中讀取數(shù)據(jù),Spark也可以自行運(yùn)行。Spark也可以從諸如S3, Cassandra等其他存儲(chǔ)中讀寫(xiě)數(shù)據(jù)。在這種架構(gòu)下,Spark可在獨(dú)立模式下運(yùn)行,并不需要Hadoop 組件的支持。
產(chǎn)品使用
近期研究表明在產(chǎn)品中使用Spark的用戶激增。許多用戶同時(shí)運(yùn)行Spark和Cassandra, 或者Spark和Hadoop ,又或者在Apche Mesos上運(yùn)行Spark. 盡管Spark用戶數(shù)量有所增長(zhǎng),但并沒(méi)有在大數(shù)據(jù)社區(qū)造成恐慌。MapReduce使用率可能會(huì)下降,但具體降幅未知。
許多人預(yù)測(cè)Spark會(huì)促使另一種更優(yōu)質(zhì)堆棧的發(fā)展。但這種新型堆??赡軙?huì)與Hadoop 及其軟件包生態(tài)系統(tǒng)非常相似。
Spark的***優(yōu)點(diǎn)是簡(jiǎn)潔。但它并不會(huì)徹底消滅MapReduce,因?yàn)槭褂肕apReduce依然大有人在。即便Spark成為大贏家,除非研發(fā)新分布式文件系統(tǒng),我們將同時(shí)使用Hadoop 和Spark處理數(shù)據(jù)。