前面已經(jīng)說過,
大數(shù)據(jù)實(shí)時(shí)分析平臺(tái)主要解決企業(yè)海量多樣化數(shù)據(jù)的采集、存儲(chǔ)與計(jì)算處理。與其他IT系統(tǒng)一樣,性能是大數(shù)據(jù)系統(tǒng)獲得成功的關(guān)鍵。下面將介紹如何讓大數(shù)據(jù)系統(tǒng)保證其性能。
大數(shù)據(jù)系統(tǒng)應(yīng)該包含的功能模塊,首先是能夠從多種數(shù)據(jù)源獲取數(shù)據(jù)的功能,數(shù)據(jù)的預(yù)處理(例如,清洗,驗(yàn)證等),存儲(chǔ)數(shù)據(jù),數(shù)據(jù)處理、
數(shù)據(jù)分析等(例如做預(yù)測分析,生成在線使用建議等等),最后呈現(xiàn)總結(jié)、匯總結(jié)果。

數(shù)據(jù)采集
第一步,獲取數(shù)據(jù)。這個(gè)過程包括分析,驗(yàn)證,清洗,轉(zhuǎn)換,去重,然后存到適合你們公司的一個(gè)持久化設(shè)備中(硬盤、存儲(chǔ)、云等)。
存儲(chǔ)數(shù)據(jù)
第二步,一旦數(shù)據(jù)進(jìn)入大數(shù)據(jù)系統(tǒng),清洗,并轉(zhuǎn)化為所需格式時(shí),這些過程都將在
數(shù)據(jù)存儲(chǔ)到一個(gè)合適的持久化層中進(jìn)行。
數(shù)據(jù)處理和分析
第三步,在這一階段中的一部分干凈數(shù)據(jù)是去規(guī)范化的,包括對(duì)一些相關(guān)的數(shù)據(jù)集的數(shù)據(jù)進(jìn)行一些排序,在規(guī)定的時(shí)間間隔內(nèi)進(jìn)行數(shù)據(jù)結(jié)果歸集,執(zhí)行機(jī)器學(xué)習(xí)算法,預(yù)測分析等。
下面將針對(duì)如何打造高效的大數(shù)據(jù)系統(tǒng)介紹一些最佳實(shí)踐。
保障數(shù)據(jù)采集中的高效之道
數(shù)據(jù)采集是各種來自不同數(shù)據(jù)源的數(shù)據(jù)進(jìn)入大數(shù)據(jù)系統(tǒng)的第一步。這個(gè)步驟的性能將會(huì)直接決定在一個(gè)給定的時(shí)間段內(nèi)大數(shù)據(jù)系統(tǒng)能夠處理的數(shù)據(jù)量的能力。
數(shù)據(jù)采集過程基于對(duì)該系統(tǒng)的個(gè)性化需求,但一些常用執(zhí)行的步驟是 - 解析傳入數(shù)據(jù),做必要的驗(yàn)證,數(shù)據(jù)清晰,例如數(shù)據(jù)去重,轉(zhuǎn)換格式,并將其存儲(chǔ)到某種持久層。
下面是一些性能方面的技巧:
●來自不同數(shù)據(jù)源的傳輸應(yīng)該是異步的。可以使用文件來傳輸、或者使用面向消息的(MoM)中間件來實(shí)現(xiàn)。由于數(shù)據(jù)異步傳輸,所以數(shù)據(jù)采集過程的吞吐量可以大大高于大數(shù)據(jù)系統(tǒng)的處理能力。 異步數(shù)據(jù)傳輸同樣可以在大數(shù)據(jù)系統(tǒng)和不同的數(shù)據(jù)源之間進(jìn)行解耦。大數(shù)據(jù)基礎(chǔ)架構(gòu)設(shè)計(jì)使得其很容易進(jìn)行動(dòng)態(tài)伸縮,數(shù)據(jù)采集的峰值流量對(duì)于大數(shù)據(jù)系統(tǒng)來說算是安全的。
●如果數(shù)據(jù)是直接從一些外部數(shù)據(jù)庫中抽取的,確保拉取數(shù)據(jù)是使用批量的方式。
●如果數(shù)據(jù)是從feed file解析,請務(wù)必使用合適的解析器。例如,如果從一個(gè)XML文件中讀取也有不同的解析器像JDOM,SAX,DOM等。類似地,對(duì)于CSV,JSON和其它這樣的格式,多個(gè)解析器和API是可供選擇。選擇能夠符合需求的性能最好的。
●優(yōu)先使用內(nèi)置的驗(yàn)證解決方案。大多數(shù)解析/驗(yàn)證工作流程的通常運(yùn)行在服務(wù)器環(huán)境(ESB /應(yīng)用服務(wù)器)中。大部分的場景基本上都有現(xiàn)成的標(biāo)準(zhǔn)校驗(yàn)工具。在大多數(shù)的情況下,這些標(biāo)準(zhǔn)的現(xiàn)成的工具一般來說要比你自己開發(fā)的工具性能要好很多。
●類似地,如果數(shù)據(jù)XML格式的,優(yōu)先使用XML(XSD)用于驗(yàn)證。
●即使解析器或者校等流程使用自定義的腳本來完成,例如使用java優(yōu)先還是應(yīng)該使用內(nèi)置的函數(shù)庫或者開發(fā)框架。在大多數(shù)的情況下通常會(huì)比你開發(fā)任何自定義代碼快得多。
●盡量提前濾掉無效數(shù)據(jù),以便后續(xù)的處理流程都不用在無效數(shù)據(jù)上浪費(fèi)過多的計(jì)算能力。
●大多數(shù)系統(tǒng)處理無效數(shù)據(jù)的做法通常是存放在一個(gè)專門的表中,請?jiān)谙到y(tǒng)建設(shè)之初考慮這部分的數(shù)據(jù)庫存儲(chǔ)和其他額外的存儲(chǔ)開銷。
●如果來自數(shù)據(jù)源的數(shù)據(jù)需要清洗,例如去掉一些不需要的信息,盡量保持所有數(shù)據(jù)源的抽取程序版本一致,確保一次處理的是一個(gè)大批量的數(shù)據(jù),而不是一條記錄一條記錄的來處理。一般來說
數(shù)據(jù)清洗需要進(jìn)行表關(guān)聯(lián)。數(shù)據(jù)清洗中需要用到的靜態(tài)數(shù)據(jù)關(guān)聯(lián)一次,并且一次處理一個(gè)很大的批量就能夠大幅提高數(shù)據(jù)處理效率。
●數(shù)據(jù)去重非常重要這個(gè)過程決定了主鍵的是由哪些字段構(gòu)成。通常主鍵都是時(shí)間戳或者id等可以追加的類型。一般情況下,每條記錄都可能根據(jù)主鍵進(jìn)行索引來更新,所以最好能夠讓主鍵簡單一些,以保證在更新的時(shí)候檢索的性能。
●來自多個(gè)源接收的數(shù)據(jù)可以是不同的格式。有時(shí),需要進(jìn)行數(shù)據(jù)移植,使接收到的數(shù)據(jù)從多種格式轉(zhuǎn)化成一種或一組標(biāo)準(zhǔn)格式。
●和解析過程一樣,我們建議使用內(nèi)置的工具,相比于你自己從零開發(fā)的工具性能會(huì)提高很多。
●數(shù)據(jù)移植的過程一般是數(shù)據(jù)處理過程中最復(fù)雜、最緊急、消耗資源最多的一步。因此,確保在這一過程中盡可能多的使用并行計(jì)算。
●一旦所有的數(shù)據(jù)采集的上述活動(dòng)完成后,轉(zhuǎn)換后的數(shù)據(jù)通常存儲(chǔ)在某些持久層,以便以后分析處理,綜述,聚合等使用。
●多種技術(shù)解決方案的存在是為了處理這種持久(RDBMS,NoSQL的分布式文件系統(tǒng),如Hadoop和等)。
●謹(jǐn)慎選擇一個(gè)能夠最大限度的滿足需求的解決方案。
保障數(shù)據(jù)存儲(chǔ)中的高效之道
一旦所有的數(shù)據(jù)采集步驟完成后,數(shù)據(jù)將進(jìn)入持久層。
●首先選擇數(shù)據(jù)范式。您對(duì)數(shù)據(jù)的建模方式對(duì)性能有直接的影響,例如像數(shù)據(jù)冗余,磁盤存儲(chǔ)容量等方面。對(duì)于一些簡單的文件導(dǎo)入數(shù)據(jù)庫中的場景,你也許需要保持?jǐn)?shù)據(jù)原始的格式,對(duì)于另外一些場景,如執(zhí)行一些分析計(jì)算聚集等,你可能不需要將數(shù)據(jù)范式化。
●大多數(shù)的大數(shù)據(jù)系統(tǒng)使用NoSQL數(shù)據(jù)庫替代RDBMS處理數(shù)據(jù)。
●不同的NoSQL數(shù)據(jù)庫適用不同的場景,一部分在select時(shí)性能更好,有些是在插入或者更新性能更好。
●數(shù)據(jù)庫分為行存儲(chǔ)和列存儲(chǔ)。
●具體的數(shù)據(jù)庫選型依賴于你的具體需求(例如,你的應(yīng)用程序的數(shù)據(jù)庫讀寫比)。
●同樣每個(gè)數(shù)據(jù)庫都會(huì)根據(jù)不同的配置從而控制這些數(shù)據(jù)庫用于數(shù)據(jù)庫復(fù)制備份或者嚴(yán)格保持?jǐn)?shù)據(jù)一致性
●這些設(shè)置會(huì)直接影響數(shù)據(jù)庫性能。在數(shù)據(jù)庫技術(shù)選型前一定要注意。
●壓縮率、緩沖池、超時(shí)的大小,和緩存的對(duì)于不同的NoSQL數(shù)據(jù)庫來說配置都是不同的,同時(shí)對(duì)數(shù)據(jù)庫性能的影響也是不一樣的。
●數(shù)據(jù)Sharding和分區(qū)是這些數(shù)據(jù)庫的另一個(gè)非常重要的功能。數(shù)據(jù)Sharding的方式能夠?qū)ο到y(tǒng)的性能產(chǎn)生巨大的影響,所以在數(shù)據(jù)Sharding和分區(qū)時(shí)請謹(jǐn)慎選擇。
●并非所有的NoSQL數(shù)據(jù)庫都內(nèi)置了支持連接,排序,匯總,過濾器,索引等。
●如果有需要還是建議使用內(nèi)置的類似功能,因?yàn)樽约洪_發(fā)的還是不靈。
●NoSQLs內(nèi)置了壓縮、編解碼器和數(shù)據(jù)移植工具。如果這些可以滿足您的部分需求,那么優(yōu)先選擇使用這些內(nèi)置的功能。這些工具可以執(zhí)行各種各樣的任務(wù),如格式轉(zhuǎn)換、壓縮數(shù)據(jù)等,使用內(nèi)置的工具不僅能夠帶來更好的性能還可以降低網(wǎng)絡(luò)的使用率。
●許多NoSQL數(shù)據(jù)庫支持多種類型的文件系統(tǒng)。其中包括本地文件系統(tǒng),分布式文件系統(tǒng),甚至基于云的存儲(chǔ)解決方案。
●如果在交互式需求上有嚴(yán)格的要求,否則還是盡量嘗試使用NoSQL本地(內(nèi)置)文件系統(tǒng)(例如HBase 使用HDFS)。
●這是因?yàn)椋绻褂靡恍┩獠课募到y(tǒng)/格式,則需要對(duì)數(shù)據(jù)進(jìn)行相應(yīng)的編解碼/數(shù)據(jù)移植。它將在整個(gè)讀/寫過程中增加原本不必要的冗余處理。
●大數(shù)據(jù)系統(tǒng)的數(shù)據(jù)模型一般來說需要根據(jù)需求用例來綜合設(shè)計(jì)。與此形成鮮明對(duì)比的是RDMBS數(shù)據(jù)建模技術(shù)基本都是設(shè)計(jì)成為一個(gè)通用的模型,用外鍵和表之間的關(guān)系用來描述數(shù)據(jù)實(shí)體與現(xiàn)實(shí)世界之間的交互。
●在硬件一級(jí),本地RAID模式也許不太適用。請考慮使用SAN存儲(chǔ)。
保障數(shù)據(jù)處理分析中的高效之道
數(shù)據(jù)處理和分析是一個(gè)大數(shù)據(jù)系統(tǒng)的核心。像聚合,預(yù)測,聚集,和其它這樣的邏輯操作都需要在這一步完成。
●在細(xì)節(jié)評(píng)估和數(shù)據(jù)格式和模型后選擇適當(dāng)?shù)臄?shù)據(jù)處理框架。
●其中一些框架適用于批量數(shù)據(jù)處理,而另外一些適用于實(shí)時(shí)數(shù)據(jù)處理。
●同樣一些框架使用內(nèi)存模式,另外一些是基于磁盤io處理模式。
●有些框架擅長高度并行計(jì)算,這樣能夠大大提高數(shù)據(jù)效率。
●基于內(nèi)存的框架性能明顯優(yōu)于基于磁盤io的框架,但是同時(shí)成本也可想而知。
●概括地說,當(dāng)務(wù)之急是選擇一個(gè)能夠滿足需求的框架。否則就有可能既無法滿足功能需求也無法滿足非功能需求,當(dāng)然也包括性能需求。
●一些這些框架將數(shù)據(jù)劃分成較小的塊。這些小數(shù)據(jù)塊由各個(gè)作業(yè)獨(dú)立處理。協(xié)調(diào)器管理所有這些獨(dú)立的子作業(yè)
●在數(shù)據(jù)分塊是需要當(dāng)心。
●該數(shù)據(jù)快越小,就會(huì)產(chǎn)生越多的作業(yè),這樣就會(huì)增加系統(tǒng)初始化作業(yè)和清理作業(yè)的負(fù)擔(dān)。
●如果數(shù)據(jù)快太大,數(shù)據(jù)傳輸可能需要很長時(shí)間才能完成。這也可能導(dǎo)致資源利用不均衡,長時(shí)間在一臺(tái)服務(wù)器上運(yùn)行一個(gè)大作業(yè),而其他服務(wù)器就會(huì)等待。
●不要忘了查看一個(gè)任務(wù)的作業(yè)總數(shù)。在必要時(shí)調(diào)整這個(gè)參數(shù)。
●最好實(shí)時(shí)監(jiān)控?cái)?shù)據(jù)塊的傳輸。在本機(jī)機(jī)型io的效率會(huì)更高,這么做也會(huì)帶來一個(gè)副作用就是需要將數(shù)據(jù)塊的冗余參數(shù)提高(一般hadoop默認(rèn)是3份)這樣又會(huì)反作用使得系統(tǒng)性能下降。
●此外,實(shí)時(shí)數(shù)據(jù)流需要與批量數(shù)據(jù)處理的結(jié)果進(jìn)行合并。設(shè)計(jì)系統(tǒng)時(shí)盡量減少對(duì)其他作業(yè)的影響。
●大多數(shù)情況下同一數(shù)據(jù)集需要經(jīng)過多次計(jì)算。這種情況可能是由于數(shù)據(jù)抓取等初始步驟就有報(bào)錯(cuò),或者某些業(yè)務(wù)流程發(fā)生變化,值得一提的是舊數(shù)據(jù)也是如此。設(shè)計(jì)系統(tǒng)時(shí)需要注意這個(gè)地方的容錯(cuò)。
●這意味著你可能需要存儲(chǔ)原始數(shù)據(jù)的時(shí)間較長,因此需要更多的存儲(chǔ)。
●數(shù)據(jù)結(jié)果輸出后應(yīng)該保存成用戶期望看到的格式。例如,如果最終的結(jié)果是用戶要求按照每周的時(shí)間序列匯總輸出,那么你就要將結(jié)果以周為單位進(jìn)行匯總保存。
●為了達(dá)到這個(gè)目標(biāo),大數(shù)據(jù)系統(tǒng)的數(shù)據(jù)庫建模就要在滿足用例的前提下進(jìn)行。例如,大數(shù)據(jù)系統(tǒng)經(jīng)常會(huì)輸出一些結(jié)構(gòu)化的數(shù)據(jù)表,這樣在展示輸出上就有很大的優(yōu)勢。
●更常見的是,這可能會(huì)這將會(huì)讓用戶感覺到性能問題。例如用戶只需要上周的數(shù)據(jù)匯總結(jié)果,如果在數(shù)據(jù)規(guī)模較大的時(shí)候按照每周來匯總數(shù)據(jù),這樣就會(huì)大大降低數(shù)據(jù)處理能力。
●一些框架提供了大數(shù)據(jù)查詢懶評(píng)價(jià)功能。在數(shù)據(jù)沒有在其他地方被使用時(shí)效果不錯(cuò)。
●實(shí)時(shí)監(jiān)控系統(tǒng)的性能,這樣能夠幫助你預(yù)估作業(yè)的完成時(shí)間。
(部分內(nèi)容來源網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系刪除)