Hive跟hbase在功能上也有小部分重疊的地方,它們的主要區(qū)別是:Hbase本質(zhì)是一個數(shù)據(jù)庫,提供在存儲層的低延時數(shù)據(jù)讀寫能力,可用在實時場景,但沒有提供類SQL語言的查詢方式,所以數(shù)據(jù)查詢和計算不太方便(PIG學(xué)習(xí)成本較高);hive本質(zhì)是將SQL語句映射成MapReduce作業(yè),延時較高但使用方便,適合離線場景,自身不做存儲。此外,hive可以搭建在Hbase之上,訪問Hbase的數(shù)據(jù)。
Hive的出現(xiàn)橋接了Hadoop與數(shù)據(jù)倉庫領(lǐng)域,但隨著hive的逐步應(yīng)用,人們發(fā)現(xiàn)hive的效率并不是太高,原因是hive的查詢是使用MapReduce作業(yè)的方式實現(xiàn)的,是在計算層而不是存儲層,因此受到了MapReduce框架單一的數(shù)據(jù)傳輸和交互方式的局限、以及作業(yè)調(diào)度開銷的影響。為了讓基于Hadoop的數(shù)據(jù)倉庫操作效率更高,在hive之后出現(xiàn)了另一個不同的實現(xiàn)方案——impala,它的基于Hadoop的數(shù)據(jù)查詢操作,并不是使用MapReduce作業(yè)的方式實現(xiàn),而是跳過了Hadoop的計算層,直接讀寫hadoop的存儲層——hdfs來實現(xiàn)。由于省去了計算層,因此也就省去了計算層所有的開銷,避免了計算層的單一數(shù)據(jù)交互方式的問題,以及多輪計算之間的磁盤IO問題。直接讀寫hdfs,可以實現(xiàn)更加靈活的數(shù)據(jù)交互方式,提高讀寫效率。它實現(xiàn)了嵌套型數(shù)據(jù)的列存儲,同時采用了多層查詢樹,使得它可以在數(shù)千節(jié)點中快速地并行執(zhí)行查詢與結(jié)果聚合。據(jù)一些公開的資料顯示,impala在各個場景下的效率可以比hive提升3~68倍,尤其在某些特殊場景下的效率提升甚至可達90倍。
Hadoop極大降低了海量數(shù)據(jù)計算能力的門檻,使得各個業(yè)務(wù)都可以快速使用Hadoop進行大數(shù)據(jù)分析,隨著分析計算的不斷深入,差異化的需求慢慢浮現(xiàn)了。人們開始發(fā)現(xiàn),某些計算,如果時效性更快,收益會變得更大,能提供給用戶更好的體驗。一開始,在Hadoop平臺上為了提高時效性,往往會將一整批計算的海量數(shù)據(jù),切割成小時級數(shù)據(jù),甚至亞小時級數(shù)據(jù),從而變成相對輕量的計算任務(wù),使得在Hadoop上可以較快地計算出當(dāng)前片段的結(jié)果,再把當(dāng)前片段結(jié)果跟之前的累積結(jié)果進行合并,就可以較快地得出當(dāng)前所需的整體結(jié)果,實現(xiàn)較高的時效性。但隨著互聯(lián)網(wǎng)行業(yè)競爭越來越激烈,對時效性越來越看重,尤其是實時分析統(tǒng)計的需求大量涌現(xiàn),分鐘級甚至秒級輸出結(jié)果,是大家所期望的。hadoop計算的時效性所能達到的極限一般為10分鐘左右,受限于集群負載和調(diào)度策略,要想持續(xù)穩(wěn)定地低于10分鐘是非常困難的,除非是專用集群。因此,為了實現(xiàn)更高的時效性,在分鐘級、秒級、甚至毫秒級內(nèi)計算出結(jié)果,Storm應(yīng)運而生,它完全擺脫了MapReduce架構(gòu),重新設(shè)計了一個適用于流式計算的架構(gòu),以數(shù)據(jù)流為驅(qū)動,觸發(fā)計算,因此每來一條數(shù)據(jù),就可以產(chǎn)生一次計算結(jié)果,時效性非常高,一般可以達到秒級。而且它的有向無環(huán)圖計算拓撲的設(shè)計,提供了非常靈活豐富的計算方式,覆蓋了常見的實時計算需求,因此在業(yè)界得到了大量的部署應(yīng)用。
Storm的核心框架保證數(shù)據(jù)流可靠性方式是:每條數(shù)據(jù)會被至少發(fā)送一次,即正常情況會發(fā)送一次,異常情況會重發(fā)。這樣會導(dǎo)致中間處理邏輯有可能會收到兩條重復(fù)的數(shù)據(jù)。大多數(shù)業(yè)務(wù)中這樣不會帶來額外的問題,或者是能夠容忍這樣的誤差,但對于有嚴(yán)格事務(wù)性要求的業(yè)務(wù),則會出現(xiàn)問題,例如扣錢重復(fù)扣了兩次這是用戶不可接受的。為了解決此問題,Storm引入了事務(wù)拓撲,實現(xiàn)了精確處理一次的語義,后來被新的Trident機制所取代。Trident同時還提供了實時數(shù)據(jù)的join、groupby、filter等聚合查詢操作。
跟storm類似的系統(tǒng)還有yahoo的S4,不過storm的用戶遠遠多于S4,因此storm的發(fā)展比較迅速,功能也更加完善。
隨著大數(shù)據(jù)平臺的逐步普及,人們不再滿足于如數(shù)據(jù)統(tǒng)計、數(shù)據(jù)關(guān)聯(lián)等簡單的挖掘,漸漸開始嘗試將機器學(xué)習(xí)/模式識別的算法用于海量數(shù)據(jù)的深度挖掘中。因為機器學(xué)習(xí)/模式識別的算法往往比較復(fù)雜,屬于計算密集型的算法,且是單機算法,所以在沒有Hadoop之前,將這些算法用于海量數(shù)據(jù)上幾乎是不可行,至少是工業(yè)應(yīng)用上不可行:一是單機計算不了如此大量的數(shù)據(jù);二是就算單機能夠支撐,但計算時間太長,通常一次計算耗時從幾個星期到幾個月不等,這對于工業(yè)界來說資源和時間的消耗不可接受;三是沒有一個很易用的并行計算平臺,可以將單機算法快速改成并行算法,導(dǎo)致算法的并行化成本很高。而有了Hadoop之后,這些問題迎刃而解,一大批機器學(xué)習(xí)/模式識別的算法得以快速用MapReduce框架并行化,被廣泛用在搜索、廣告、自然語言處理、個性化推薦、安全等業(yè)務(wù)中。