實(shí)時(shí)性比較
在線實(shí)時(shí)處理 > 消息機(jī)制(增量處理) > 全量批處理
Storm
首先來(lái)理解Storm體系中的一些重要概念和含義奕枝,包括元組(Tuple)、數(shù)據(jù)流(Stream)猜谚、Spout败砂、Bolt[插圖]、流量分組(Streaming Group)和拓?fù)浣Y(jié)構(gòu)(Topology)魏铅。
元組:這是Storm中使用的一種數(shù)據(jù)結(jié)構(gòu)昌犹,包含了若干個(gè)鍵–值對(duì)(Key-Value Pair)的列表,這里的鍵–值對(duì)的定義和第3章散列表中所提到的類(lèi)似览芳。元組以一種分布式的方式并行地在Storm集群上進(jìn)行創(chuàng)建和處理斜姥。
數(shù)據(jù)流:數(shù)據(jù)流是Storm中非常重要的一個(gè)抽象概念,是一個(gè)沒(méi)有邊界的元組序列沧竟,由Spout和Bolt進(jìn)行發(fā)送和轉(zhuǎn)發(fā)铸敏。對(duì)數(shù)據(jù)流的定義主要就是對(duì)其中的元組進(jìn)行定義,此外還需要為其分配唯一的標(biāo)識(shí)ID悟泵。
Spout:英文單詞Spout翻譯過(guò)來(lái)就是水龍頭的意思杈笔,顧名思義它是提供數(shù)據(jù)源的,是一個(gè)計(jì)算任務(wù)中數(shù)據(jù)的生產(chǎn)者糕非。Spout可以從數(shù)據(jù)庫(kù)或文件系統(tǒng)等加載數(shù)據(jù)蒙具,然后作為入口,向由若干節(jié)點(diǎn)組成的拓?fù)浣Y(jié)構(gòu)中發(fā)送數(shù)據(jù)流峰弹。每個(gè)Spout都可以發(fā)送多個(gè)數(shù)據(jù)流店量,同時(shí)也可以按照送達(dá)的可靠性劃分等級(jí)芜果。
Bolt:可以將其理解為運(yùn)算或函數(shù)鞠呈,用于將一個(gè)或多個(gè)數(shù)據(jù)流作為輸入,實(shí)施加工處理后右钾,再進(jìn)行新數(shù)據(jù)流的輸出蚁吝。Bolt可以接受Spout或其他Bolt發(fā)送的數(shù)據(jù),并據(jù)此建立復(fù)雜的流轉(zhuǎn)網(wǎng)絡(luò)舀射,形成最終的拓?fù)浣Y(jié)構(gòu)窘茁,完成對(duì)整條流水線數(shù)據(jù)的操作。Storm計(jì)算中的邏輯幾乎都在Bolt中完成脆烟,例如過(guò)濾山林、分類(lèi)、聚集邢羔、計(jì)算驼抹、查詢數(shù)據(jù)庫(kù)等。
從架構(gòu)的角度來(lái)理解拜鹤,Storm的集群主要包含兩種節(jié)點(diǎn):主節(jié)點(diǎn)Nimbus和工作節(jié)點(diǎn)Supervisor框冀,它們都是無(wú)狀態(tài)的,可以從失敗中快速恢復(fù)敏簿,健壯性較好明也。Nimbus負(fù)責(zé)管理宣虾、協(xié)調(diào)和監(jiān)控在集群上運(yùn)行的拓?fù)浣Y(jié)構(gòu),包括拓?fù)涞陌l(fā)布温数、任務(wù)指派绣硝、出錯(cuò)后的恢復(fù)等。從這點(diǎn)上看撑刺,其功能和Hadoop集群中的工作跟蹤節(jié)點(diǎn)(Job Tracker)非常像域那。Supervisor在接收到Nimbus分配的任務(wù)之后,會(huì)啟動(dòng)名為Worker的進(jìn)程來(lái)完成工作猜煮。每個(gè)Worker負(fù)責(zé)一個(gè)拓?fù)浣Y(jié)構(gòu)次员,而一個(gè)Supervisor可以啟動(dòng)多個(gè)Worker,并負(fù)責(zé)管理它們王带,類(lèi)似Hadoop中任務(wù)跟蹤節(jié)點(diǎn)(Task Tracker)的角色淑蔚。此外,Storm同樣是利用ZooKeeper來(lái)管理節(jié)點(diǎn)的集群的愕撰,例如任務(wù)的分配情況刹衫、各個(gè)Worker的狀態(tài)、Supervisor之間的Nimbus的拓?fù)涠攘康雀阏酢imbus和Supervisor節(jié)點(diǎn)之間的通信也是結(jié)合ZooKeeper的狀態(tài)變更通知和監(jiān)控通知來(lái)處理的带迟。
spark streaming
Spark的Streaming(http://spark.apache.org/streaming/),這是一個(gè)針對(duì)實(shí)時(shí)數(shù)據(jù)進(jìn)行快速流式處理的系統(tǒng)囱桨,基本原理是按照很小的時(shí)間片段對(duì)流式數(shù)據(jù)進(jìn)行切分仓犬,然后以類(lèi)似批處理的方式來(lái)消化這一小部分的數(shù)據(jù)。Spark Streaming會(huì)把每塊數(shù)據(jù)作為一個(gè)RDD舍肠,每個(gè)塊都會(huì)生成一個(gè)Spark的任務(wù)來(lái)進(jìn)行處理搀继,最終結(jié)果也會(huì)返回多塊。由于使用了這種設(shè)計(jì)模式翠语,因此Spark Streaming可以同時(shí)兼容批量和實(shí)時(shí)數(shù)據(jù)的處理邏輯叽躯,以便于歷史數(shù)據(jù)的融合。Spark Streaming的編程方式和Spark很類(lèi)似肌括,它通過(guò)DStream這種RDD序列來(lái)表示數(shù)據(jù)流并進(jìn)行運(yùn)算点骑。
Spark Streaming和Storm的相似點(diǎn)在于,它們的處理模式都像流水線作業(yè)一樣谍夭,故稱(chēng)為流式計(jì)算黑滴。不過(guò)也存在不同之處。Spark Streaming是處理某個(gè)時(shí)間段窗口內(nèi)的事件慧库,而Storm處理的是每次傳入的單個(gè)事件跷跪,理論上Spark Streaming的延時(shí)性要比Storm略高。不過(guò)RDD的機(jī)制賦予了Spark Streaming更高的靈活性和容錯(cuò)性齐板。在Storm中吵瞻,每個(gè)單獨(dú)的記錄通過(guò)系統(tǒng)時(shí)必須被跟蹤葛菇,這樣Storm才能夠保證每個(gè)記錄至少被處理一次。但是在從錯(cuò)誤中恢復(fù)過(guò)來(lái)的時(shí)候Storm允許出現(xiàn)重復(fù)記錄橡羞,這就意味著某些狀態(tài)可能被錯(cuò)誤地更新多次眯停。而Spark Streaming只需要在批量級(jí)別進(jìn)行跟蹤處理,即便一個(gè)節(jié)點(diǎn)發(fā)生故障卿泽,也可以有效地保證每個(gè)時(shí)間窗內(nèi)的小量數(shù)據(jù)被完整地處理一次莺债。
《Hadoop實(shí)戰(zhàn)》作者:Chuck Lam譯者:韓冀中不錯(cuò)的Hadoop入門(mén)圖書(shū),介紹了基本概念签夭、系統(tǒng)架構(gòu)齐邦、安裝和使用。包括本章介紹的MapReduce計(jì)算框架第租。對(duì)Pig和Hive也進(jìn)行了簡(jiǎn)單的介紹措拇。
《Hadoop實(shí)戰(zhàn)(第2版)》作者:陸嘉恒本書(shū)除了對(duì)Hadoop有了詳細(xì)的介紹,還涵蓋了不少Hadoop生態(tài)中的其他內(nèi)容慎宾,包括HBase丐吓、Hive、Pig趟据、Mahout券犁,以及分布式協(xié)同系統(tǒng)Zookeeper,知識(shí)點(diǎn)覆蓋比較全面汹碱。
《Spark大數(shù)據(jù)處理:技術(shù)粘衬、應(yīng)用與性能優(yōu)化》作者:高彥杰作者結(jié)合自己的實(shí)踐經(jīng)驗(yàn)和對(duì)Spark源代碼的研究,從技術(shù)層面講解了Spark的體系結(jié)構(gòu)比被、安裝與部署色难、開(kāi)發(fā)環(huán)境搭建泼舱、計(jì)算模型等內(nèi)容等缀。然后從應(yīng)用的角度講解了一些簡(jiǎn)單的、有代表性的案例及性能優(yōu)化娇昙。
《大數(shù)據(jù)Spark企業(yè)級(jí)實(shí)戰(zhàn)》作者:王家林對(duì)Spark進(jìn)行了比較全面和詳細(xì)的介紹尺迂,包括對(duì)源碼的一些分析,比較適合高級(jí)用戶冒掌。
《Hive編程指南》作者:Edward Capriolo噪裕,Dean Wampler,Jason Rutherglen譯者:曹坤介紹了Hive的背景股毫、工作模型和HiveQL語(yǔ)法等膳音。對(duì)于各種類(lèi)SQL的語(yǔ)法進(jìn)行了較為全面的解釋?zhuān)且槐竞芎玫娜粘⒖际謨?cè)。
《Pig編程指南》作者:Alan Gates譯者:曹坤為入門(mén)者講述了Apache Pig的基礎(chǔ)知識(shí)铃诬,同時(shí)也向有一定使用經(jīng)驗(yàn)的高級(jí)用戶介紹了更加綜合全面的Pig重要特性祭陷,如Pig Latin腳本語(yǔ)言苍凛、控制臺(tái)shell交互命令,等等兵志。
《開(kāi)源大數(shù)據(jù)分析引擎Impala實(shí)戰(zhàn)》作者:賈傳青
介紹了開(kāi)源大數(shù)據(jù)分析引擎Impala的背景醇蝴、安裝與配置、架構(gòu)想罕、性能優(yōu)化等悠栓,以及一些相關(guān)的應(yīng)用設(shè)計(jì)原則和應(yīng)用案例。
《ActiveMQ in Action》作者:Bruce Snyder按价,Rob Davies惭适,Dejan BosanacActiveMQ的入門(mén)書(shū)籍,包含原理和編程范例楼镐。同時(shí)也介紹了JMS的理念和設(shè)計(jì)腥沽。
《Apache Kafka》作者:Nishant Garg本書(shū)介紹了如何創(chuàng)建Kafka集群,并通過(guò)實(shí)例展示如何開(kāi)發(fā)定制化的消息生產(chǎn)者和消費(fèi)者鸠蚪。
《Getting Started with Storm》作者:Jonathan Leibiusky今阳,Gabriel Eisbrucb,Dario Simonassi從零開(kāi)始學(xué)習(xí)Storm的理念茅信、架構(gòu)和原理盾舌,適合初學(xué)者≌壕ǎ《Storm分布式實(shí)時(shí)計(jì)算模式》作者:P.Taylor Goetz妖谴,Brian O'Neil譯者:董昭融合了作者的Storm實(shí)戰(zhàn)經(jīng)驗(yàn),通過(guò)示例講解使用Storm進(jìn)行分布式實(shí)時(shí)計(jì)算的核心概念及應(yīng)用酌摇,是一本不錯(cuò)的實(shí)踐指南膝舅。