數(shù)據(jù)分析≠Hadoop+NoSQL,完善現(xiàn)有技術(shù)的10條捷徑
讓業(yè)務(wù)搭乘大數(shù)據(jù)技術(shù)確實是件非常有吸引力的事情,而Apache Hadoop讓這個誘惑來的更加的猛烈。Hadoop是個大規(guī)模可擴(kuò)展數(shù)據(jù)存儲平臺,構(gòu)成了大多數(shù)大數(shù)據(jù)項目基礎(chǔ)。Hadoop是強(qiáng)大的,然而卻需要公司投入大量的學(xué)習(xí)精力及其它的資源。
如果得到正確的應(yīng)用,Hadoop確實能從根本上提升你公司的業(yè)務(wù),然而這條Hadoop的應(yīng)用之路卻充滿了荊棘。另一個方面,許多企業(yè)(當(dāng)然不是Google、Facebook或者Twitter)也沒有做大數(shù)據(jù)分析所需要的巨型集群,他們純粹是被“大數(shù)據(jù)”這個熱門的詞語給吸引的。
就像Dabid Wheeler所說“計算機(jī)科學(xué)的所有問題都有另一個層次間接的解決方案”,而Hadoop正是類似間接解決方案;當(dāng)你的上司被一些流行詞匯所吸引時,做正確的軟件架構(gòu)決策將變的非常艱難。
下文將給出一些對Hadoop進(jìn)行投資前需要嘗試的替代方案:
了解你的數(shù)據(jù)
數(shù)據(jù)的總體積
Hadoop是為大型數(shù)據(jù)集所建立的有效解決方案。
GB級以上的文件系統(tǒng)HDFS。因此如果你的文件只是MB級的,你最好對數(shù)個文件進(jìn)行整合(zip或者tar),讓其達(dá)到數(shù)百兆或者是幾GB。
HDFS會將文件分割,并以64MB、128M或者更大的塊進(jìn)行存儲。
如果你的數(shù)據(jù)集非常的小,那么使用這個巨型生態(tài)系統(tǒng)將不會很適合。這需要對自己的數(shù)據(jù)有足夠的了解,并且分析需要什么類型的查詢以及你的數(shù)據(jù)是否真的夠大。
另一方面,鑒于你的計算指令可能很大,只通過數(shù)據(jù)庫去測量數(shù)據(jù)的體積可能會存在誤差。有時候數(shù)學(xué)計算或者分析小型數(shù)據(jù)集的排列可能會讓得出的結(jié)果遠(yuǎn)大于實際數(shù)據(jù)體積,所以關(guān)鍵在于你對數(shù)據(jù)有切實的了解。
數(shù)據(jù)增長的速度
你可能在數(shù)據(jù)倉庫或者其它的數(shù)據(jù)源中存有數(shù)TB數(shù)據(jù),然而在建立Hadoop集群前有一個必須考慮的因素就是數(shù)據(jù)的增長速度。
對你的分析師提出幾個簡單的問題,比如:
數(shù)據(jù)增速究竟有多快?這些數(shù)據(jù)是否以非常快的速度增長?
幾月或者幾年后數(shù)據(jù)的體積究竟會有多大?
許多公司的數(shù)據(jù)增長都是按年算的。這種情況下,你的數(shù)據(jù)增長速度其實并不快;所以這里建議考慮歸檔和清除選項,而不是直接的奔往Hadoop。
如何減少需處理的數(shù)據(jù)
如果你確實有非常大體積的數(shù)據(jù),你可以考慮通過以下的途徑將數(shù)據(jù)縮減到非常適合管理的體積,以下的幾個選項已經(jīng)過產(chǎn)業(yè)幾十年考驗。
考慮歸檔
數(shù)據(jù)存檔是對過期的數(shù)據(jù)進(jìn)行分開存儲,當(dāng)然存儲的時間根據(jù)實際需求制定。這需要對數(shù)據(jù)以及應(yīng)用程序?qū)?shù)據(jù)的使用情況,有非常充分的了解。比如電子商務(wù)公司的大數(shù)據(jù)處理只將3個月內(nèi)的數(shù)據(jù)存入活躍數(shù)據(jù)庫,而舊訂單則被存入單獨的存儲。
這個途徑同樣可以運(yùn)用于你的數(shù)據(jù)倉庫。當(dāng)然你可以存儲更多的近期數(shù)據(jù)用于報告和查詢,使用頻度少的數(shù)據(jù)可以被存入單獨的存儲設(shè)備。
考慮清除數(shù)據(jù)
有時候我們一直忙于收集數(shù)據(jù)而不清楚究竟需要保存多少數(shù)據(jù),如果你存儲了非常多用不到的數(shù)據(jù),那么這將毫無疑問的降低你有效數(shù)據(jù)的處理速度。弄清你的業(yè)務(wù)需求并且審查數(shù)據(jù)是否可以被刪除,從中分析出你需要儲存數(shù)據(jù)的類型,這不僅會節(jié)省你的存儲空間,同樣會提升有效數(shù)據(jù)的分析速度。
一個經(jīng)常用到的最佳實踐就是給數(shù)據(jù)倉庫建立附加列,比如created_date、created_by、update_date及updated_by。通過這些附加列可以對數(shù)據(jù)進(jìn)行階段性的訪問統(tǒng)計,這樣就可以清楚數(shù)據(jù)的有效周期。這里需要著重對待的是數(shù)據(jù)清除的邏輯,切記先思考再實現(xiàn)。如果你使用了一個歸檔工具,那么數(shù)據(jù)的清除將會變得非常容易。
不是所有的數(shù)據(jù)都很重要
你可能受不了儲存所有業(yè)務(wù)相關(guān)數(shù)據(jù)的誘惑,你可能有很多的數(shù)據(jù)來源,比如:日志文件、營銷活動數(shù)據(jù)、ETL作業(yè)等。你需要明白不是所有數(shù)據(jù)都對業(yè)務(wù)起關(guān)鍵作用,而且在數(shù)據(jù)倉庫中保存所有的數(shù)據(jù)并不是有益的。在數(shù)據(jù)源過濾掉不需要的數(shù)據(jù),甚至是在儲存到數(shù)據(jù)倉庫之前。不要對所有的數(shù)據(jù)進(jìn)行存儲,只分析你所需的數(shù)據(jù)。
注意哪些數(shù)據(jù)是你想要收集的
拿在線視頻編輯業(yè)務(wù)來說,你會需要保存你用戶做出的所有操作嗎?這樣的話可能會產(chǎn)生非常大的數(shù)據(jù)體積,如果你發(fā)現(xiàn)你的數(shù)據(jù)倉庫不足以應(yīng)對這些數(shù)據(jù),你可能會考慮只存儲元數(shù)據(jù)。雖然視頻編輯是個非常極端的例子,然而并不妨礙我們在其它用例中考慮這些信息。
總而言之,根據(jù)業(yè)務(wù)的需求只收集所需要的數(shù)據(jù)。
智能分析
聘請了解業(yè)務(wù)的分析師
到目前為止,你應(yīng)該已經(jīng)清楚理解數(shù)據(jù)的重要性;所以在你做了上面所有步驟后并決定使用Hadoop時,聘請1個了解業(yè)務(wù)的分析師將會對你業(yè)務(wù)產(chǎn)生巨大幫助。
如果數(shù)據(jù)分析師不懂如何從中獲取價值,那么Hadoop將不會產(chǎn)生任何作用,不要吝嗇對業(yè)務(wù)有深刻認(rèn)識的雇員投資。鼓勵他們多做實驗,并且使用新的方式去分析同一個數(shù)據(jù),找出使用現(xiàn)有基礎(chǔ)設(shè)施獲利的途徑。
為決策制定使用統(tǒng)計抽樣
統(tǒng)計抽樣可以說是非常古老的技術(shù),研究者及數(shù)學(xué)家運(yùn)用它在大體積數(shù)據(jù)上推斷合理的結(jié)論。通過這個步驟,我們可以大幅度的縮減數(shù)據(jù)體積。取代追蹤數(shù)十億或者數(shù)百萬的數(shù)據(jù)點,只需要跟蹤其中數(shù)千或者數(shù)百的數(shù)據(jù)點就可以了。這個手段雖然不會給我們提供精準(zhǔn)的結(jié)果,但是卻可以對大型的數(shù)據(jù)集有一個高等級的理解。
提升技術(shù)
你真的已經(jīng)達(dá)到關(guān)系型數(shù)據(jù)庫處理的極限了嗎?
在探索其它領(lǐng)域之前,你更應(yīng)該審視關(guān)系數(shù)據(jù)庫是否可以繼續(xù)處理問題。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫已經(jīng)被使用了很長一段時間,而很多機(jī)構(gòu)已經(jīng)可以使用它管理TB級的數(shù)據(jù)倉庫。所以在遷往Hadoop之前,不妨考慮以下的方法。
分割數(shù)據(jù)
數(shù)據(jù)切分是從邏輯上或物理上將數(shù)據(jù)分割成數(shù)個更好維護(hù)或訪問的部分,同時很多流行的開源關(guān)系型數(shù)據(jù)庫都支持分片(比如MySQL Partitioning及Postgres Partitionging)。
在傳統(tǒng)數(shù)據(jù)庫上考慮數(shù)據(jù)庫分片
數(shù)據(jù)庫分片是提升傳統(tǒng)關(guān)系型數(shù)據(jù)庫性能極限的最后一招,適用于數(shù)據(jù)可以邏輯分片在不同節(jié)點上并且很少做跨節(jié)點join分享的情況。在網(wǎng)絡(luò)應(yīng)用程序中,基于用戶分片,并將用戶相關(guān)信息儲存在同一個節(jié)點上是提升性能的常見途徑。
分片有很多限制條件,所以并不是適合所有場景,同樣在用例中存在太多的跨節(jié)點jion,分片將發(fā)揮不了任何作用。
總結(jié)
Hadoop的部署將耗費公司巨量的人力和物力,如果能通過提升現(xiàn)有基礎(chǔ)設(shè)施來達(dá)到目標(biāo)也不失為一良策。