對(duì)于大數(shù)據(jù)來(lái)說(shuō),hadoopspark無(wú)疑是兩大組成架構(gòu)。中培偉業(yè)“大數(shù)據(jù)”專家鐘老師指出,hadoopspark作為大數(shù)據(jù)的兩大架構(gòu)系統(tǒng),二者有著競(jìng)爭(zhēng)與承前啟后的關(guān)系。對(duì)于二者之間的區(qū)別以及后期的發(fā)展趨勢(shì),鐘老師給出了自己的看法。
首先,spark對(duì)于海量數(shù)據(jù)計(jì)算,尤其是迭代運(yùn)算,圖計(jì)算運(yùn)算速度相比與hadoop有著量級(jí)上的增長(zhǎng)。spark計(jì)算的時(shí)候?qū)⒃紨?shù)據(jù)及中間結(jié)果都存儲(chǔ)在內(nèi)存中,而hadoop每輪迭代都要講原始數(shù)據(jù)讀入,中間結(jié)果寫出到硬盤上。這樣一來(lái)由于spark省去了IO的時(shí)間,所以相比于hadoop,其運(yùn)算速率有這量級(jí)上的增長(zhǎng)。
其次,spark的容錯(cuò)性很好,spark將海量數(shù)據(jù)抽象成RDD這種數(shù)據(jù)結(jié)構(gòu),并且其存在兩種算子,一種叫transformation,主要是用于對(duì)RDD進(jìn)行數(shù)據(jù)轉(zhuǎn)換,一種叫action,是要將轉(zhuǎn)換好的RDD再轉(zhuǎn)換成原始數(shù)據(jù)。
spark運(yùn)算是一種懶惰運(yùn)算,其程序執(zhí)行邏輯是,對(duì)于一系列transformation算子,在遇到action算子之前,這些transformation是不會(huì)執(zhí)行的,而會(huì)生成一個(gè)運(yùn)算邏輯圖,當(dāng)遇到一個(gè)action算子的時(shí)候,才根據(jù)前面的運(yùn)算邏輯圖執(zhí)行程序。這樣如果有臺(tái)機(jī)器宕機(jī)了之后,只需要根據(jù)邏輯圖將宕機(jī)中的RDD進(jìn)行重新計(jì)算就可以了(窄依賴的情況下,寬依賴的情況下計(jì)算代價(jià)要更高。)
同時(shí),sparkHDFSYarn/Mesos以及pregel有著很好的兼容性。但是畢竟spark起步晚,在性能、穩(wěn)定性方面還有待提高;同時(shí)spark不能很好的處理細(xì)粒度、異步的數(shù)據(jù)。
Hadoop,性質(zhì)和Spark并不一樣,它不僅僅是一個(gè)框架,而致力于發(fā)展成一個(gè)分布式計(jì)算的平臺(tái)。所以,現(xiàn)在的Spark是可以運(yùn)行在YARNYet another Resource Negotiator)上的,而其他的一些框架也可以運(yùn)行在這個(gè)平臺(tái)上,達(dá)到資源共享的目的。
spark相對(duì)hadoop編程模型簡(jiǎn)單,能進(jìn)行迭代操作,利用內(nèi)存(甚至是堆外內(nèi)存)緩存數(shù)據(jù),能進(jìn)行流水線優(yōu)化,上層封裝了sqlstreamingmlibgraphx等或成熟或不成熟的框架,明顯有取hadoop而代之的傾向。
1. 相同的算法,SparkHadoop快數(shù)倍,如果是一些迭代或者要對(duì)數(shù)據(jù)反復(fù)讀取的算法,SparkHadoop快數(shù)十倍至上百倍
2. Spark對(duì)于數(shù)據(jù)的操作種類更多,對(duì)于一些比較特殊的計(jì)算需求,比如求兩個(gè)集合的交集并集,Spark都有函數(shù)直接計(jì)算,而Hadoop實(shí)現(xiàn)這樣的計(jì)算無(wú)比繁瑣
3. Spark的開(kāi)發(fā)效率比Hadoop高很多
最后,鐘老師對(duì)二者的發(fā)展趨勢(shì)進(jìn)行了展望,他認(rèn)為雖然Spark目前還不夠成熟,但其無(wú)疑代表著未來(lái)。