大數(shù)據(jù)背景簡(jiǎn)談

大數(shù)據(jù)的本質(zhì)是單機(jī)容不下的數(shù)據(jù)

本文不會(huì)對(duì)涉及到的具體技術(shù)加以深入探討,僅僅簡(jiǎn)述下個(gè)人理解的大數(shù)據(jù)背景知識(shí)。

單機(jī)時(shí)代 VS 大數(shù)據(jù)時(shí)代

從單機(jī)時(shí)代講起,人們?nèi)粘P枰臄?shù)據(jù)存放在一臺(tái)電腦里綽綽有余,但文件并非整體的存放在一整塊地方,而是分散到硬盤(pán)的各個(gè)磁道上,由文件系統(tǒng)統(tǒng)一管理,所以不需要關(guān)注文件究竟在哪個(gè)扇區(qū)。
切換到大數(shù)據(jù)時(shí)代,數(shù)據(jù)無(wú)法存放在一臺(tái)單機(jī)上,而是分散到成千上萬(wàn)的機(jī)器上,在使用數(shù)據(jù)時(shí),人們只希望像單機(jī)時(shí)代一樣方便,而不是去關(guān)注文件究竟在哪些機(jī)器上、該怎么去取等,由此便衍生出了分布式文件系統(tǒng),在文件系統(tǒng)之上,基于各種各樣大數(shù)據(jù)背景下的需求,慢慢便出現(xiàn)了各式各樣的大數(shù)據(jù)工具,如下圖。

存儲(chǔ)

解決大數(shù)據(jù)問(wèn)題的第一步,便是如何把數(shù)據(jù)存儲(chǔ)下來(lái),只有先存在來(lái),才能再談如何應(yīng)用。目前這方面最火的該是Hadoop項(xiàng)目,由Hadoop構(gòu)建的HDFS支持了大數(shù)據(jù)的存儲(chǔ),使得用戶(hù)不用在關(guān)心具體的存儲(chǔ)細(xì)節(jié),只需像單機(jī)時(shí)代一樣來(lái)使用即可。有了存儲(chǔ)之后,人們便開(kāi)始考慮如何利用大數(shù)據(jù)來(lái)計(jì)算,由此便衍生出了一代計(jì)算引擎。
搭建單機(jī)版Hadoop,請(qǐng)參考http://www.itdecent.cn/p/d09f9d630675

一代計(jì)算引擎

在大數(shù)據(jù)背景下,計(jì)算任務(wù)不可能把所有的待計(jì)算數(shù)據(jù)全load到一臺(tái)機(jī)器的內(nèi)存中來(lái)計(jì)算,所以需要新的計(jì)算模型來(lái)完成大數(shù)據(jù)的計(jì)算任務(wù),由此便衍生出了MapReduce引擎。MapReduce把大數(shù)據(jù)的計(jì)算抽象成了兩個(gè)基本步驟:MapReduce,整個(gè)過(guò)程可以基本理解為由Map任務(wù)在每個(gè)節(jié)點(diǎn)上分別進(jìn)行計(jì)算任務(wù),再由Reduce任務(wù)匯總結(jié)果,簡(jiǎn)單的說(shuō)即為:分散計(jì)算,統(tǒng)一匯總。
舉例說(shuō)明,要統(tǒng)計(jì)某文檔內(nèi)所有單詞的詞頻,Map任務(wù)會(huì)先在各個(gè)節(jié)點(diǎn)上計(jì)算出部分結(jié)果:host1: [hello, 100], [world, 200], host2: [hello, 11], [world, 22]等,Map任務(wù)結(jié)束后,Reduce任務(wù)會(huì)匯總所有的部分結(jié)果并聚合成最終結(jié)果:[hello, 111], [world, 222]等。
MapReduce模型幫助程序員們?cè)砹司唧w的分布式任務(wù)實(shí)現(xiàn),只需要實(shí)現(xiàn)MapReduce任務(wù)的抽象就可以完成分布式下的大數(shù)據(jù)計(jì)算任務(wù),因此收到程序員的一致歡迎。

二代計(jì)算引擎

MapReduce模型本身雖然笨重,但已經(jīng)很強(qiáng)大,足以解決大數(shù)據(jù)下大部分計(jì)算問(wèn)題,但有人問(wèn)了:“能不能更快”,于是便出現(xiàn)了第二代計(jì)算引擎TezSpark,簡(jiǎn)單的理解是,它們把計(jì)算數(shù)據(jù)放在了內(nèi)存中,從而獲取到了更快的速度。

更高的抽象

有了計(jì)算引擎后,程序員們開(kāi)始想了:“能不能不用寫(xiě)代碼也可以執(zhí)行大數(shù)據(jù)計(jì)算”,于是變出現(xiàn)了更高層次的工具Hive、Pig,其中Hive通過(guò)使用SQL的方式實(shí)現(xiàn)了大數(shù)據(jù)計(jì)算任務(wù),可能原來(lái)寫(xiě)百行代碼的任務(wù)如今一句SQL就可以搞定,Pig采用腳本的方式來(lái)實(shí)現(xiàn)大數(shù)據(jù)計(jì)算任務(wù)。這一舉動(dòng)受到了廣泛產(chǎn)品和運(yùn)營(yíng)人員的熱愛(ài),“我不會(huì)編程,但是我會(huì)SQL呀”,于是產(chǎn)品和運(yùn)營(yíng)再也不用去求著程序員小哥哥寫(xiě)代碼了,程序員小哥哥內(nèi)心竊喜。
“我還想更快怎么辦”,于是在二代計(jì)算引擎上也衍生出了類(lèi)似的工具Hive on Tez/ Spark、SparkSQL等。

還能不能更快

“還能不能更快”,能的,原有的計(jì)算繞不開(kāi)的是先把數(shù)據(jù)存儲(chǔ)下來(lái),再執(zhí)行計(jì)算任務(wù),那么能不能在數(shù)據(jù)存儲(chǔ)時(shí)就執(zhí)行計(jì)算呢,由此便出現(xiàn)了流計(jì)算引擎Storm,流計(jì)算在數(shù)據(jù)流入時(shí)便執(zhí)行了計(jì)算任務(wù),因此能更快的獲得計(jì)算結(jié)果,但本身的設(shè)計(jì)也代表它的局限性,如必須提前預(yù)知計(jì)算邏輯,數(shù)據(jù)流過(guò)后變不可回流等,使用時(shí)應(yīng)根據(jù)具體的需求情況按需設(shè)計(jì)方案。

其他

除此之外,
還有KV Store,如Cassandra、HBaseMongoDB等,它們的特點(diǎn)是基本無(wú)法處理復(fù)雜運(yùn)算、基本不能Join, Aggregation,基本沒(méi)有一致性,但是非常非常非常的,如果根據(jù)userId找到userInfo,使用Hadoop可能要遍歷所有文件,但KV Store針對(duì)該類(lèi)操作做了相當(dāng)大的優(yōu)化,足夠達(dá)到很快的速度;
分布式一致性服務(wù)軟件,如zookeeper等;
Hadoop的通用資源管理器,如yarn;
構(gòu)成了大數(shù)據(jù)下的基本背景。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容