批處理模式
Hadoop的處理功能來自MapReduce引擎。MapReduce的處理技術(shù)符合使用鍵值對(duì)的map、shuffle、reduce算法要求。基本處理過程包括:
從HDFS文件系統(tǒng)讀取數(shù)據(jù)集
將數(shù)據(jù)集拆分成小塊并分配給所有可用節(jié)點(diǎn)
針對(duì)每個(gè)節(jié)點(diǎn)上的數(shù)據(jù)子集進(jìn)行計(jì)算(計(jì)算的中間態(tài)結(jié)果會(huì)重新寫入HDFS)
重新分配中間態(tài)結(jié)果并按照鍵進(jìn)行分組
通過對(duì)每個(gè)節(jié)點(diǎn)計(jì)算的結(jié)果進(jìn)行匯總和組合對(duì)每個(gè)鍵的值進(jìn)行“Reducing”
將計(jì)算而來的最終結(jié)果重新寫入 HDFS
優(yōu)勢和局限
由于這種方法嚴(yán)重依賴持久存儲(chǔ),每個(gè)任務(wù)需要多次執(zhí)行讀取和寫入操作,因此速度相對(duì)較慢。但另一方面由于磁盤空間通常是服務(wù)器上最豐富的資源,這意味著MapReduce可以處理非常海量的數(shù)據(jù)集。同時(shí)也意味著相比其他類似技術(shù),Hadoop的MapReduce通常可以在廉價(jià)硬件上運(yùn)行,因?yàn)樵摷夹g(shù)并不需要將一切都存儲(chǔ)在內(nèi)存中。MapReduce具備極高的縮放潛力,生產(chǎn)環(huán)境中曾經(jīng)出現(xiàn)過包含數(shù)萬個(gè)節(jié)點(diǎn)的應(yīng)用。
MapReduce的學(xué)習(xí)曲線較為陡峭,雖然Hadoop生態(tài)系統(tǒng)的其他周邊技術(shù)可以大幅降低這一問題的影響,但通過Hadoop集群快速實(shí)現(xiàn)某些應(yīng)用時(shí)依然需要注意這個(gè)問題。
圍繞Hadoop已經(jīng)形成了遼闊的生態(tài)系統(tǒng),Hadoop集群本身也經(jīng)常被用作其他軟件的組成部件。很多其他處理框架和引擎通過與Hadoop集成也可以使用HDFS和YARN資源管理器。
總結(jié)
Apache Hadoop及其MapReduce處理引擎提供了一套久經(jīng)考驗(yàn)的批處理模型,最適合處理對(duì)時(shí)間要求不高的非常大規(guī)模數(shù)據(jù)集。通過非常低成本的組件即可搭建完整功能的Hadoop集群,使得這一廉價(jià)且高效的處理技術(shù)可以靈活應(yīng)用在很多案例中。與其他框架和引擎的兼容與集成能力使得Hadoop可以成為使用不同技術(shù)的多種工作負(fù)載處理平臺(tái)的底層基礎(chǔ)。
流處理系統(tǒng)
流處理系統(tǒng)會(huì)對(duì)隨時(shí)進(jìn)入系統(tǒng)的數(shù)據(jù)進(jìn)行計(jì)算。相比批處理模式,這是一種截然不同的處理方式。流處理方式無需針對(duì)整個(gè)數(shù)據(jù)集執(zhí)行操作,而是對(duì)通過系統(tǒng)傳輸?shù)拿總€(gè)數(shù)據(jù)項(xiàng)執(zhí)行操作。
流處理中的數(shù)據(jù)集是“無邊界”的,這就產(chǎn)生了幾個(gè)重要的影響:
完整數(shù)據(jù)集只能代表截至目前已經(jīng)進(jìn)入到系統(tǒng)中的數(shù)據(jù)總量。
工作數(shù)據(jù)集也許更相關(guān),在特定時(shí)間只能代表某個(gè)單一數(shù)據(jù)項(xiàng)。
處理工作是基于事件的,除非明確停止否則沒有“盡頭”。處理結(jié)果立刻可用,并會(huì)隨著新數(shù)據(jù)的抵達(dá)繼續(xù)更新。
流處理系統(tǒng)可以處理幾乎無限量的數(shù)據(jù),但同一時(shí)間只能處理一條(真正的流處理)或很少量(微批處理,Micro-batch Processing)數(shù)據(jù),不同記錄間只維持最少量的狀態(tài)。雖然大部分系統(tǒng)提供了用于維持某些狀態(tài)的方法,但流處理主要針對(duì)副作用更少,更加功能性的處理(Functional processing)進(jìn)行優(yōu)化。
功能性操作主要側(cè)重于狀態(tài)或副作用有限的離散步驟。針對(duì)同一個(gè)數(shù)據(jù)執(zhí)行同一個(gè)操作會(huì)或略其他因素產(chǎn)生相同的結(jié)果,此類處理非常適合流處理,因?yàn)椴煌?xiàng)的狀態(tài)通常是某些困難、限制,以及某些情況下不需要的結(jié)果的結(jié)合體。因此雖然某些類型的狀態(tài)管理通常是可行的,但這些框架通常在不具備狀態(tài)管理機(jī)制時(shí)更簡單也更高效。
此類處理非常適合某些類型的工作負(fù)載。有近實(shí)時(shí)處理需求的任務(wù)很適合使用流處理模式。分析、服務(wù)器或應(yīng)用程序錯(cuò)誤日志,以及其他基于時(shí)間的衡量指標(biāo)是最適合的類型,因?yàn)閷?duì)這些領(lǐng)域的數(shù)據(jù)變化做出響應(yīng)對(duì)于業(yè)務(wù)職能來說是極為關(guān)鍵的。流處理很適合用來處理必須對(duì)變動(dòng)或峰值做出響應(yīng),并且關(guān)注一段時(shí)間內(nèi)變化趨勢的數(shù)據(jù)。
Apache Storm
Apache Storm是一種側(cè)重于極低延遲的流處理框架,也許是要求近實(shí)時(shí)處理的工作負(fù)載的最佳選擇。該技術(shù)可處理非常大量的數(shù)據(jù),通過比其他解決方案更低的延遲提供結(jié)果。
流處理模式
Storm的流處理可對(duì)框架中名為Topology(拓?fù)洌┑腄AG(Directed Acyclic Graph,有向無環(huán)圖)進(jìn)行編排。這些拓?fù)涿枋隽水?dāng)數(shù)據(jù)片段進(jìn)入系統(tǒng)后,需要對(duì)每個(gè)傳入的片段執(zhí)行的不同轉(zhuǎn)換或步驟。
拓?fù)浒?/strong>
Stream:普通的數(shù)據(jù)流,這是一種會(huì)持續(xù)抵達(dá)系統(tǒng)的無邊界數(shù)據(jù)。
Spout:位于拓?fù)溥吘壍臄?shù)據(jù)流來源,例如可以是API或查詢等,從這里可以產(chǎn)生待處理的數(shù)據(jù)。
Bolt:Bolt代表需要消耗流數(shù)據(jù),對(duì)其應(yīng)用操作,并將結(jié)果以流的形式進(jìn)行輸出的處理步驟。Bolt需要與每個(gè)Spout建立連接,隨后相互連接以組成所有必要的處理。在拓?fù)涞奈膊浚梢允褂米罱K的Bolt輸出作為相互連接的其他系統(tǒng)的輸入。