怎么來(lái)處理實(shí)時(shí)數(shù)據(jù)和歷史數(shù)據(jù)。Nathan提出了Lambda Architecture的架構(gòu)。實(shí)時(shí)數(shù)據(jù)進(jìn)入一個(gè)流處理系統(tǒng)進(jìn)行檢測(cè)分析,同時(shí)也進(jìn)入Hadoop,全量數(shù)據(jù)放在Hadoop對(duì)歷史數(shù)據(jù)進(jìn)行分析,兩者結(jié)果做融合,然后應(yīng)用程序訪問(wèn)這個(gè)數(shù)據(jù)庫(kù)做分析。今天為止沒(méi)有哪個(gè)技術(shù)既能處理實(shí)時(shí)數(shù)據(jù)又能處理大量歷史數(shù)據(jù),所以Nathan提出了這樣一個(gè)混合的架構(gòu),這個(gè)混合架構(gòu)受到很多人的追捧。這種架構(gòu)實(shí)時(shí)數(shù)據(jù)流里面處理完之后仍掉了,只把結(jié)果放在里面,也就是我不能對(duì)實(shí)時(shí)數(shù)據(jù)進(jìn)行隨機(jī)的查詢,這是第一個(gè)問(wèn)題。我把隨時(shí)數(shù)據(jù)和歷史數(shù)據(jù)分離后,我怎么形成統(tǒng)一的視圖,怎么最后拼接起來(lái),這是比較難的事情。第三個(gè)這個(gè)Serving DB可以完成快速查詢但是不能做統(tǒng)計(jì)分析。這三個(gè)弱點(diǎn)很快大家意識(shí)到了,很快大家想出一個(gè)辦法,有一個(gè)項(xiàng)目叫Druid,這個(gè)項(xiàng)目得到大家比較多的關(guān)注,現(xiàn)在Twitter和雅虎采用這種實(shí)時(shí)數(shù)據(jù)分析。Druid解決了兩個(gè)問(wèn)題,把實(shí)時(shí)數(shù)據(jù)和歷史數(shù)據(jù)全部拼接起來(lái)變成一張視圖,它內(nèi)部把實(shí)時(shí)數(shù)據(jù)離線的收集起來(lái)拼成一個(gè)歷史視圖進(jìn)行分析。Druid解決了快速采集和統(tǒng)一視圖的問(wèn)題,但是它還不能解決復(fù)雜統(tǒng)計(jì)和挖掘的問(wèn)題。比較理想的架構(gòu)最好是數(shù)據(jù)經(jīng)過(guò)流處理以后直接進(jìn)入一個(gè)數(shù)據(jù)庫(kù),這個(gè)數(shù)據(jù)庫(kù)可以完整把實(shí)時(shí)數(shù)據(jù)和歷史數(shù)據(jù)拼接起來(lái),在上面既做高速查詢又能做迭代分析,這是比較理想的,這樣可以省去維護(hù)兩套架構(gòu)的麻煩,而且既能對(duì)實(shí)時(shí)數(shù)據(jù)進(jìn)行分析,又能對(duì)歷史數(shù)據(jù)進(jìn)行分析,這是比較理想的架構(gòu),現(xiàn)在大家還在想有什么實(shí)現(xiàn)的方法。我們做了一個(gè)嘗試,這是我們?cè)趹?yīng)用大數(shù)據(jù)技術(shù)到國(guó)內(nèi)各個(gè)行業(yè)的時(shí)候發(fā)現(xiàn)的普遍問(wèn)題,這個(gè)驅(qū)動(dòng)力來(lái)自于交通流的實(shí)時(shí)分析,如果我們部署整個(gè)集群的時(shí)候,他們希望看到早高峰晚高峰任何一個(gè)時(shí)刻每個(gè)路口的實(shí)時(shí)狀況,一旦發(fā)生交通事故,某個(gè)地方產(chǎn)生擁堵會(huì)有連鎖反應(yīng),產(chǎn)生連鎖反應(yīng)后需要快速分析這種情況的影響,這種情況用剛才的Lambda架構(gòu)也不能很好實(shí)現(xiàn)。我們開(kāi)發(fā)了分布式的緩存holodesk,存在內(nèi)存或者是SSD上的,當(dāng)實(shí)時(shí)數(shù)據(jù)流到里面去的時(shí)候,我們先用Spark Streaming進(jìn)行實(shí)時(shí)檢測(cè)和告警處理,這是一個(gè)批處理系統(tǒng),可以短到一百毫秒,再小的延時(shí)現(xiàn)在還不能實(shí)現(xiàn),Spark本身框架延時(shí)比較長(zhǎng)。進(jìn)入Spark內(nèi)存以后同時(shí)我們?cè)谏厦婵梢宰龇浅6嗟膶?shí)時(shí)的檢測(cè)甚至是實(shí)時(shí)的挖掘,同時(shí)這個(gè)結(jié)果以及原有數(shù)據(jù)我們映射成二維關(guān)系表,做一個(gè)SQL轉(zhuǎn)化,轉(zhuǎn)化成一個(gè)歷史存儲(chǔ)。過(guò)去我們可以放在內(nèi)存里,但是內(nèi)存容量不夠我們把全量數(shù)據(jù)放到SSD上,我們的holodesk支持快速插入,這樣我可以把所有實(shí)時(shí)數(shù)據(jù)包括歷史數(shù)據(jù)可以全部緩存到SSD上,這個(gè)集群可能是10個(gè)節(jié)點(diǎn)20個(gè)節(jié)點(diǎn),你可以存放幾年交通數(shù)據(jù),這樣可以對(duì)歷史數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù)進(jìn)行很完整的分析。這個(gè)轉(zhuǎn)化也是非??斓?,我們支持高速的數(shù)據(jù)插入,數(shù)據(jù)持久性也得到保證,因?yàn)閿?shù)據(jù)在SSD上,即使掉線也沒(méi)有問(wèn)題。這種方案解決了三個(gè)問(wèn)題,第一個(gè)是可以有一個(gè)統(tǒng)一的視圖,不管是歷史還是實(shí)時(shí)都有,第二是可以通過(guò)標(biāo)準(zhǔn)SQL或者R語(yǔ)言做任意復(fù)雜的分析,第三是數(shù)據(jù)持久化問(wèn)題也解決了。還有一個(gè)問(wèn)題沒(méi)有解決,如果把這個(gè)數(shù)據(jù)給在線用戶訪問(wèn),這個(gè)并發(fā)度還不夠。改進(jìn)的方法是一方面我們盡量降低查詢的延時(shí),另外我們也需要擴(kuò)大集群規(guī)模來(lái)提高并發(fā)度。這個(gè)方案很好地解決了交通行業(yè)面臨的問(wèn)題。這個(gè)問(wèn)題蠻普遍的,不光是交通行業(yè),還有網(wǎng)站點(diǎn)擊日志,我們也可以用這個(gè)方式做分析,我們可以對(duì)傳感器的數(shù)據(jù),例如工廠里傳感器的數(shù)據(jù)進(jìn)行快速的分析,而且傳感器的數(shù)據(jù)可以全部在一張表里面。
第四隨著虛擬化技術(shù)快速演進(jìn),我們說(shuō)云計(jì)算和大數(shù)據(jù)終于可以融合起來(lái)了。
虛擬機(jī)幫助快速部署已經(jīng)得到了時(shí)間的驗(yàn)證,這種方式把一臺(tái)機(jī)器拆分到很多小機(jī)器,每臺(tái)機(jī)器給用戶使用。大數(shù)據(jù)覺(jué)得一臺(tái)機(jī)器不夠,我需要上千臺(tái)、幾百臺(tái)機(jī)器組成一臺(tái)機(jī)器處理。這個(gè)怎么融合起來(lái),是不是我把虛擬機(jī)替代物理機(jī)做成了一個(gè)集群?這個(gè)嘗試基本上都是失敗的,因?yàn)镮O的瓶頸是非常嚴(yán)重的,特別是在虛擬機(jī)跑大數(shù)據(jù)應(yīng)用,CPU利用往往達(dá)到99%,很少有人在虛擬機(jī)上把CPU用到99%,這樣對(duì)hypervisor是很大的考驗(yàn),穩(wěn)定性成為一個(gè)大問(wèn)題。最近一兩年虛擬化技術(shù)在快速發(fā)展,不亞于一場(chǎng)新的技術(shù)革命。首先輕量級(jí)的Linux container技術(shù)出現(xiàn),container之間可以做資源隔離,這使得虛擬機(jī)變得非常輕量級(jí)。很快一家公司叫做Docker發(fā)現(xiàn)應(yīng)用打包遷移安裝還是不方便,所以做了一個(gè)工具,使得你做應(yīng)用打包遷移非常容易。大家發(fā)現(xiàn)還不大夠,因?yàn)槲乙獎(jiǎng)?chuàng)立單個(gè)container或者單個(gè)應(yīng)用比較容易,但是多個(gè)container應(yīng)用就很麻煩。谷歌開(kāi)發(fā)一個(gè)開(kāi)源項(xiàng)目叫做Kubernetes, 簡(jiǎn)化了創(chuàng)建container集群的任務(wù),你可以非常方便的創(chuàng)建Hadoop集群,也可以創(chuàng)建傳統(tǒng)的應(yīng)用,提供多container集群的部署同時(shí)也提供一些基礎(chǔ)服務(wù),比如說(shuō)一些調(diào)度服務(wù),這開(kāi)始具備分布式操作系統(tǒng)的雛形。另外一個(gè)方向像大數(shù)據(jù)領(lǐng)域去年推出Hadoop2.0資源管理的框架YARN,這個(gè)確實(shí)是革命性的,因?yàn)榘奄Y源管理放在最底層,在上面可以跑多種計(jì)算框架,我們覺(jué)得可以一統(tǒng)天下了。隨后大家發(fā)現(xiàn)YARN資源隔離做得不夠好,內(nèi)存/磁盤/IO沒(méi)有管好。因此Hortonworks嘗試把Google Kubernetes作為YARN的一個(gè)Application Manager, 內(nèi)部用Docker進(jìn)行資源調(diào)度。而另一家公司mesosphere異軍突起,以mesos為資源調(diào)度核心,以docker作為container的管理基礎(chǔ)工具,開(kāi)發(fā)了一套分布式資源管理的框架,提出了數(shù)據(jù)中心操作系統(tǒng)的概念。這家公司最近融資了數(shù)千萬(wàn)美元。盡管底層技術(shù)在快速變化,但不妨礙一些公司已經(jīng)提供Hadoop as a Service的服務(wù),例如AltiScale,BlueData,Xplenty等。