版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第4章大數(shù)據(jù)處理演講人2024-08-08目錄4.1大數(shù)據(jù)處理框架4.2大數(shù)據(jù)分布式存儲(chǔ)4.3大數(shù)據(jù)分布式計(jì)算014.1大數(shù)據(jù)處理框架4.1.1主流大數(shù)據(jù)處理框架簡(jiǎn)介大數(shù)據(jù)處理的基本環(huán)節(jié)包含大數(shù)據(jù)存儲(chǔ)與大數(shù)據(jù)分析兩大部分。其中大數(shù)據(jù)存儲(chǔ)包含數(shù)據(jù)采集、存儲(chǔ)和管理,大數(shù)據(jù)分析包含數(shù)據(jù)計(jì)算、挖掘和應(yīng)用。大數(shù)據(jù)技術(shù)是眾多技術(shù)的組合,缺一不可,共同組成大數(shù)據(jù)的處理體系。因此,業(yè)界針對(duì)不同特性的大數(shù)據(jù)及其分析技術(shù),設(shè)計(jì)并構(gòu)建了大數(shù)據(jù)處理框架。大數(shù)據(jù)處理框架集成了各類技術(shù),能夠勝任不同特性的大數(shù)據(jù)存儲(chǔ)與計(jì)算。表4-1給出了代表性的大數(shù)據(jù)處理框架及其提供的大數(shù)據(jù)處理技術(shù)。4.1.1主流大數(shù)據(jù)處理框架簡(jiǎn)介表4-1代表性的大數(shù)據(jù)處理框架及其所提供的大數(shù)據(jù)處理技術(shù)4.1.1主流大數(shù)據(jù)處理框架簡(jiǎn)介批處理大數(shù)據(jù)計(jì)算框架批處理計(jì)算是大數(shù)據(jù)最早的經(jīng)典應(yīng)用場(chǎng)景之一。批處理計(jì)算的需求源于數(shù)據(jù)挖掘在大數(shù)據(jù)場(chǎng)景下的拓展。在傳統(tǒng)小規(guī)模數(shù)據(jù)的分析與挖掘中,通常使用經(jīng)典的數(shù)據(jù)挖掘方法,從數(shù)據(jù)中挖掘出有意義的知識(shí),從而正確的指導(dǎo)生產(chǎn)、生活中的決策。例如:奔馳汽車的生產(chǎn)線通過收集數(shù)據(jù)進(jìn)行分析和挖掘,優(yōu)化生產(chǎn)線提升生產(chǎn)的效率。然而,隨著大數(shù)據(jù)時(shí)代的來臨,傳統(tǒng)數(shù)據(jù)挖掘方法已經(jīng)無法滿足大數(shù)據(jù)場(chǎng)景的需求。通常,在單臺(tái)機(jī)器上設(shè)計(jì)的數(shù)據(jù)挖掘方法通常針對(duì)兆字節(jié)(MB)級(jí),當(dāng)數(shù)據(jù)拓展至十億字節(jié)(GB)級(jí)別時(shí),數(shù)據(jù)挖掘方法所需的時(shí)間將會(huì)呈指數(shù)增長(zhǎng),無法在給定的時(shí)間內(nèi)獲得挖掘結(jié)果。批處理計(jì)算的誕生就是為了解決大數(shù)據(jù)場(chǎng)景下的數(shù)據(jù)分析與挖掘。其中,MapReduce是最具代表性的大數(shù)據(jù)批處理計(jì)算模型。MapReduce支持分布式編程,能夠?qū)鹘y(tǒng)的數(shù)據(jù)分析與挖掘方法擴(kuò)展至并行計(jì)算過程,4.1.1主流大數(shù)據(jù)處理框架簡(jiǎn)介批處理大數(shù)據(jù)計(jì)算框架可用于太字節(jié)(TB)級(jí)海量大數(shù)據(jù)的分析與挖掘。實(shí)際上,MapReduce將復(fù)雜的數(shù)據(jù)分析與挖掘任務(wù),抽象化成Map函數(shù)和Reduce函數(shù),數(shù)據(jù)分析與挖掘人員可以輕松將所編寫的方法拓展至并行計(jì)算框架,并運(yùn)行在分布式系統(tǒng)上完成海量大數(shù)據(jù)的計(jì)算。MapReduce批處理計(jì)算模型基于磁盤讀寫海量大數(shù)據(jù),因此受到磁盤I/O瓶頸的影響,具有較大的時(shí)延性。為了解決高時(shí)延問題,SparkCore批處理框架則基于分布式內(nèi)存讀寫海量大數(shù)據(jù),具有較低延遲,能夠進(jìn)行更高效率的分布式批處理計(jì)算任務(wù)。4.1.1主流大數(shù)據(jù)處理框架簡(jiǎn)介流式大數(shù)據(jù)計(jì)算框架流式大數(shù)據(jù)是大量、快速、時(shí)變的以“流水”形式持續(xù)到達(dá)系統(tǒng)的大數(shù)據(jù)的統(tǒng)稱。近年來,隨著物聯(lián)網(wǎng)和人工智能技術(shù)的興起,以傳感器為代表的大數(shù)據(jù)采集形成了流式大數(shù)據(jù),如網(wǎng)絡(luò)監(jiān)控?cái)z像頭、Web2.0應(yīng)用視頻流等。流式大數(shù)據(jù)的來源多種多樣,與傳統(tǒng)靜態(tài)大數(shù)據(jù)的區(qū)別包含三個(gè)方面:(1)始終在線,持續(xù)流動(dòng):新數(shù)據(jù)像“水流”一樣源源不斷生成,很少會(huì)出現(xiàn)數(shù)據(jù)不足的情況,但是對(duì)流式大數(shù)據(jù)的分析要強(qiáng)調(diào)實(shí)時(shí)性、突發(fā)性、無序性和易失性;(2)結(jié)構(gòu)松散,隨意變動(dòng):流式大數(shù)據(jù)的結(jié)構(gòu)較為松散,其原因在于流式大數(shù)據(jù)環(huán)境對(duì)數(shù)據(jù)結(jié)構(gòu)和類型要求不嚴(yán)格,另外多數(shù)流式大數(shù)據(jù)處于新興行業(yè),可能存在不同的數(shù)據(jù)格式或者隨時(shí)出現(xiàn)數(shù)據(jù)流終端的可能;4.1.1主流大數(shù)據(jù)處理框架簡(jiǎn)介流式大數(shù)據(jù)計(jì)算框架(3)高基數(shù)存儲(chǔ)特性:與批處理計(jì)算任務(wù)可以重復(fù)多次不同,流式大數(shù)據(jù)的計(jì)算往往僅能進(jìn)行一次,對(duì)于存儲(chǔ)環(huán)境要求更為嚴(yán)格,對(duì)大規(guī)模實(shí)時(shí)持續(xù)到達(dá)系統(tǒng)的數(shù)據(jù)讀寫性能要求更高。
由于流式大數(shù)據(jù)呈現(xiàn)大規(guī)模實(shí)時(shí)持續(xù)到達(dá)的特性,隱含在大數(shù)據(jù)中有價(jià)值的知識(shí)將會(huì)伴隨著時(shí)間的流逝而消失。針對(duì)這類在時(shí)間分辨率和數(shù)量上接近于無限的動(dòng)態(tài)大數(shù)據(jù),在進(jìn)行分析和計(jì)算時(shí)需要給出秒級(jí)甚至亞秒級(jí)響應(yīng)。因此,流式大數(shù)據(jù)計(jì)算框架要求有實(shí)時(shí)分析能力,并且能夠針對(duì)高基數(shù)存儲(chǔ)、結(jié)構(gòu)松散且持續(xù)到達(dá)的數(shù)據(jù)流進(jìn)行計(jì)算,給出有價(jià)值的分析結(jié)果。目前,由于流式大數(shù)據(jù)在商業(yè)互聯(lián)網(wǎng)活動(dòng)中呈現(xiàn)占比越來越高的趨勢(shì),大型企業(yè)已經(jīng)開發(fā)了用于企業(yè)級(jí)流式大數(shù)據(jù)處理的框架。例如:阿里巴巴開發(fā)了銀河流數(shù)據(jù)計(jì)算平臺(tái),百度開發(fā)了DStream流式大數(shù)據(jù)計(jì)算框架。4.1.1主流大數(shù)據(jù)處理框架簡(jiǎn)介流式大數(shù)據(jù)計(jì)算框架在開源流式大數(shù)據(jù)框架中,也涌現(xiàn)了成熟、可靠的框架,例如Storm流式大數(shù)據(jù)計(jì)算框架,可以輕松、可靠的處理各種結(jié)構(gòu)的數(shù)據(jù)流,每秒給出百萬級(jí)數(shù)據(jù)計(jì)算結(jié)果響應(yīng)。另外,依托于Spark成熟的體系架構(gòu),架構(gòu)在其上的SparkStreaming流式計(jì)算框架,也具有快速處理流式大數(shù)據(jù)、給出亞秒級(jí)響應(yīng)的能力。4.1.1主流大數(shù)據(jù)處理框架簡(jiǎn)介圖式大數(shù)據(jù)計(jì)算框架“圖數(shù)據(jù)”的基本元素為“圖(Graph)”,最基本的圖結(jié)構(gòu)由頂點(diǎn)和邊組成,每個(gè)頂點(diǎn)代表一個(gè)實(shí)體(事務(wù)、類別或數(shù)據(jù)),每條邊代表兩個(gè)實(shí)體之間的關(guān)聯(lián)關(guān)系。兩個(gè)實(shí)體之間的關(guān)系可以用有向邊或無向邊表示。如圖4-1所示,坐在教室中的三位學(xué)生分別表示一個(gè)節(jié)點(diǎn),三位同學(xué)之間的關(guān)系為邊,關(guān)系可以被廣泛的定義:同學(xué)關(guān)系、同桌關(guān)系、合作關(guān)系等。由海量圖中的頂點(diǎn)和關(guān)系組成的大數(shù)據(jù)稱為圖式大數(shù)據(jù),圖式大數(shù)據(jù)的計(jì)算一般使用基于圖的方法分析圖中的頂點(diǎn)和連接關(guān)系,從中挖掘出有意義的知識(shí)。通常來講,圖式大數(shù)據(jù)的計(jì)算包括:查詢圖數(shù)據(jù)、統(tǒng)計(jì)圖數(shù)據(jù)基本信息、可視化圖數(shù)據(jù),以及將圖數(shù)據(jù)合并到數(shù)據(jù)挖掘任務(wù)中,進(jìn)行有意義的知識(shí)挖掘。4.1.1主流大數(shù)據(jù)處理框架簡(jiǎn)介圖式大數(shù)據(jù)計(jì)算框架4-1圖數(shù)據(jù)的基本構(gòu)成結(jié)構(gòu)4.1.1主流大數(shù)據(jù)處理框架簡(jiǎn)介圖式大數(shù)據(jù)計(jì)算框架當(dāng)前,隨著社交網(wǎng)絡(luò)、智能信息系統(tǒng)的興起,圖式大數(shù)據(jù)的計(jì)算被應(yīng)用到許多場(chǎng)景:(1)社交網(wǎng)絡(luò)分析:在Web2.0時(shí)代的社交平臺(tái)中,社交網(wǎng)絡(luò)是常見的圖式大數(shù)據(jù),代表中不同個(gè)體與組織之間的社會(huì)關(guān)系,通過對(duì)其中的大數(shù)據(jù)計(jì)算獲得復(fù)雜的社交網(wǎng)絡(luò)關(guān)系。例如:微博使用圖式數(shù)據(jù)庫(kù)管理社交網(wǎng)絡(luò)關(guān)系,實(shí)現(xiàn)好友推薦等;(2)電子商務(wù)推薦:電子商務(wù)場(chǎng)景中的圖式大數(shù)據(jù)為用戶和商品,其中不同用戶、不同商品為節(jié)點(diǎn),用戶與用戶、用戶與商品以及商品與商品之間的關(guān)系組成了圖式大數(shù)據(jù)。針對(duì)用戶與商品之間的圖網(wǎng)絡(luò),可以有效分析購(gòu)物偏好。例如:淘寶使用圖式大數(shù)據(jù)實(shí)現(xiàn)用戶感興趣的商品推薦;4.1.1主流大數(shù)據(jù)處理框架簡(jiǎn)介圖式大數(shù)據(jù)計(jì)算框架(3)交通網(wǎng)絡(luò)應(yīng)用:交通網(wǎng)絡(luò)的形式多種多樣,例如:飛機(jī)、高鐵、地鐵或公交車等。交通網(wǎng)絡(luò)可以抽象成站點(diǎn)和乘客的圖式大數(shù)據(jù),站點(diǎn)與站點(diǎn)之間、站點(diǎn)與乘客之間的關(guān)系能夠組成有意義的圖式大數(shù)據(jù),通過對(duì)其挖掘優(yōu)化交通線路,提升乘客舒適度。實(shí)際上,批處理計(jì)算框架具有多階段、粗粒度計(jì)算特性,流計(jì)算框架則具有單階段、快速計(jì)算特性,都無法表達(dá)圖式大數(shù)據(jù)的稀疏架構(gòu)、細(xì)粒度等特征,無法直接應(yīng)用到圖式大數(shù)據(jù)計(jì)算。因此,針對(duì)海量圖式大數(shù)據(jù),需要設(shè)計(jì)全新的基于圖的分布式計(jì)算框架,將傳統(tǒng)基于圖的計(jì)算方法擴(kuò)展至分布式場(chǎng)景,用于圖式大數(shù)據(jù)的計(jì)算。目前,已有許多圖式大數(shù)據(jù)計(jì)算框架不斷涌現(xiàn)。例如,Pregel是基于批量同步并行模型(BSP)實(shí)現(xiàn)的并行圖式大數(shù)據(jù)計(jì)算框架,通過分布式、可擴(kuò)展且具有容錯(cuò)機(jī)制的分布式平臺(tái),構(gòu)建大型圖的遍歷、最短路徑、最大流等常用的圖計(jì)算方法,取得了不錯(cuò)的效果。另外,依托于Spark成熟的體系架構(gòu),架構(gòu)在其上的SparkGraphX圖式計(jì)算框架,也具有快速處理大型圖式大數(shù)據(jù)的能力。4.1.1主流大數(shù)據(jù)處理框架簡(jiǎn)介大數(shù)據(jù)實(shí)時(shí)查詢分析框架實(shí)時(shí)查詢分析是數(shù)據(jù)分析與計(jì)算的最重要任務(wù)之一。在傳統(tǒng)的數(shù)據(jù)存儲(chǔ)與管理中,數(shù)據(jù)通常存儲(chǔ)在關(guān)系型數(shù)據(jù)庫(kù)中,依靠關(guān)系型數(shù)據(jù)庫(kù)的結(jié)構(gòu)化查詢語(yǔ)言(SQL)的強(qiáng)大檢索能力,可以快速進(jìn)行兆字節(jié)(MB)級(jí)數(shù)據(jù)的實(shí)時(shí)查詢分析。然而,在大數(shù)據(jù)時(shí)代背景下,若依然將太字節(jié)(TB)級(jí)大數(shù)據(jù)存儲(chǔ)在關(guān)系型數(shù)據(jù)庫(kù)中,則很難直接通過SQL獲得秒級(jí)的響應(yīng)。針對(duì)大數(shù)據(jù)實(shí)時(shí)查詢分析需求,一些實(shí)時(shí)或準(zhǔn)實(shí)時(shí)響應(yīng)的大數(shù)據(jù)查詢分析框架應(yīng)運(yùn)而生。大型企業(yè)已經(jīng)開發(fā)了用于企業(yè)級(jí)大數(shù)據(jù)實(shí)時(shí)查詢分析框架。例如:Google開發(fā)了Dremel實(shí)時(shí)交互查詢系統(tǒng),通過多級(jí)樹狀尋址方法和列式存儲(chǔ)結(jié)構(gòu),做到了對(duì)千萬億字節(jié)(PB)級(jí)數(shù)據(jù)的秒級(jí)查詢響應(yīng)。4.1.1主流大數(shù)據(jù)處理框架簡(jiǎn)介大數(shù)據(jù)實(shí)時(shí)查詢分析框架在開源大數(shù)據(jù)實(shí)時(shí)查詢分析框架中,也涌現(xiàn)了快速、準(zhǔn)確的實(shí)時(shí)查詢框架。在Hadoop強(qiáng)大的分布式存儲(chǔ)架構(gòu)基礎(chǔ)上,研究人員開發(fā)出了列式存儲(chǔ)結(jié)構(gòu)的HBase數(shù)據(jù)庫(kù),可實(shí)現(xiàn)實(shí)時(shí)快速的大數(shù)據(jù)查詢?nèi)蝿?wù);此外,為了實(shí)現(xiàn)大數(shù)據(jù)挖掘任務(wù)的實(shí)時(shí)響應(yīng),研究人員還開發(fā)出了Hive數(shù)據(jù)倉(cāng)庫(kù),可實(shí)現(xiàn)快速的大數(shù)據(jù)挖掘分析任務(wù)。同樣,依托于Spark成熟的體系架構(gòu),架構(gòu)在其上的SparkSQL則實(shí)現(xiàn)了海量大數(shù)據(jù)上的關(guān)系型查詢框架,做到了海量大數(shù)據(jù)的實(shí)時(shí)查詢?nèi)蝿?wù)。4.1.1主流大數(shù)據(jù)處理框架簡(jiǎn)介混合大數(shù)據(jù)計(jì)算框架當(dāng)前,大數(shù)據(jù)已經(jīng)進(jìn)入全新的時(shí)代,既有靜態(tài)存儲(chǔ)的大數(shù)據(jù)需要進(jìn)行批處理計(jì)算任務(wù),又有以物聯(lián)網(wǎng)為代表的實(shí)時(shí)流式大數(shù)據(jù)需要進(jìn)行流式處理計(jì)算任務(wù),還有以Web2.0時(shí)代為代表的社交網(wǎng)絡(luò)圖數(shù)據(jù)需要進(jìn)行圖式處理計(jì)算任務(wù),以及在大數(shù)據(jù)場(chǎng)景下的實(shí)時(shí)查詢?nèi)蝿?wù),因此在Hadoop基礎(chǔ)上逐漸發(fā)展出了混合大數(shù)據(jù)計(jì)算框架,其中最具代表性的是Spark框架。如今,Spark框架集成了上述所有任務(wù)的實(shí)現(xiàn)方式,構(gòu)建出了“一體適用”的混合大數(shù)據(jù)計(jì)算框架,能夠適應(yīng)不同時(shí)期的大數(shù)據(jù)計(jì)算任務(wù)。4.1.2批處理框架HadoopHadoop是最早成功構(gòu)建大數(shù)據(jù)批處理的計(jì)算框架,起源于Apache軟件基金會(huì)的子項(xiàng)目Lucene下的Nutch。該項(xiàng)目早期的設(shè)計(jì)目標(biāo)是構(gòu)建大型開源的網(wǎng)絡(luò)搜索引擎,實(shí)現(xiàn)網(wǎng)頁(yè)抓取、索引、查詢等功能。隨著項(xiàng)目的不斷發(fā)展,逐漸出現(xiàn)了一個(gè)亟待解決的瓶頸:隨著網(wǎng)頁(yè)數(shù)量呈指數(shù)級(jí)增長(zhǎng)時(shí),如何解決對(duì)數(shù)億級(jí)別的網(wǎng)頁(yè)大數(shù)據(jù)構(gòu)建存儲(chǔ)、索引和查詢功能。與此同時(shí),Google公司也在探索企業(yè)級(jí)的數(shù)億級(jí)別網(wǎng)頁(yè)存儲(chǔ)和索引,并于2003—2004年發(fā)表了三篇論文提供了相應(yīng)的解決方案:(1)分布式文件系統(tǒng)(GoogleFileSystem,GFS),用于海量網(wǎng)頁(yè)大數(shù)據(jù)的存儲(chǔ);(2)分布式計(jì)算框架(GoogleMapReduce),用于海量網(wǎng)頁(yè)的索引和計(jì)算;4.1.2批處理框架Hadoop(3)分布式結(jié)構(gòu)化存儲(chǔ)系統(tǒng)(GoogleBigTable),用于海量網(wǎng)頁(yè)大數(shù)據(jù)的快速檢索;基于Google對(duì)于海量大數(shù)據(jù)網(wǎng)頁(yè)存儲(chǔ)、檢索和計(jì)算的框架,Lucene+Nutch項(xiàng)目創(chuàng)始人DougCutting實(shí)現(xiàn)了開源分布式文件系統(tǒng)、分布式計(jì)算框架和分布式結(jié)構(gòu)化存儲(chǔ)系統(tǒng),并將所實(shí)現(xiàn)的系統(tǒng)從Nutch項(xiàng)目中剝離出來,成為了獨(dú)立的項(xiàng)目框架并命名為Hadoop。在Apache基金會(huì)的支持下,Hadoop項(xiàng)目在2008年成為頂級(jí)項(xiàng)目,并得到了快速的發(fā)展。表4-2給出了ApacheHadoop項(xiàng)目的創(chuàng)建到發(fā)展的關(guān)鍵時(shí)間節(jié)點(diǎn)。1.2批處理框架Hadoop表4-2ApacheHadoop項(xiàng)目的發(fā)展關(guān)鍵時(shí)間節(jié)點(diǎn)4.1.2批處理框架HadoopHadoop批處理框架是一個(gè)對(duì)海量大數(shù)據(jù)進(jìn)行分布式存儲(chǔ)和計(jì)算的軟件框架,采用Java語(yǔ)言編寫,具有很好的跨平臺(tái)特性,且能夠部署到廉價(jià)的計(jì)算機(jī)集群中。面向海量增長(zhǎng)的大數(shù)據(jù)應(yīng)用場(chǎng)景,Hadoop框架能夠提供可靠、高效、準(zhǔn)確且具有良好伸縮性的大數(shù)據(jù)存儲(chǔ)和計(jì)算,其主要優(yōu)點(diǎn)包括:(1)可靠性高:采用冗余數(shù)據(jù)存儲(chǔ)方式,每份數(shù)據(jù)擁有多個(gè)副本存儲(chǔ)在不同存儲(chǔ)設(shè)備中,當(dāng)某個(gè)副本出現(xiàn)故障時(shí)能夠快速修復(fù)、還原,具有較高的大數(shù)據(jù)存儲(chǔ)可靠性;(2)擴(kuò)展性好:采用分布式架構(gòu)進(jìn)行大數(shù)據(jù)的存儲(chǔ),底層僅采用廉價(jià)存儲(chǔ)設(shè)備組成分布式架構(gòu),對(duì)其進(jìn)行容量擴(kuò)展僅需增加廉價(jià)存儲(chǔ)設(shè)備,具有不錯(cuò)的可擴(kuò)展特性;4.1.2批處理框架Hadoop(3)效率高:采用MapReduce分布式計(jì)算技術(shù),將計(jì)算任務(wù)分配到不同機(jī)器中并行運(yùn)行,并將計(jì)算結(jié)果匯總到總臺(tái),具有較高的計(jì)算效率;(4)穩(wěn)定性佳:分別采用冗余式多副本存儲(chǔ)提升存儲(chǔ)的穩(wěn)定,以及采用負(fù)載均衡的機(jī)制自動(dòng)將任務(wù)分配給空閑資源,并自動(dòng)將失敗任務(wù)重新分配,具有極佳的穩(wěn)定性;(5)成本低:一方面Hadoop的底層存儲(chǔ)、計(jì)算采用廉價(jià)計(jì)算機(jī)集群,另一方面Hadoop穩(wěn)定運(yùn)行在Linux操作系統(tǒng),且支持多種語(yǔ)言的操作,如C++、Java和Python等。
經(jīng)過近15年的發(fā)展,Hadoop項(xiàng)目由早期的分布式存儲(chǔ)和分布式計(jì)算框架,經(jīng)過多個(gè)版本迭代逐漸形成了批處理框架的生態(tài)體系,對(duì)不同格式、結(jié)構(gòu)的大數(shù)據(jù)都有很好的支持,針對(duì)各種應(yīng)用場(chǎng)景的批處理計(jì)算都有不錯(cuò)的方案,同時(shí)在資源管理和分配上也有良好支撐。表4-3給出了批處理框架Hadoop的關(guān)鍵版本更迭情況。4.1.2批處理框架Hadoop表4-3Hadoop的關(guān)鍵版本更迭情況4.1.2批處理框架Hadoop實(shí)際上,Hadoop項(xiàng)目源于Apache基金會(huì),該基金會(huì)的宗旨是構(gòu)建免費(fèi)、開源的軟件項(xiàng)目。因此,經(jīng)過多年版本更迭,在Hadoop在核心組件(HadoopCommon、分布式文件系統(tǒng)、Mapreduce分布式計(jì)算模型、通用資源協(xié)調(diào)系統(tǒng)YARN)基礎(chǔ)上,逐步發(fā)展成Hadoop生態(tài)系統(tǒng),如圖4-2所示。Hadoop生態(tài)系統(tǒng)是通過組合現(xiàn)有的各個(gè)功能組件,共同構(gòu)建和提供各類場(chǎng)景中大數(shù)據(jù)存儲(chǔ)和分析問題的解決方案。4.1.2批處理框架Hadoop圖4-2Hadoop生態(tài)系統(tǒng)4.1.2批處理框架Hadoop在Hadoop生態(tài)系統(tǒng)中,各類組件共同工作,提供各類數(shù)據(jù)的采集、分析、存儲(chǔ)和維護(hù)等服務(wù),重要組件的功能為:(1)HDFS:Hadoop分布式文件系統(tǒng),用于靜態(tài)大數(shù)據(jù)的分布式存儲(chǔ),是核心組件之一;(2)MapReudce:分布式計(jì)算框架,用于大數(shù)據(jù)的分布式計(jì)算,是核心組件之一;(3)YARN:Hadoop通用資源協(xié)調(diào)系統(tǒng),可以為上層應(yīng)用提供統(tǒng)一的資源管理和調(diào)度,能夠在集群利用率、資源統(tǒng)一管理和數(shù)據(jù)共享方面帶來巨大便利,是核心組件之一。(4)HBase:Hadoop分布式的、面向列的NoSQL數(shù)據(jù)庫(kù),適合于非結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ),底層基于HDFS實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ),具有較高的可靠性、可伸縮性和性能;(5)Hive:Hadoop分布式數(shù)據(jù)倉(cāng)庫(kù),用于對(duì)海量大數(shù)據(jù)進(jìn)行提取、轉(zhuǎn)化加載,能夠使用MapReduce邏輯構(gòu)建快速的數(shù)據(jù)查詢和分析服務(wù),提供類似于SQL的Hive-QL查詢語(yǔ)句;4.1.2批處理框架Hadoop(6)Pig:定義在Hadoop之上的高級(jí)過程語(yǔ)言,能夠使用簡(jiǎn)單的PigLatin語(yǔ)法構(gòu)建MapReduce任務(wù),實(shí)現(xiàn)大型半結(jié)構(gòu)化數(shù)據(jù)的查詢和分析;(7)Drill:低延遲的分布式海量大數(shù)據(jù)交互式查詢引擎,能夠支持結(jié)構(gòu)化、半結(jié)構(gòu)化以及嵌套數(shù)據(jù)的查詢和分析,并兼容SQL語(yǔ)法,性能較高;(8)Mahout&SparkMLlib:開源機(jī)器學(xué)習(xí)庫(kù),實(shí)現(xiàn)了包括聚類、分類、推薦過濾和頻繁子集挖掘的算法,并通過Hadoop&Spark進(jìn)行算法的分布式實(shí)現(xiàn),能夠有效地?cái)U(kuò)展至分布式計(jì)算框架中;(9)Spark:專為大規(guī)模數(shù)據(jù)處理而設(shè)計(jì)的快速、通用計(jì)算引擎,基于內(nèi)存的分布式查詢和計(jì)算,擁有更高的效率,是Hadoop的補(bǔ)充。目前,Spark已經(jīng)逐漸發(fā)展出支持各種大數(shù)據(jù)分析與計(jì)算的模型,并且開放多種編程接口,實(shí)用性較強(qiáng);4.1.2批處理框架Hadoop(10)Oozie:用于管理Hadoop任務(wù)的工作流調(diào)度系統(tǒng);(11)Flume:分布式、高可用性的數(shù)據(jù)采集、聚合系統(tǒng),能夠?qū)adoop集群運(yùn)行過程中的海量日志大數(shù)據(jù)匯總到中央存儲(chǔ)系統(tǒng)中;(12)Kafka:自動(dòng)化數(shù)據(jù)采集工具,支持高吞吐、分布式的消息訂閱,可用于處理消費(fèi)者在網(wǎng)站中的所有動(dòng)作流,例如網(wǎng)頁(yè)瀏覽、搜索和其他行為等;(13)Storm:流式計(jì)算框架,適合于流式大數(shù)據(jù)的分析與計(jì)算;(14)Solr&Lucene:提供在分布式文件系統(tǒng)中進(jìn)行全文搜索的工具,通過豐富的查詢語(yǔ)言提供高效率的搜索引擎,同時(shí)實(shí)現(xiàn)了可配置、可擴(kuò)展的功能;(15)Sqoop:數(shù)據(jù)傳遞工具,支持傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)(如:MySQL、SQLSever)與分布式數(shù)據(jù)管理系統(tǒng)(HDFS、Hive)進(jìn)行數(shù)據(jù)傳遞,使Hadoop能夠快速獲取關(guān)系型數(shù)據(jù)庫(kù)中的數(shù)據(jù);4.1.2批處理框架Hadoop(16)ZooKeeper:Hadoop分布式應(yīng)用程序協(xié)調(diào)服務(wù)系統(tǒng),能夠?yàn)榉植际降拇鎯?chǔ)和計(jì)算任務(wù)提供一致性服務(wù),包括配置維護(hù)、域名服務(wù)、分布式同步和組服務(wù)等;(17)Ambari:基于Web的Hadoop集群配置、管理和監(jiān)控系統(tǒng),支持Hadoop集群的快速可視化地安裝、運(yùn)維和監(jiān)視,極大的降低了Hadoop集群安裝與配置的難度;4.1.3流處理框架Storm隨著物聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,逐漸興起以傳感器實(shí)時(shí)數(shù)據(jù)為基礎(chǔ)的數(shù)據(jù)密集型應(yīng)用,在交通監(jiān)控、金融證券、氣象測(cè)控和生產(chǎn)制造等領(lǐng)域中具有廣泛應(yīng)用,稱為流處理。流處理面向的是流數(shù)據(jù),即一組順序、大量、快速、連續(xù)到達(dá)的序列數(shù)據(jù)。一般情況下,流數(shù)據(jù)可被視為一個(gè)隨時(shí)間延續(xù)無限增長(zhǎng)的動(dòng)態(tài)數(shù)據(jù)集合,又被稱為“動(dòng)態(tài)大數(shù)據(jù)”。相對(duì)于流數(shù)據(jù),傳統(tǒng)大數(shù)據(jù)可被稱為“靜態(tài)大數(shù)據(jù)”,即所有的歷史大數(shù)據(jù)都“靜止”的存儲(chǔ)在分布式文件系統(tǒng)、分布式數(shù)據(jù)庫(kù)或分布式數(shù)據(jù)倉(cāng)庫(kù)中,研究者可利用數(shù)據(jù)分析和計(jì)算工具,從存儲(chǔ)的海量大數(shù)據(jù)中挖掘出有意義的知識(shí),對(duì)“靜態(tài)大數(shù)據(jù)”的處理稱為“批處理”。如今,流數(shù)據(jù)隨處可見,如圖4-3所示,數(shù)據(jù)像流水一樣持續(xù)到達(dá),大量的應(yīng)用具有這樣的特點(diǎn),例如:4.1.3流處理框架Storm(1)交通工具、工業(yè)設(shè)備、氣象儀器等將傳感器的數(shù)據(jù)持續(xù)發(fā)送給服務(wù)器,由服務(wù)器進(jìn)行性能監(jiān)測(cè),提前預(yù)測(cè)交通事故、設(shè)備故障以及惡劣天氣等;11(2)金融證券市場(chǎng)中的交易數(shù)據(jù)符合流數(shù)據(jù)特點(diǎn),當(dāng)交易市場(chǎng)開啟時(shí)將會(huì)源源不斷產(chǎn)生交易數(shù)據(jù),由服務(wù)器進(jìn)行監(jiān)測(cè),計(jì)算風(fēng)險(xiǎn)價(jià)值,根據(jù)實(shí)時(shí)交易數(shù)據(jù)平衡投資組合;22(3)用于定位功能的收集使用高德地圖導(dǎo)航路徑,手機(jī)將實(shí)時(shí)的位置信息持續(xù)發(fā)送給服務(wù)器,由服務(wù)器分析位置信息的變化,從而優(yōu)化導(dǎo)航路徑;33(4)淘寶“雙十一”促銷活動(dòng),根據(jù)實(shí)時(shí)在線的交易數(shù)據(jù),分析不同類別的商品銷售情況和廣告點(diǎn)擊情況,從而動(dòng)態(tài)調(diào)整廣告樣式、文案,提升銷售額。444.1.3流處理框架Storm針對(duì)流數(shù)據(jù)的處理則稱為“流處理”,其處理的數(shù)據(jù)記錄為流數(shù)據(jù)最小組成單元。表4-4給出了流數(shù)據(jù)與靜態(tài)大數(shù)據(jù)的對(duì)比。圖4-3常見的流數(shù)據(jù)和流處理過程(以騰訊云為例)4.1.3流處理框架Storm表4-4流數(shù)據(jù)與靜態(tài)大數(shù)據(jù)的對(duì)比4.1.3流處理框架Storm根據(jù)流數(shù)據(jù)的特點(diǎn)可知,流處理對(duì)應(yīng)的計(jì)算方法稱為實(shí)時(shí)計(jì)算。圖4-4所示,給出了批處理和流處理的示意圖。我們可知兩類大數(shù)據(jù)處理的區(qū)別:(1)與批處理逐漸積累靜態(tài)的大數(shù)據(jù)不同,流處理將大數(shù)據(jù)平攤至每個(gè)時(shí)間節(jié)點(diǎn),連續(xù)進(jìn)行小批量的數(shù)據(jù)傳輸和處理,數(shù)據(jù)實(shí)時(shí)地持續(xù)流動(dòng),計(jì)算完成后的數(shù)據(jù)直接丟棄;(2)以分布式數(shù)據(jù)庫(kù)為例,批處理維護(hù)的是一張張數(shù)據(jù)表,對(duì)數(shù)據(jù)表實(shí)施計(jì)算邏輯,且支持反復(fù)修改計(jì)算邏輯,挖掘有意義的知識(shí);相反,流計(jì)算實(shí)現(xiàn)需定義好計(jì)算邏輯,提交到流處理框架后,在處理進(jìn)程中無法更改計(jì)算邏輯;4.1.3流處理框架Storm圖4-4批處理與流處理過程對(duì)比4.1.3流處理框架Storm(3)批處理每次將所需的大數(shù)據(jù)一次性提交給計(jì)算邏輯,對(duì)計(jì)算結(jié)果返回的時(shí)間要求較低,流處理則是每次小批量計(jì)算后,將結(jié)果立即顯示在實(shí)時(shí)在線系統(tǒng)中,要求在秒級(jí)內(nèi)返回計(jì)算結(jié)果。
如上所述,流處理面向的流數(shù)據(jù)格式復(fù)雜、來源廣泛,且單點(diǎn)時(shí)間內(nèi)的數(shù)據(jù)量巨大,對(duì)實(shí)時(shí)計(jì)算帶來了新的挑戰(zhàn)。在此背景下,大數(shù)據(jù)技術(shù)逐漸發(fā)展出一門新的學(xué)科——流計(jì)算。流計(jì)算的基本理念為流數(shù)據(jù)的單點(diǎn)價(jià)值隨著時(shí)間的流逝而快速下降,因此面對(duì)如水流到達(dá)的流式大數(shù)據(jù),流計(jì)算應(yīng)該立即執(zhí)行計(jì)算邏輯,而不是存儲(chǔ)到文件系統(tǒng)中。因此,流計(jì)算需要設(shè)計(jì)低延遲、高可靠且滿足擴(kuò)展特性的計(jì)算引擎,其設(shè)計(jì)需滿足如下需求:4.1.3流處理框架Storm(1)數(shù)據(jù)規(guī)模:隨著物聯(lián)網(wǎng)技術(shù)的提升,高清攝像頭、超高維建模引擎的出現(xiàn),為單點(diǎn)流數(shù)據(jù)帶來了全新的挑戰(zhàn),流計(jì)算引擎在單點(diǎn)時(shí)間內(nèi)至少需要面對(duì)TB級(jí)大數(shù)據(jù)規(guī)模;(2)計(jì)算性能:支持高性能處理單點(diǎn)大數(shù)據(jù),每秒處理百萬級(jí)條大數(shù)據(jù),且保持較低的延遲,計(jì)算結(jié)果在毫秒或秒級(jí)呈現(xiàn);(3)分布式:支持大數(shù)據(jù)存儲(chǔ)的基本分布式架構(gòu),在計(jì)算機(jī)集群上構(gòu)建分布式流計(jì)算框架,利用集群的存儲(chǔ)和計(jì)算優(yōu)勢(shì),支持計(jì)算機(jī)集群的平滑擴(kuò)展;(4)可靠性:針對(duì)單點(diǎn)的流式計(jì)算,要求計(jì)算結(jié)果具有不錯(cuò)的可靠性;(5)易用性:支持快速的開發(fā)與部署,具體框架實(shí)現(xiàn)邏輯對(duì)使用者透明,支持常見編程語(yǔ)言接口,且具有較強(qiáng)的可移植性。4.1.3流處理框架StormHadoop框架針對(duì)大數(shù)據(jù)的存儲(chǔ)和計(jì)算分別實(shí)現(xiàn)了HDFS和MapReduce模型,其中MapReduce適用于批處理的計(jì)算,若直接將MapReduce模型嵌入到流計(jì)算框架中,針對(duì)單點(diǎn)的流數(shù)據(jù)片段實(shí)施計(jì)算,將會(huì)造成如下的問題:(1)流數(shù)據(jù)片段之間存在前后聯(lián)系,MapReduce在計(jì)算當(dāng)前流數(shù)據(jù)片段時(shí),需考慮前序的多個(gè)流數(shù)據(jù)片段,增加了任務(wù)的復(fù)雜性和計(jì)算開銷;(2)為滿足流計(jì)算的實(shí)時(shí)性,需修改MapReduce中將緩存寫入磁盤的操作,增加MapReduce的開發(fā)復(fù)雜性,也增加了使用難度;4.1.3流處理框架Storm(3)降低了流計(jì)算的易用性,任意的流計(jì)算任務(wù)都必須借助于MapReduce實(shí)現(xiàn)。隨著流數(shù)據(jù)的不斷增長(zhǎng),由于Hadoop框架不再適用于流計(jì)算,國(guó)內(nèi)外業(yè)界已經(jīng)涌現(xiàn)出了許多適合流數(shù)據(jù)和流計(jì)算的框架,具體表4-5所示。限于篇幅,本節(jié)重點(diǎn)介紹Storm流處理框架,更多其他流處理框架請(qǐng)讀者查閱資料。Storm框架最早由Twitter開發(fā)并于2011年在GitHub上開源,2013年進(jìn)入Apache成為孵化項(xiàng)目,2014年9月成為Apache頂級(jí)項(xiàng)目。Storm框架采用分布式架構(gòu)實(shí)現(xiàn)實(shí)時(shí)的大數(shù)據(jù)處理,被稱為“實(shí)時(shí)版Hadoop”。4.1.3流處理框架Storm表4-5常見的流處理框架4.1.3流處理框架Storm在以往的互聯(lián)網(wǎng)應(yīng)用開發(fā)中,開發(fā)人員一方面要設(shè)計(jì)數(shù)據(jù)的邏輯計(jì)算,另一方面還需要考慮數(shù)據(jù)的實(shí)時(shí)流轉(zhuǎn)、交互和分布等問題,二者往往無法兼顧。然而,Storm框架可以高效、可靠地處理流數(shù)據(jù),支持多種編程語(yǔ)言接口,并且能夠方便地與分布式數(shù)據(jù)庫(kù)系統(tǒng)整合,解決了互聯(lián)網(wǎng)開發(fā)時(shí)的流數(shù)據(jù)處理問題。在Storm框架基礎(chǔ)上,開發(fā)人員可快速搭建可靠、易用的實(shí)時(shí)流計(jì)算邏輯,并配合數(shù)據(jù)庫(kù)實(shí)現(xiàn)功能強(qiáng)大的流式大數(shù)據(jù)處理。如今,主流互聯(lián)網(wǎng)應(yīng)用開發(fā)都包含批處理和流處理兩類框架,從而解決開發(fā)人員在邏輯計(jì)算、實(shí)時(shí)數(shù)據(jù)交互上的難題,如圖4-5所示。4.1.3流處理框架Storm圖4-5主流互聯(lián)網(wǎng)應(yīng)用開發(fā)的大數(shù)據(jù)處理邏輯架構(gòu)4.1.3流處理框架StormStorm框架采用clojure語(yǔ)言開發(fā),同時(shí)支持Java和Python編程接口,具有如下特點(diǎn):(1)編程模型簡(jiǎn)單:Storm框架為實(shí)時(shí)的大數(shù)據(jù)計(jì)算提供了簡(jiǎn)單的編程接口,與Hadoop一樣,使用者可直接使用編程接口實(shí)現(xiàn)并行性,降低了開發(fā)的難度;(2)可擴(kuò)展性優(yōu):Storm框架中包含“工作進(jìn)程、線程和任務(wù)”三個(gè)實(shí)體。在分布式集群上,每個(gè)節(jié)點(diǎn)可以運(yùn)行多個(gè)工作進(jìn)程,每個(gè)工作進(jìn)程上創(chuàng)建多個(gè)線程,每個(gè)線程執(zhí)行多個(gè)計(jì)算任務(wù)。計(jì)算任務(wù)是最小的工作單元,可以在線程、進(jìn)程和節(jié)點(diǎn)上并行,支持靈活的水平擴(kuò)展;4.1.3流處理框架Storm(3)可靠性高:Storm框架構(gòu)建類似“消息樹”的結(jié)構(gòu),從樹根出發(fā)直到樹上所有節(jié)點(diǎn)均被處理,才認(rèn)為計(jì)算任務(wù)被完全處理,一旦某個(gè)節(jié)點(diǎn)處理失敗,則重新執(zhí)行計(jì)算;(4)高容錯(cuò)率:Storm框架為實(shí)現(xiàn)實(shí)時(shí)的流計(jì)算,將保證處理單元永遠(yuǎn)執(zhí)行,除非顯式的終止處理單元。在計(jì)算過程中出現(xiàn)異常時(shí),Storm框架會(huì)重新安排出問題的處理單元;(5)高效率:Storm框架采用網(wǎng)絡(luò)直傳、內(nèi)存計(jì)算等方式,時(shí)延遠(yuǎn)低于Hadoop通過HDFS的磁盤讀寫方式,因此更適合流數(shù)據(jù)場(chǎng)景,免去了數(shù)據(jù)收集的時(shí)延;(6)支持本地模式:Storm框架支持在本地的進(jìn)程中模擬該框架所有功能,因而可為使用者提供簡(jiǎn)便的調(diào)試環(huán)境,使用起來更為方便。4.1.3流處理框架Storm以計(jì)算機(jī)集群日志文件生產(chǎn)過程為例,我們對(duì)比Storm框架和Hadoop框架的異同點(diǎn)。在由幾百個(gè)節(jié)點(diǎn)組成的集群中,集群日志文件包含幾百個(gè)源頭,且集群運(yùn)行中每個(gè)節(jié)點(diǎn)將會(huì)源源不斷的產(chǎn)生日志文件。這些日志文件中有大量重復(fù),但其中小部分卻是有意義的,需要存儲(chǔ)在數(shù)據(jù)庫(kù)中。在這樣的場(chǎng)景中:(1)若使用Hadoop框架進(jìn)行存儲(chǔ)和分析,首先需要將日志文件存儲(chǔ)到HDFS上。由于日志文件源源不斷,HDFS采用緩存方式以分鐘為單位切分日志文件(更小粒度的日志將會(huì)產(chǎn)生數(shù)量龐大的文件),每分鐘日志文件存儲(chǔ)后再調(diào)用MapReduce執(zhí)行去除重復(fù)的計(jì)算,由于MapReduce效率較低,當(dāng)前去重任務(wù)還未結(jié)束,陸續(xù)到達(dá)的日志文件已經(jīng)填滿緩沖區(qū),緩沖區(qū)溢出將會(huì)造成日志文件丟失。4.1.3流處理框架Storm(2)若采用Storm框架,將會(huì)為每個(gè)節(jié)點(diǎn)的日志文件分配一個(gè)監(jiān)控進(jìn)程,按照秒級(jí)或毫秒級(jí)收集日志文件,每個(gè)日志文件進(jìn)入流式框架后直接進(jìn)行去重計(jì)算。若為重復(fù)日志文件則直接丟棄,若日志文件不重復(fù)則添加到數(shù)據(jù)庫(kù)。因此,Storm框架更適合于流式大數(shù)據(jù)的分析和計(jì)算。Storm框架主要包括七大核心基本組件:(1)Stream(流):采用Stream描述流數(shù)據(jù);(2)Spout(源頭):將Stream的源頭抽象為Spout;(3)Bolt(處理邏輯):將Stream的狀態(tài)轉(zhuǎn)換抽象為Bolt;(4)Topology(拓?fù)鋱D):實(shí)時(shí)流處理的任務(wù)邏輯,由Spout和Bolt組成;4.1.3流處理框架Storm(5)Streamgrouping(流分組):告知Topology如何在組件之間進(jìn)行數(shù)據(jù)傳送;(6)Task(任務(wù)):實(shí)際執(zhí)行Spout和Bolt的線程,每個(gè)Task對(duì)應(yīng)一個(gè)線程;(7)Worker(工作進(jìn)程):每個(gè)Topology由一個(gè)或多個(gè)Worker執(zhí)行。
Storm框架的目標(biāo)是進(jìn)行流處理,Hadoop框架的目標(biāo)是進(jìn)行批處理,二者在五個(gè)方面的異同點(diǎn)如表4-6所示。4.1.3流處理框架Storm表4-6Storm框架與Hadoop框架的異同點(diǎn)4.1.4混合處理框架Spark隨著時(shí)代的發(fā)展,在大數(shù)據(jù)的分析與計(jì)算中,將會(huì)呈現(xiàn)不同的數(shù)據(jù)類型,其特點(diǎn)各不相同,主要包括:(1)批處理:響應(yīng)時(shí)間跨度在小時(shí)級(jí),數(shù)據(jù)量龐大;(2)交互式查詢:響應(yīng)時(shí)間跨度在分鐘級(jí),數(shù)據(jù)量格式多樣;(3)流數(shù)據(jù):響應(yīng)時(shí)間跨度在秒級(jí),數(shù)據(jù)如流水一樣到達(dá);(4)圖數(shù)據(jù):響應(yīng)時(shí)間跨度在分鐘級(jí),數(shù)據(jù)格式為由節(jié)點(diǎn)和邊組成的圖;(5)機(jī)器學(xué)習(xí):響應(yīng)時(shí)間跨度在分鐘級(jí),需在大數(shù)據(jù)上構(gòu)建機(jī)器學(xué)習(xí)模型。在上文中,我們知道大數(shù)據(jù)批處理任務(wù)一般使用MapReduce計(jì)算,交互式查詢?nèi)蝿?wù)使用建立在Hadoop上的分布式數(shù)據(jù)庫(kù)完成,流計(jì)算任務(wù)則使用流處理框架Storm,圖計(jì)算和機(jī)器學(xué)習(xí)也能夠采用相應(yīng)的框架實(shí)現(xiàn)。然而,當(dāng)面臨不同類型的大數(shù)據(jù)計(jì)算任務(wù)時(shí),在眾多計(jì)算框架中切換,將會(huì)造成格式不統(tǒng)一、管理開銷大以及資源協(xié)調(diào)與分配困難等問題。4.1.4混合處理框架Spark為了能在單個(gè)框架上實(shí)現(xiàn)各類數(shù)據(jù)的各種計(jì)算模式,研究者提出了Spark混合處理框架。Spark于2009年誕生于加州大學(xué)伯克利分校的AMP實(shí)驗(yàn)室,于2010年開源,是最早實(shí)現(xiàn)基于內(nèi)存的分布式計(jì)算框架,可用于構(gòu)建低延遲的大數(shù)據(jù)分布式計(jì)算任務(wù)。隨著Hadoop框架中的MapReduce模型在高效率批處理計(jì)算、流計(jì)算、圖計(jì)算中存在瓶頸,Spark于2013年6月成為Apache孵化項(xiàng)目,旨在基于HDFS的大數(shù)據(jù)存儲(chǔ),構(gòu)建適用于不同類型的高效分布式計(jì)算任務(wù)。Spark不但提供了不同高級(jí)語(yǔ)言的編程接口,還支持通用執(zhí)行圖的優(yōu)化引擎。表4-7給出了Spark的優(yōu)點(diǎn)。4.1.4混合處理框架Spark表4-7Spark框架的優(yōu)點(diǎn)4.1.4混合處理框架Spark基于上述優(yōu)點(diǎn),Spark提供了更高性能的分布式計(jì)算模型,其性能比MapReduce計(jì)算模型高100倍,如圖4-6所示,即使Spark在內(nèi)存容量有限且需使用磁盤讀寫時(shí),其性能也幾乎為MapReduce的10倍左右。2014年,在100TB數(shù)據(jù)的排序任務(wù)對(duì)比中,Spark在206個(gè)節(jié)點(diǎn)上通過23分鐘完成任務(wù),MapReduce則在2000個(gè)節(jié)點(diǎn)上通過72分鐘完成任務(wù)。Spark僅僅占用1/10的計(jì)算資源,但獲得了遠(yuǎn)高于MapReduce的性能,由此Spark也于2014年2月成為Apache頂級(jí)項(xiàng)目。4.1.4混合處理框架Spark經(jīng)過多年發(fā)展,Spark遵循“onesizefitsall”的思想,構(gòu)建了能適用于批處理、流數(shù)據(jù)、圖數(shù)據(jù)、交互式查詢的完整生態(tài)系統(tǒng)。因此,Spark框架能夠避免不同格式的數(shù)據(jù)轉(zhuǎn)換,降低不同軟件版本的數(shù)據(jù)維護(hù)成本,構(gòu)建了針對(duì)不同任務(wù)的統(tǒng)一資源分配與協(xié)調(diào)系統(tǒng),逐漸發(fā)展表4-8所示。圖4-6Logistic回歸任務(wù)在Spark和MapReduce上的性能對(duì)比4.1.4混合處理框架Spark表4-8Spark的特點(diǎn)4.1.4混合處理框架SparkSpark的生態(tài)體系如圖4-7所示,Spark既可以使用本地運(yùn)行模式、獨(dú)立運(yùn)行模式,或使用第三方管理模式(如:Mesos或YARN管理框架),還支持云計(jì)算方式(如:亞馬遜EC2)。此外,在底層大數(shù)據(jù)存儲(chǔ)上,Spark既可以使用Hadoop分布式文件系統(tǒng)(HDFS)、或使用分布式數(shù)據(jù)庫(kù)或數(shù)據(jù)倉(cāng)庫(kù)(如:HBase或Hive),還支持云存儲(chǔ)(如:亞馬遜EC2)。圖4-7Spark生態(tài)體系4.1.4混合處理框架Spark(1)SparkCore:Spark的基礎(chǔ)和核心功能,面向批處理任務(wù),涵蓋內(nèi)存計(jì)算、任務(wù)調(diào)度、故障恢復(fù)和存儲(chǔ)管理等,通過統(tǒng)一抽象的數(shù)據(jù)類型,應(yīng)對(duì)不同的大數(shù)據(jù)類型;根據(jù)圖4-7,Spark生態(tài)體系主要包括五大基本組件:(2)SparkSQL:用于結(jié)構(gòu)化數(shù)據(jù)處理的組件,面向交互式查詢?nèi)蝿?wù),開發(fā)人員無須編寫Spark應(yīng)用程序,可直接使用SQL語(yǔ)句建立交互式查詢,并兼容分布式數(shù)據(jù)庫(kù)、分布式數(shù)據(jù)倉(cāng)庫(kù)等;4.1.4混合處理框架Spark(3)SparkStreaming:支持高吞吐量、具有容錯(cuò)機(jī)制的流計(jì)算框架,面向流計(jì)算任務(wù),核心方案是將流數(shù)據(jù)劃分為短時(shí)間內(nèi)的切片。每個(gè)切片作為批處理任務(wù)運(yùn)行在SparkCore之上,完成流處理的任務(wù)。隨著Spark的發(fā)展,2016年提出結(jié)構(gòu)化流計(jì)算(StructuredStreaming),該模塊將數(shù)據(jù)流看作沒有邊界的數(shù)據(jù)表,可直接使用SparkSQL進(jìn)行流計(jì)算,進(jìn)一步降低了基于Spark流計(jì)算的門檻;(4)SparkGraphX:在Spark上提供了用于圖計(jì)算的API,面向圖計(jì)算任務(wù),擁有豐富的圖定義功能和運(yùn)算符,支持在海量圖結(jié)構(gòu)數(shù)據(jù)上運(yùn)行算法,性能優(yōu)良;(5)SparkMLlib:提供了經(jīng)典機(jī)器學(xué)習(xí)算法的分布式實(shí)現(xiàn),面向機(jī)器學(xué)習(xí)任務(wù),涵蓋聚類、分類、回歸和協(xié)同過濾等,使用者僅需擁有簡(jiǎn)單機(jī)器學(xué)習(xí)知識(shí),即可調(diào)用API完成機(jī)器學(xué)習(xí)任務(wù)。4.1.4混合處理框架Spark在SparkCore的作用下,SparkSQL、SparkStreaming、SparkGraphX和SparkMLlib的編程API幾乎一致,使用者可以幾乎無縫應(yīng)用不同的模塊,處理特定的大數(shù)據(jù)計(jì)算和分析任務(wù),因而Spark稱為混合處理框架。024.2
大數(shù)據(jù)分布式存儲(chǔ)4.2.1經(jīng)典數(shù)據(jù)存儲(chǔ)與管理技術(shù)經(jīng)典數(shù)據(jù)存儲(chǔ)方法在經(jīng)典操作系統(tǒng)中,數(shù)據(jù)以文件系統(tǒng)的方式存儲(chǔ)。文件系統(tǒng)的最小單位為512字節(jié),將磁盤空間以512字節(jié)為單位劃分“磁盤塊”,用于存儲(chǔ)各種類型的文件。實(shí)際上,“磁盤塊”是文件系統(tǒng)讀寫的最小單位,稱為“塊(Block)”。因此,文件通常以“塊”的整數(shù)倍存儲(chǔ),即每次讀寫的數(shù)據(jù)量必須是“塊”的整數(shù)倍。文件的存儲(chǔ)方式分為兩種:一是連續(xù)地址空間分配;二是非連續(xù)地址空間分配。連續(xù)地址空間分配方式是分配一整塊物理磁盤空間用于文件的存儲(chǔ)。這種方式需要給出磁盤空間起始?jí)K的地址和文件的長(zhǎng)度,通過二者確定文件存儲(chǔ)的磁盤空間范圍。采用這種方式存儲(chǔ)文件須事先確定文件的大小,這樣操作系統(tǒng)才能夠分配合適的連續(xù)空間用于存儲(chǔ)該文件。在操作系統(tǒng)中,存放維護(hù)該文件必要信息的塊,稱為文件頭。通過文件頭中的信息,客戶端能夠快速定位文件存儲(chǔ)的地址,進(jìn)而完成對(duì)文件的讀寫。4.2.1經(jīng)典數(shù)據(jù)存儲(chǔ)與管理技術(shù)經(jīng)典數(shù)據(jù)存儲(chǔ)方法非連續(xù)地址空間分配方式則采用離散的磁盤空間存儲(chǔ)文件,可以有效消除磁盤空間中的碎片,提升磁盤空間的使用率,且擴(kuò)展文件長(zhǎng)度也較為便捷。非連續(xù)地址空間分配包含兩種方式:鏈?zhǔn)椒峙浜退饕椒峙?。采用鏈?zhǔn)椒峙涞牟僮飨到y(tǒng)維護(hù)一個(gè)文件分配表(FileAllocationTable,FAT),給出了文件名的起始磁盤塊號(hào)。FAT表中包含物理塊號(hào)和下一個(gè)塊號(hào)的地址,通過迭代的跳轉(zhuǎn)訪問“下一個(gè)塊號(hào)”,即可訪問存放文件的所有磁盤塊,從而完成讀寫工作。采用索引表的操作系統(tǒng)則為每個(gè)存儲(chǔ)的文件創(chuàng)建一個(gè)索引表,其中存放指向文件所有磁盤塊的指針列表。索引表中存放的是邏輯頁(yè)面與物理存儲(chǔ)塊之間的映射關(guān)系。4.2.1經(jīng)典數(shù)據(jù)存儲(chǔ)與管理技術(shù)經(jīng)典數(shù)據(jù)管理方法經(jīng)典操作系統(tǒng)中的數(shù)據(jù)管理方法一般使用關(guān)系型數(shù)據(jù)庫(kù)技術(shù)。在計(jì)算機(jī)操作系統(tǒng)中,采用文件管理的數(shù)據(jù)只能實(shí)現(xiàn)簡(jiǎn)單的功能(例如:Excel表格存放數(shù)據(jù)并進(jìn)行簡(jiǎn)單的統(tǒng)計(jì)),想要快速查詢所存儲(chǔ)的數(shù)據(jù),以及發(fā)現(xiàn)各個(gè)文件中數(shù)據(jù)的關(guān)系則變得困難。數(shù)據(jù)庫(kù)是“按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲(chǔ)和管理數(shù)據(jù)的倉(cāng)庫(kù)”,是一種安裝在操作系統(tǒng)中,進(jìn)行有組織、可共享并進(jìn)行統(tǒng)一管理的大量數(shù)據(jù)的集合。通過數(shù)據(jù)庫(kù)管理技術(shù),我們不但能夠?qū)崿F(xiàn)單個(gè)文件的數(shù)據(jù)管理,而且能夠獲取多個(gè)文件中的數(shù)據(jù)關(guān)系,并且數(shù)據(jù)庫(kù)中的數(shù)據(jù)能夠共享給不同的用戶,實(shí)現(xiàn)更為強(qiáng)大、全面的數(shù)據(jù)管理功能。隨著數(shù)據(jù)庫(kù)技術(shù)的發(fā)展,數(shù)據(jù)庫(kù)先后經(jīng)歷了層次數(shù)據(jù)庫(kù)、網(wǎng)狀數(shù)據(jù)庫(kù)和關(guān)系數(shù)據(jù)庫(kù)等階段,關(guān)系型數(shù)據(jù)庫(kù)是數(shù)據(jù)管理中的最為常用數(shù)據(jù)庫(kù)之一。在關(guān)系型數(shù)據(jù)庫(kù)中,最基本的數(shù)據(jù)存儲(chǔ)單位為數(shù)據(jù)表,數(shù)據(jù)庫(kù)由多個(gè)數(shù)據(jù)表組成。4.2.1經(jīng)典數(shù)據(jù)存儲(chǔ)與管理技術(shù)經(jīng)典數(shù)據(jù)管理方法最基礎(chǔ)的數(shù)據(jù)表形態(tài)為二維表,由行和列組成,與Excel表格的存儲(chǔ)形態(tài)類似,所不同的是數(shù)據(jù)表之間可建立連接關(guān)系,獲得強(qiáng)大的檢索、統(tǒng)計(jì)和分析功能。因此,關(guān)系型數(shù)據(jù)庫(kù)由多張表和各表之間的關(guān)系構(gòu)成。數(shù)據(jù)表是典型的結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)和管理方法。如圖4-8所示,以學(xué)生信息的存儲(chǔ)為例,每張數(shù)據(jù)表包含獨(dú)有的名字標(biāo)識(shí),表中包含記錄數(shù)據(jù)屬性的“列”,以及記錄實(shí)際數(shù)據(jù)的“行”。其中,“學(xué)號(hào)、姓名、出生日期和性別”屬于數(shù)據(jù)屬性,可根據(jù)需要在設(shè)計(jì)表的時(shí)候定義;每一行則是實(shí)際的數(shù)據(jù)記錄,包含每個(gè)數(shù)據(jù)屬性的值。為了保持良好的關(guān)系特性,關(guān)系型數(shù)據(jù)庫(kù)要求為每個(gè)數(shù)據(jù)屬性設(shè)置數(shù)據(jù)形式,以保證每個(gè)數(shù)據(jù)屬性值的完備性。4.2.1經(jīng)典數(shù)據(jù)存儲(chǔ)與管理技術(shù)經(jīng)典數(shù)據(jù)管理方法圖4-8關(guān)系型數(shù)據(jù)庫(kù)中的數(shù)據(jù)表結(jié)構(gòu)4.2.1經(jīng)典數(shù)據(jù)存儲(chǔ)與管理技術(shù)經(jīng)典數(shù)據(jù)管理方法在關(guān)系型數(shù)據(jù)庫(kù)中,允許創(chuàng)建多張數(shù)據(jù)表,用于存放不同類別的數(shù)據(jù)。在眾多數(shù)據(jù)表中,想要發(fā)現(xiàn)有意義的數(shù)據(jù)關(guān)系,就需要建立各個(gè)數(shù)據(jù)表中的關(guān)系。基于數(shù)據(jù)庫(kù)的原理,研究者和開發(fā)人員設(shè)計(jì)并開發(fā)了數(shù)據(jù)庫(kù)管理系統(tǒng)(DatabaseManagementSystem,DBMS),在計(jì)算機(jī)上實(shí)現(xiàn)關(guān)系型數(shù)據(jù)庫(kù)的管理,例如:MySQL,Oracle以及SQLServer等關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)。為了在數(shù)據(jù)庫(kù)中進(jìn)行高效的數(shù)據(jù)查詢、統(tǒng)計(jì)、分析和管理,數(shù)據(jù)庫(kù)管理系統(tǒng)提供結(jié)構(gòu)化查詢語(yǔ)言(StructuredQueryLanguage,SQL),通過SQL定義操作關(guān)系型數(shù)據(jù)庫(kù)的規(guī)則。數(shù)據(jù)庫(kù)管理人員只需要學(xué)習(xí)SQL語(yǔ)句,即可高效地操作關(guān)系型數(shù)據(jù)庫(kù),對(duì)數(shù)據(jù)表完成數(shù)據(jù)的增加、刪除、查詢、修改等管理操作。因此,關(guān)系型數(shù)據(jù)庫(kù)也被稱為SQL數(shù)據(jù)庫(kù)。4.2.2分布式大數(shù)據(jù)存儲(chǔ)與管理技術(shù)大數(shù)據(jù)時(shí)代背景下,面對(duì)海量的大規(guī)模數(shù)據(jù)存儲(chǔ)需求,單臺(tái)計(jì)算機(jī)的傳統(tǒng)文件存儲(chǔ)方式顯得捉襟見肘。相比于本地文件系統(tǒng)僅能使用本地的存儲(chǔ)磁盤空間,分布式存儲(chǔ)系統(tǒng)能夠通過網(wǎng)絡(luò)互聯(lián)的方式建立多臺(tái)計(jì)算機(jī)之間的聯(lián)系,使海量大數(shù)據(jù)存儲(chǔ)在分布式的磁盤空間中。分布式存儲(chǔ)系統(tǒng)一般架構(gòu)在計(jì)算機(jī)集群之上,由若干臺(tái)計(jì)算機(jī)終端集群而成,每臺(tái)計(jì)算機(jī)提供磁盤存儲(chǔ)空間。如圖4-9所示,常見的計(jì)算機(jī)集群中包含有若干個(gè)計(jì)算機(jī)機(jī)架,每個(gè)計(jì)算機(jī)機(jī)架中存放有若干臺(tái)計(jì)算機(jī)終端。其中,同一個(gè)機(jī)架上的計(jì)算機(jī)終端通過局域網(wǎng)相連,不同機(jī)架之間通過交換機(jī)通信。大數(shù)據(jù)雖然存儲(chǔ)在不同機(jī)架、不同計(jì)算機(jī)終端中,但分布式存儲(chǔ)系統(tǒng)可通過網(wǎng)絡(luò)進(jìn)行通信或交換信息,使得程序像訪問本地文件系統(tǒng)一樣的訪問分布式存儲(chǔ)系統(tǒng),允許使用者從任意網(wǎng)絡(luò)或計(jì)算機(jī)訪問所存儲(chǔ)的文件。基于分布式存儲(chǔ)系統(tǒng),操作系統(tǒng)可通過授權(quán)的方式在終端用戶之間輕松地共享文件。4.2.2分布式大數(shù)據(jù)存儲(chǔ)與管理技術(shù)圖4-9常見的用于存儲(chǔ)分布式存儲(chǔ)系統(tǒng)的計(jì)算機(jī)集群4.2.2分布式大數(shù)據(jù)存儲(chǔ)與管理技術(shù)分布式存儲(chǔ)系統(tǒng)主要包含三個(gè)類別:分布式文件系統(tǒng)、分布式塊存儲(chǔ)和分布式對(duì)象存儲(chǔ)。當(dāng)然,隨著分布式存儲(chǔ)方式的發(fā)展,還包括近年來新興的分布式數(shù)據(jù)庫(kù)和分布式緩存等形式。分布式文件系統(tǒng)的存儲(chǔ)架構(gòu)類別主要包含三種方式:(1)采用控制節(jié)點(diǎn)為中心的架構(gòu):整個(gè)計(jì)算機(jī)集群中包含一個(gè)服務(wù)器節(jié)點(diǎn)用于控制,以及若干個(gè)用戶端存儲(chǔ)節(jié)點(diǎn)用于海量大數(shù)據(jù)的存儲(chǔ),整體架構(gòu)采用“用戶端/服務(wù)器”模式。具有代表性的分布式文件系統(tǒng)包括,谷歌分布式文件系統(tǒng)(GoogleFileSystem)和Hadoop分布式文件系統(tǒng)(HadoopDistributedFileSystem,HDFS)。4.2.2分布式大數(shù)據(jù)存儲(chǔ)與管理技術(shù)(2)采用計(jì)算模式的無中心服務(wù)器架構(gòu):客戶端通過設(shè)備映射關(guān)系計(jì)算地址,尋找文件在計(jì)算機(jī)集群中的存儲(chǔ)位置,明確文件的讀寫位置后,由客戶端直接與存儲(chǔ)節(jié)點(diǎn)通信,完成文件的讀寫工作。此類架構(gòu)具有代表性的分布式文件系統(tǒng):Linux操作系統(tǒng)中的Ceph系統(tǒng)。(3)采用一致性哈希的無中心服務(wù)器架構(gòu):首先將分布式存儲(chǔ)的磁盤設(shè)備制定為哈希環(huán),客戶端進(jìn)行讀寫工作時(shí),通過文件名稱計(jì)算出相應(yīng)的哈希值,通過哈希環(huán)將哈希值映射到文件的具體存儲(chǔ)磁盤設(shè)備中。明確文件位置后,客戶端完成文件的讀寫操作。此類架構(gòu)具4.2.2分布式大數(shù)據(jù)存儲(chǔ)與管理技術(shù)有代表性的分布式文件系統(tǒng):OpenStack構(gòu)建的Swift分布式文件系統(tǒng)。當(dāng)然,分布式文件系統(tǒng)中的文件也需要存儲(chǔ)在磁盤設(shè)備中。與傳統(tǒng)文件系統(tǒng)的存儲(chǔ)方式相同,分布式文件系統(tǒng)也采用磁盤塊作為文件存儲(chǔ)的最小單位。不過由于存儲(chǔ)的是海量大數(shù)據(jù),分布式文件系統(tǒng)一般設(shè)置較大的基本“磁盤塊”(如Hadoop2.0的分布式文件系統(tǒng)默認(rèn)最小磁盤塊為128MB),在文件讀寫時(shí)能夠更快的尋找到地址,提升文件讀寫時(shí)的性能。此外,與傳統(tǒng)文件系統(tǒng)不同的是,分布式文件系統(tǒng)的基本“磁盤塊”占據(jù)空間較大,若一個(gè)文件占不滿一個(gè)“磁盤塊”,該“磁盤塊”還可以存儲(chǔ)其他文件。表4-9給出了分布式文件系統(tǒng)的主要特點(diǎn)。4.2.2分布式大數(shù)據(jù)存儲(chǔ)與管理技術(shù)表4-9分布式文件系統(tǒng)的主要特點(diǎn)4.2.2分布式大數(shù)據(jù)存儲(chǔ)與管理技術(shù)客戶端在訪問分布式文件系統(tǒng)時(shí),應(yīng)該與訪問傳統(tǒng)文件系統(tǒng)時(shí)相同,即分布式文件系統(tǒng)提供文件讀寫時(shí)對(duì)客戶端有良好的透明性,主要包括:(1)訪問透明性:分布式文件系統(tǒng)提供與傳統(tǒng)文件系統(tǒng)相同的訪問方式。當(dāng)客戶端發(fā)出訪問請(qǐng)求時(shí),分布式文件系統(tǒng)應(yīng)該能夠自動(dòng)定位想要訪問文件位置,將位置發(fā)送給客戶端。從客戶端角度來看,其與本地文件系統(tǒng)的訪問方式相同,因此客戶端具有訪問透明性;(2)命名透明性:存儲(chǔ)在分布式文件系統(tǒng)中的文件,其名稱中不能含有文件存儲(chǔ)位置的相關(guān)提示信息。當(dāng)文件名稱確定后,從當(dāng)前存儲(chǔ)位置傳輸?shù)狡渌恢脮r(shí)(例如:制作文件副本、修復(fù)受損文件等操作),其名稱不能被更改,客戶端不用關(guān)心命名問題,具有命名透明性;4.2.2分布式大數(shù)據(jù)存儲(chǔ)與管理技術(shù)(3)結(jié)構(gòu)透明性:在訪問分布式文件系統(tǒng)時(shí),客戶端并不能確定服務(wù)器集群中存儲(chǔ)設(shè)備、文件副本的數(shù)量,為了提供高性能和訪問一致性,有必要提供多個(gè)文件的副本,選擇不繁忙的副本提供給客戶端讀寫,客戶端不用考慮具體的副本,具有結(jié)構(gòu)透明性;(4)復(fù)制透明性:客戶端在分布式文件系統(tǒng)中進(jìn)行復(fù)制時(shí),關(guān)于文件多個(gè)副本同時(shí)需要進(jìn)行復(fù)制等操作,客戶端不必關(guān)心如何具體執(zhí)行,具有復(fù)制透明性。除了上述特點(diǎn)以外,一個(gè)高性能、高可用性的分布式文件系統(tǒng),還應(yīng)該支持多樣化的存儲(chǔ)介質(zhì)和多種文件訪問方式。在計(jì)算機(jī)集群中,磁盤存儲(chǔ)設(shè)備應(yīng)該支持各類存儲(chǔ)介質(zhì)存放文件,包括機(jī)械硬盤,SAS、SSD、NVMe固態(tài)硬盤,甚至是公有云存儲(chǔ)等,分布式文件系統(tǒng)應(yīng)該能夠保證文件存儲(chǔ)在任意可用的存儲(chǔ)介質(zhì)上??蛻舳嗽诜植际轿募到y(tǒng)中讀寫文件時(shí),應(yīng)該能夠支持多種網(wǎng)絡(luò)協(xié)議進(jìn)行文件訪問,4.2.2分布式大數(shù)據(jù)存儲(chǔ)與管理技術(shù)例如:網(wǎng)絡(luò)文件系統(tǒng)(NFS)、服務(wù)器信息塊(SMB)或可移植操作系統(tǒng)接口(POSIX)等,客戶端能夠靈活選擇適合自己的網(wǎng)絡(luò)協(xié)議完成文件的讀寫。在文件和數(shù)據(jù)安全方面,分布式文件系統(tǒng)應(yīng)該支持文件和訪問文件所需的元數(shù)據(jù)在傳輸過程中的加密,保證文件系統(tǒng)中的文件和數(shù)據(jù)免受未經(jīng)授權(quán)的訪問,實(shí)現(xiàn)安全機(jī)制。分布式文件系統(tǒng)在大數(shù)據(jù)存儲(chǔ)和管理中具有明顯的優(yōu)勢(shì)。在大數(shù)據(jù)時(shí)代下,許多應(yīng)用場(chǎng)景中采用分布式文件系統(tǒng)存儲(chǔ)大數(shù)據(jù),分布式文件系統(tǒng)存在相應(yīng)的優(yōu)缺點(diǎn):(1)優(yōu)點(diǎn):分布式文件系統(tǒng)允許多個(gè)客戶端并發(fā)讀寫數(shù)據(jù),允許在客戶端之間遠(yuǎn)程共享數(shù)據(jù),通過計(jì)算機(jī)集群架構(gòu)提高文件的可用性,降低了訪問時(shí)間并提升了網(wǎng)絡(luò)傳輸效率。同時(shí),分布式文件系統(tǒng)提高了改變數(shù)據(jù)大小的方法,提升了數(shù)據(jù)交換能力,并給予了數(shù)據(jù)處理的透明度。4.2.2分布式大數(shù)據(jù)存儲(chǔ)與管理技術(shù)(2)缺點(diǎn):分布式文件系統(tǒng)依賴網(wǎng)絡(luò)傳輸,計(jì)算機(jī)集群中各個(gè)節(jié)點(diǎn)之間的網(wǎng)絡(luò)連接存在安全問題,數(shù)據(jù)在各節(jié)點(diǎn)之間的移動(dòng)可能由于網(wǎng)絡(luò)問題丟失。同時(shí),在分布式文件系統(tǒng)上建立數(shù)據(jù)庫(kù)更為復(fù)雜,節(jié)點(diǎn)間同時(shí)傳輸數(shù)據(jù)也可能造成網(wǎng)絡(luò)擁塞、延遲等問題。4.2.3分布式文件系統(tǒng)(HDFS)Hadoop分布式文件系統(tǒng)(HDFS)是Hadoop架構(gòu)中大數(shù)據(jù)分布式存儲(chǔ)的關(guān)鍵。實(shí)際上,HDFS是Google分布式文件系統(tǒng)的開源實(shí)現(xiàn),支持讀寫和處理超大規(guī)模的文件,并能夠運(yùn)行在廉價(jià)計(jì)算機(jī)組成的集群上。在HDFS的設(shè)計(jì)過程中,考慮了構(gòu)建分布式文件系統(tǒng)的計(jì)算機(jī)集群實(shí)際情況,認(rèn)為計(jì)算機(jī)集群中出現(xiàn)硬件故障是常態(tài),在設(shè)計(jì)時(shí)需要考慮經(jīng)常出現(xiàn)硬件故障的情況。因此,HDFS具有高度的容錯(cuò)能力,可部署在大規(guī)模低成本計(jì)算機(jī)集群上,其特點(diǎn)表4-10所示。4.2.3分布式文件系統(tǒng)(HDFS)表4-10HDFS的主要特點(diǎn)4.2.3分布式文件系統(tǒng)(HDFS)雖然HDFS采用分布式文件系統(tǒng)架構(gòu),但是文件在計(jì)算機(jī)集群中的實(shí)際存儲(chǔ)過程采用抽象的“數(shù)據(jù)塊”,默認(rèn)大小為64MB或128M(Hadoop2.0以上版本為128M)。面對(duì)海量大數(shù)據(jù)文件的存儲(chǔ),HDFS將文件拆分成多個(gè)存盤塊單獨(dú)存儲(chǔ)。HDFS通過設(shè)置更大的數(shù)據(jù)塊(傳統(tǒng)文件系統(tǒng)的“磁盤塊”為512B),保證大數(shù)據(jù)文件被切分成更少數(shù)量的數(shù)據(jù)塊,最小化了尋址開銷,同時(shí)兼顧本地磁盤的利用效率,最終將最基本的數(shù)據(jù)塊設(shè)置為64MB或128M,在對(duì)大數(shù)據(jù)文件的讀寫時(shí)效率較高。采用抽象的、較大容量的數(shù)據(jù)塊,保證HDFS支持大數(shù)據(jù)文件的存儲(chǔ),固定的數(shù)據(jù)塊能夠簡(jiǎn)化大數(shù)據(jù)分析和計(jì)算時(shí)的方法設(shè)計(jì),以及方便數(shù)據(jù)的復(fù)制、遷移和備份等常見操作。HDFS采用控制節(jié)點(diǎn)為中心的架構(gòu)(即主-從體系架構(gòu)),如圖4-10所示,HDFS架構(gòu)主要包含客戶端、名稱節(jié)點(diǎn)、第二名稱節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)四個(gè)重要組成部分。4.2.3分布式文件系統(tǒng)(HDFS)圖4-10HDFS的基本架構(gòu)和重要組成部分4.2.3分布式文件系統(tǒng)(HDFS)(1)客戶端:HDFS的使用者通過客戶端向名稱節(jié)點(diǎn)發(fā)起請(qǐng)求,請(qǐng)求獲取數(shù)據(jù)存儲(chǔ)的“元數(shù)據(jù)”,包含:命名空間、磁盤塊映射信息和數(shù)據(jù)節(jié)點(diǎn)的位置信息等。(2)名稱節(jié)點(diǎn)(NameNode):名稱節(jié)點(diǎn)是HDFS文件管理中的最重要組成部分,維護(hù)著分布式文件系統(tǒng)的目錄樹,包含兩個(gè)重要的元數(shù)據(jù)管理文件:FsImage文件和Edits文件。FsImage文件是元數(shù)據(jù)的永久性檢查點(diǎn),其中包含了HDFS中所有文件的目錄,以及文件的序列化信息(包括:文件ID,類型,所屬用戶,用戶權(quán)限、時(shí)間戳等)。Edits文件存放了HDFS所有操作的日志信息(包括:文件的創(chuàng)建、刪除、追加和重命名等操作)。每次名稱節(jié)點(diǎn)啟動(dòng)后,將FsImage文件讀入到內(nèi)存中,然后執(zhí)行Edits文件中的每個(gè)操作,保證文件目錄和序列化信息等元數(shù)據(jù)都是最新的且同步,這個(gè)過程可以看作是將FsImage文件與Edits文件進(jìn)行合并。4.2.3分布式文件系統(tǒng)(HDFS)(3)第二名稱節(jié)點(diǎn)(SecondaryNameNode):實(shí)際上,經(jīng)過HDFS的長(zhǎng)期運(yùn)行,將會(huì)產(chǎn)生較大的FsImage文件和Edits文件,每次重啟時(shí)將耗費(fèi)大量的時(shí)間進(jìn)行兩個(gè)文件的合并。因此,Hadoop框架另外設(shè)置一個(gè)“第二名稱節(jié)點(diǎn)”,其任務(wù)包含兩個(gè):一是備份文件目錄和日志,二是定期合并FsImage文件和Edits文件。第二名稱節(jié)點(diǎn)的主要功能是定期從名稱節(jié)點(diǎn)中獲取FsImage文件和Edits文件,合并兩個(gè)文件后,生成“檢查點(diǎn)”文件,然后將“檢查點(diǎn)”文件返還給名稱節(jié)點(diǎn)。采用這種方式定期合并兩個(gè)文件,能夠防止名稱節(jié)點(diǎn)重啟時(shí)需要將整個(gè)FsImage文件和Edits文件同時(shí)加載到內(nèi)存中,避免消耗大量的時(shí)間用于文件加載與合并。4.2.3分布式文件系統(tǒng)(HDFS)(4)數(shù)據(jù)節(jié)點(diǎn)(DataNode):HDFS中包含多個(gè)數(shù)據(jù)節(jié)點(diǎn),計(jì)算機(jī)集群中每臺(tái)存儲(chǔ)終端設(shè)備都運(yùn)行一個(gè)數(shù)據(jù)節(jié)點(diǎn)。數(shù)據(jù)節(jié)點(diǎn)管理存儲(chǔ)文件的“數(shù)據(jù)塊”。其中,每個(gè)數(shù)據(jù)塊包含兩個(gè)文件:一是存儲(chǔ)數(shù)據(jù)本身,二是數(shù)據(jù)節(jié)點(diǎn)的“元數(shù)據(jù)”(包括:數(shù)據(jù)塊的長(zhǎng)度、完整性校驗(yàn)信息和時(shí)間戳等)。
數(shù)據(jù)節(jié)點(diǎn)的工作流程如圖4-11所示,包含六個(gè)步驟:4.2.3分布式文件系統(tǒng)(HDFS)圖4-11數(shù)據(jù)節(jié)點(diǎn)的工作流程4.2.3分布式文件系統(tǒng)(HDFS)(1)集群中任意一臺(tái)計(jì)算機(jī)啟動(dòng)數(shù)據(jù)節(jié)點(diǎn)后,立即向名稱節(jié)點(diǎn)注冊(cè)信息;(2)名稱節(jié)點(diǎn)受理注冊(cè)信息后,返回信息告訴數(shù)據(jù)節(jié)點(diǎn)注冊(cè)完成;(3)數(shù)據(jù)節(jié)點(diǎn)周期性上報(bào)在該計(jì)算機(jī)上管理的所有“數(shù)據(jù)塊”信息;(4)穩(wěn)定運(yùn)行過程中,數(shù)據(jù)節(jié)點(diǎn)周期性向名稱節(jié)點(diǎn)發(fā)送“心跳信息”,同時(shí)若有對(duì)數(shù)據(jù)塊的操作,將信息存放在“心跳信息”中,一起上報(bào)給名稱節(jié)點(diǎn)更新;(5)名稱節(jié)點(diǎn)定時(shí)接收來自每個(gè)數(shù)據(jù)節(jié)點(diǎn)的“心跳信息”(默認(rèn)為3秒發(fā)送一次)。當(dāng)超時(shí)未收到“心跳信息”時(shí)(默認(rèn)為10分鐘30秒),則認(rèn)為該數(shù)據(jù)節(jié)點(diǎn)發(fā)生故障,將啟動(dòng)數(shù)據(jù)塊的“容錯(cuò)備份”機(jī)制,尋找另一臺(tái)空閑的計(jì)算機(jī)啟動(dòng)數(shù)據(jù)節(jié)點(diǎn),恢復(fù)故障數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)塊副本;(6)當(dāng)完成正確的數(shù)據(jù)塊寫入時(shí),數(shù)據(jù)節(jié)點(diǎn)會(huì)同步其管理的數(shù)據(jù)塊,滿足數(shù)據(jù)塊的多個(gè)副本數(shù)據(jù)一致性的要求。4.2.3分布式文件系統(tǒng)(HDFS)如上所述,當(dāng)數(shù)據(jù)節(jié)點(diǎn)發(fā)生故障時(shí),名稱節(jié)點(diǎn)將會(huì)啟動(dòng)“容錯(cuò)備份”機(jī)制進(jìn)行數(shù)據(jù)塊副本的備份。實(shí)際上,HDFS為了保證高容錯(cuò)性和高讀寫性能,采用多個(gè)數(shù)據(jù)塊的冗余存儲(chǔ)策略。如圖4-12所示,大數(shù)據(jù)文件通常被劃分為多個(gè)數(shù)據(jù)塊存儲(chǔ),每個(gè)數(shù)據(jù)塊在HDFS中包含多個(gè)副本,且多個(gè)副本分布地存儲(chǔ)在不同的數(shù)據(jù)節(jié)點(diǎn)上。例如:數(shù)據(jù)塊1可以分別存儲(chǔ)在數(shù)據(jù)節(jié)點(diǎn)1、數(shù)據(jù)節(jié)點(diǎn)2和數(shù)據(jù)節(jié)點(diǎn)4上。通常,HDFS中的數(shù)據(jù)塊冗余存放采用如下的規(guī)則:4.2.3分布式文件系統(tǒng)(HDFS)(1)第1個(gè)副本:放置在上傳文件時(shí)的本機(jī)數(shù)據(jù)節(jié)點(diǎn)上;(2)第2個(gè)副本:放置在與第1個(gè)副本相同機(jī)架上的數(shù)據(jù)節(jié)點(diǎn)上;(3)第3個(gè)副本:放置在與第1個(gè)副本不同機(jī)架上的數(shù)據(jù)節(jié)點(diǎn)上;(4)更多的副本:隨機(jī)選擇存放,盡量放置在與第1、3個(gè)副本相同或相鄰機(jī)架的數(shù)據(jù)節(jié)點(diǎn)上。
這樣做的目的,一方面通過不同機(jī)架上的數(shù)據(jù)節(jié)點(diǎn),降低由于機(jī)架的損壞導(dǎo)致所有數(shù)據(jù)塊的副本丟失,無法進(jìn)行“容錯(cuò)備份”機(jī)制;另一方面,多個(gè)副本放在相同或相鄰的機(jī)架上,在客戶端并發(fā)訪問時(shí),能夠減少尋址的開銷,提升數(shù)據(jù)塊讀寫時(shí)的效率。4.2.3分布式文件系統(tǒng)(HDFS)圖4-12HDFS的多副本冗余存儲(chǔ)的策略4.2.3分布式文件系統(tǒng)(HDFS)與傳統(tǒng)文件系統(tǒng)直接尋址讀寫不同,客戶端對(duì)存儲(chǔ)在HDFS上的文件進(jìn)行讀寫時(shí)包含幾個(gè)步驟。圖4-13(a)所示,HDFS讀數(shù)據(jù)過程包含6個(gè)步驟:(a)讀文件過程(1)客戶端向HDFS接口發(fā)送打開文件的請(qǐng)求;(2)訪問HDFS的名稱節(jié)點(diǎn)獲取存儲(chǔ)文件的數(shù)據(jù)塊地址信息;(3)通過地址信息建立文件輸入流,客戶端向其發(fā)送讀取請(qǐng)求;(4)處理列表中各個(gè)數(shù)據(jù)塊的讀取請(qǐng)求,找到存放數(shù)據(jù)塊的數(shù)據(jù)節(jié)點(diǎn);(5)客戶端從文件流中讀取所需要的數(shù)據(jù);(6)若文件還包含其他的數(shù)據(jù)塊,重復(fù)(2)~(5)步,直到讀完所有后關(guān)閉文件;4.2.3分布式文件系統(tǒng)(HDFS)(b)寫文件過程如圖4-13(b)所示,HDFS寫數(shù)據(jù)過程包含6個(gè)步驟:(1)客戶端向HDFS接口發(fā)送打開文件的請(qǐng)求;(2)訪問HDFS的名稱節(jié)點(diǎn)創(chuàng)建想要寫入文件的元數(shù)據(jù),以及寫入文件的目標(biāo)地址;(3)通過地址信息建立文件輸出流,客戶端向其發(fā)送寫入請(qǐng)求;(4)從輸出流中發(fā)送將要寫入的數(shù)據(jù)包,找到存放數(shù)據(jù)塊的數(shù)據(jù)節(jié)點(diǎn);
(5)將數(shù)據(jù)包寫入第1個(gè)副本,然后寫入第2個(gè)副本,以此類推寫入所有副本,寫入完成后每個(gè)副本將“成功寫入”的確認(rèn)信息發(fā)送回客戶端;(6)若文件還要寫入其他數(shù)據(jù)塊,重復(fù)(2)~(5)步,直到讀完所有后關(guān)閉文件;4.2.3分布式文件系統(tǒng)(HDFS)圖4-13HDFS的文件讀寫過程–讀文件4.2.3分布式文件系統(tǒng)(HDFS)圖4-13HDFS的文件讀寫過程–寫文件4.2.4分布式數(shù)據(jù)庫(kù)系統(tǒng)HBase在傳統(tǒng)數(shù)據(jù)的存儲(chǔ)和管理中,我們知道文件系統(tǒng)只能很好的存儲(chǔ)文件,對(duì)數(shù)據(jù)的管理需要借助于關(guān)系型數(shù)據(jù)庫(kù),通過SQL語(yǔ)句可以快速查詢、統(tǒng)計(jì)和分析數(shù)據(jù)。在大數(shù)據(jù)的存儲(chǔ)與管理中,同樣需要在分布式文件系統(tǒng)基礎(chǔ)上,建立數(shù)據(jù)庫(kù)對(duì)大數(shù)據(jù)進(jìn)行管理。以HDFS為例,大數(shù)據(jù)存儲(chǔ)在計(jì)算機(jī)集群上,無法在集群上直接建立數(shù)據(jù)庫(kù)管理系統(tǒng)。因此,依托于大數(shù)據(jù)的分布式存儲(chǔ)方式,研究者們提出并開發(fā)了非關(guān)系型數(shù)據(jù)庫(kù)(NoSQL)。NoSQL數(shù)據(jù)庫(kù)支持分布式、非關(guān)系型存儲(chǔ)的大數(shù)據(jù),不支持SQL語(yǔ)句的查詢和事務(wù)。經(jīng)過十幾年的發(fā)展,NoSQL數(shù)據(jù)庫(kù)已經(jīng)發(fā)展出幾大不同的分支,如表4-11所示。4.2.4分布式數(shù)據(jù)庫(kù)系統(tǒng)HBase表4-11常見的幾類NoSQL數(shù)據(jù)庫(kù)4.2.4分布式數(shù)據(jù)庫(kù)系統(tǒng)HBaseHBase是建立在HDFS之上的一種NoSQL數(shù)據(jù)庫(kù)。HBase的設(shè)計(jì)原理來源于Google的BigTable,HBase是BigTable主要功能的開源實(shí)現(xiàn)。HBase屬于分布式數(shù)據(jù)庫(kù)系統(tǒng),具有高性能、高可靠、可伸縮以及面向列的特點(diǎn),支持海量大數(shù)據(jù)的隨機(jī)實(shí)時(shí)讀寫、水平擴(kuò)展,其底層基于HDFS,所以可運(yùn)行在廉價(jià)計(jì)算機(jī)集群上,并構(gòu)建數(shù)十億行和數(shù)百列的數(shù)據(jù)表。HBase數(shù)據(jù)庫(kù)的特點(diǎn)包括:(1)具有強(qiáng)一致性讀寫特點(diǎn),保證并發(fā)讀寫時(shí)的數(shù)據(jù)一致性;(2)面向列的數(shù)據(jù)存儲(chǔ)方式,具有良好的存儲(chǔ)空間擴(kuò)展能力,以及較低的尋址開銷;(3)底層支持HDFS的塊存儲(chǔ)方式,延續(xù)了HDFS的優(yōu)點(diǎn);(4)擁有自動(dòng)轉(zhuǎn)移故障的能力,當(dāng)出現(xiàn)故障節(jié)點(diǎn)時(shí)可及時(shí)修復(fù);4.2.4分布式數(shù)據(jù)庫(kù)系統(tǒng)HBase(5)包含多元化的API操作方法,例如:HBaseShell,JavaAPI,ThriftGateway等。
HBase的設(shè)計(jì)背景為海量不斷增長(zhǎng)的大數(shù)據(jù),且需要支持實(shí)時(shí)的單點(diǎn)數(shù)據(jù)查詢,而不需要復(fù)雜的關(guān)系型查詢條件。因此,在基礎(chǔ)數(shù)據(jù)表的設(shè)計(jì)上,強(qiáng)調(diào)對(duì)海量大數(shù)據(jù)的快速查詢,而簡(jiǎn)化獲取各個(gè)表之間的連接關(guān)系。HBase中的表是一個(gè)稀疏、多維度、排序的映射表,通過行鍵(RowKey)、列族(ColumnFamily)、列限定符(ColumnQualifier)和時(shí)間戳(Timestamp)確定映射表中的一個(gè)數(shù)據(jù)單元(Cell)。為了保證所存儲(chǔ)的數(shù)據(jù)稀疏性,HBase每個(gè)數(shù)據(jù)單元存儲(chǔ)的數(shù)據(jù)都是未經(jīng)解釋的字符串(即Java中的byte[]類型),具體使用時(shí)讀出字符串后根據(jù)實(shí)際數(shù)據(jù)類型將字符串解析成相應(yīng)的數(shù)據(jù)類型。4.2.4分布式數(shù)據(jù)庫(kù)系統(tǒng)HBase為了便于理解HBase數(shù)據(jù)庫(kù)中基本表的結(jié)構(gòu),我們利用類似SQL數(shù)據(jù)庫(kù)模型展示HBase數(shù)據(jù)庫(kù)的基本數(shù)據(jù)表結(jié)構(gòu),如圖4-14所示。在HBase數(shù)據(jù)庫(kù)管理系統(tǒng)中,最基本的數(shù)據(jù)表由多行數(shù)據(jù)組成,主要包含概念為:(1)行(Row):每個(gè)數(shù)據(jù)表中包含若干行,每行由一個(gè)唯一的行鍵(RowKey)標(biāo)識(shí)??蛻舳嗽谠L問數(shù)據(jù)庫(kù)時(shí)依靠行鍵定位數(shù)據(jù)行,默認(rèn)采用二進(jìn)制數(shù)字表達(dá)行鍵,單表的數(shù)據(jù)存儲(chǔ)容量在百億行和百萬列。行鍵的設(shè)計(jì)目標(biāo)是將具有相關(guān)性的數(shù)據(jù)行存儲(chǔ)在一起,因此在存儲(chǔ)時(shí)使用字典順序?qū)π墟I排好序。在讀寫數(shù)據(jù)時(shí),具有相關(guān)性的數(shù)據(jù)行大概率被一起讀寫,采用行鍵排序的存儲(chǔ)方式壓縮比很高,而且讀寫的尋址開銷很低。4.2.4分布式數(shù)據(jù)庫(kù)系統(tǒng)HBase(2)列族(ColumnFamily):數(shù)據(jù)表中的列由列族和列限定符組成,列族是最基本的訪問控制單元。為了提升數(shù)據(jù)庫(kù)訪問的性能,將同一個(gè)列族中的數(shù)據(jù)存儲(chǔ)在一起,存儲(chǔ)在同一列族中的實(shí)際數(shù)據(jù)類型保持相同,以滿足更高的壓縮比。在創(chuàng)建數(shù)據(jù)表之前,需要確定好列族的數(shù)量(一般為幾十個(gè)),由于數(shù)據(jù)按照列族存儲(chǔ),定義好列族后不能頻繁修改。此外,每個(gè)列族都可以設(shè)置各自的存儲(chǔ)屬性,例如:是否將部分?jǐn)?shù)據(jù)緩存在內(nèi)存中,如何對(duì)行鍵進(jìn)行編碼以及采用何種方式對(duì)同列族數(shù)據(jù)進(jìn)行壓縮等。(3)列限定符(ColumnQualifier):列族和列限定符共同組成數(shù)據(jù)表中的屬性列,二者使用冒號(hào)分隔,如圖4-14所示,我們可以使用MajorInfo:Dept表示列族MajorInfo(專業(yè)信息)中的列限定符Dept(系的名稱),用于存儲(chǔ)具體的系名。4.2.4分布式數(shù)據(jù)庫(kù)系統(tǒng)HBase列限定符的數(shù)量不用事先定義好,可以根據(jù)需要無限擴(kuò)展,因此具有良好的伸縮特性。此外,每行中的列限定符數(shù)量可以不同,因此大部分列限定符在某些行中可以為空,因此HBase中的數(shù)據(jù)表具有稀疏性。這樣的設(shè)定使HBase能夠靈活存儲(chǔ)數(shù)據(jù),且稀疏數(shù)據(jù)的存儲(chǔ)效率較高。(4)時(shí)間戳(Timestamp):與經(jīng)典的SQL數(shù)據(jù)中的數(shù)據(jù)表不同,HBase數(shù)據(jù)表中的每個(gè)數(shù)據(jù)寫入時(shí),還需要一起寫入時(shí)間戳,用于表示該數(shù)據(jù)值的版本。默認(rèn)情況下,時(shí)間戳由當(dāng)前HBase系統(tǒng)時(shí)間給定(64位整型變量),客戶端也可以自定義時(shí)間戳,其中時(shí)間戳最大的數(shù)據(jù)版本為最新版本。與經(jīng)典的SQL數(shù)據(jù)表在修改數(shù)據(jù)時(shí)直接覆蓋原數(shù)據(jù)不同,在HBase表中修改數(shù)據(jù)會(huì)增加一個(gè)新帶時(shí)間戳的副本,通過原數(shù)據(jù)的時(shí)間戳,客戶端依舊能夠訪問到原數(shù)據(jù)值。4.2.4分布式數(shù)據(jù)庫(kù)系統(tǒng)HBase圖4-14HBase數(shù)據(jù)庫(kù)中數(shù)據(jù)表的結(jié)構(gòu)實(shí)例4.2.5分布式數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)Hive數(shù)據(jù)倉(cāng)庫(kù)(DataWarehouse)是一個(gè)面向主題的、集成的、相對(duì)穩(wěn)定、反映歷史變化的數(shù)據(jù)集合,用于支持管理決策。“數(shù)據(jù)倉(cāng)庫(kù)”概念由BillInmon于1990年提出,其主要功能是組織聯(lián)機(jī)事務(wù)處理系統(tǒng)(OLTP,如:電子商務(wù)系統(tǒng))在經(jīng)年累月運(yùn)行過程中積累的海量大數(shù)據(jù),通過數(shù)據(jù)倉(cāng)庫(kù)特有的數(shù)據(jù)存儲(chǔ)架構(gòu),進(jìn)行有效的大數(shù)據(jù)分析,例如:聯(lián)機(jī)分析處理(OLAP)和數(shù)據(jù)挖掘(DataMining,DM),進(jìn)而通過分析結(jié)果構(gòu)建決策支持系統(tǒng)和主管信息系統(tǒng)等,幫助實(shí)現(xiàn)商業(yè)智能(BusinessIntelligence,BI)。如圖4-15所示,經(jīng)典的數(shù)據(jù)倉(cāng)庫(kù)包含數(shù)據(jù)源獲取、數(shù)據(jù)存儲(chǔ)和管理、數(shù)據(jù)分析與挖掘引擎以及前端應(yīng)用四個(gè)階段。實(shí)際上,數(shù)據(jù)倉(cāng)庫(kù)的數(shù)據(jù)來源于多種數(shù)據(jù)庫(kù)的存儲(chǔ)集合,4.2.5分布式數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)Hive圖4-15經(jīng)典的數(shù)據(jù)倉(cāng)庫(kù)體系結(jié)構(gòu)4.2.5分布式數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)Hive可能包含OLTP系統(tǒng)中的傳統(tǒng)SQL數(shù)據(jù)庫(kù)(MySQL),NoSQL數(shù)據(jù)庫(kù)(HBase),以及一些外部數(shù)據(jù)。經(jīng)過數(shù)據(jù)倉(cāng)庫(kù)的抽取、轉(zhuǎn)換和加載,以及聯(lián)機(jī)分析處理方法,提供企業(yè)級(jí)的商業(yè)智能服務(wù),包括:數(shù)據(jù)挖掘服務(wù)、數(shù)據(jù)分析服務(wù)和數(shù)據(jù)報(bào)表服務(wù)等。接下來,我們以電子商務(wù)系統(tǒng)的發(fā)展階段,介紹企業(yè)級(jí)業(yè)務(wù)數(shù)據(jù)從數(shù)據(jù)庫(kù)到數(shù)據(jù)倉(cāng)庫(kù)的發(fā)展階段:4.2.5分布式數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)Hive(1)發(fā)展初期:電子商務(wù)類項(xiàng)目的入行門檻較低,通過外包服務(wù)團(tuán)隊(duì)設(shè)計(jì)網(wǎng)站系統(tǒng)前端、后端和數(shù)據(jù)庫(kù),即可提供常規(guī)的電子商務(wù)服務(wù);(2)發(fā)展中期:經(jīng)過2~3年運(yùn)營(yíng)后,電子商務(wù)客戶和訂單日益增多,普通的數(shù)據(jù)查詢業(yè)務(wù)變得逐漸困難,這時(shí)候出現(xiàn)大數(shù)據(jù)規(guī)模,一般采用“分庫(kù)分表”的方式勉強(qiáng)支撐高并發(fā)的數(shù)據(jù)查詢服務(wù);(3)發(fā)展后期:經(jīng)過5~10年的沉淀后,伴隨著電子商務(wù)業(yè)務(wù)的指數(shù)級(jí)增長(zhǎng),面對(duì)海量的大數(shù)據(jù)存儲(chǔ),面臨越來越多復(fù)雜、深入的問題。例如:年輕女性用戶的化妝品購(gòu)買量與購(gòu)物促銷活動(dòng)之間的關(guān)系。這類問題需要通過聯(lián)機(jī)分析處理,從歷史沉淀的海量大數(shù)據(jù)中挖掘出結(jié)果,這時(shí)候就需要建立數(shù)據(jù)倉(cāng)庫(kù),通過數(shù)據(jù)倉(cāng)庫(kù)解決更多的商業(yè)智能需求。數(shù)據(jù)倉(cāng)庫(kù)是大數(shù)據(jù)時(shí)代的產(chǎn)物,面對(duì)海量大數(shù)據(jù)的快速處理需求,具有如下的特點(diǎn):4.2.5分布式數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)Hive(1)面向主題:與面向事務(wù)應(yīng)用的數(shù)據(jù)庫(kù)不同,數(shù)據(jù)倉(cāng)庫(kù)組織數(shù)據(jù)的方式是面向主題。例如:以“客戶價(jià)值分析”為主題的數(shù)據(jù)倉(cāng)庫(kù),需整合包含“存款業(yè)務(wù)”、“貸款業(yè)務(wù)”、“信用卡業(yè)務(wù)”和“理財(cái)業(yè)務(wù)”等多個(gè)業(yè)務(wù)數(shù)據(jù)庫(kù)的數(shù)據(jù),然后進(jìn)行主題分析;(2)集成性:數(shù)據(jù)倉(cāng)庫(kù)中的數(shù)據(jù)格式必須保持一致,才能為同一個(gè)主題提供分析服務(wù)。因此,數(shù)據(jù)倉(cāng)庫(kù)提供抽取、轉(zhuǎn)換、加載(ETL)方法,將不同結(jié)構(gòu)、不同類型、來自不同數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行集成服務(wù),轉(zhuǎn)換為相同的數(shù)據(jù)類型;(3)穩(wěn)定性:數(shù)據(jù)倉(cāng)庫(kù)中進(jìn)行的主題分析一般來自長(zhǎng)時(shí)間沉淀的大數(shù)據(jù),這些數(shù)據(jù)一旦進(jìn)入數(shù)據(jù)倉(cāng)庫(kù)后都會(huì)保留較長(zhǎng)時(shí)間,且一般極少更新,因此保持穩(wěn)定且不易丟失;4.2.5分布式數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)Hive(4)時(shí)變性:數(shù)據(jù)倉(cāng)庫(kù)中的大數(shù)據(jù)來自歷史沉淀數(shù)據(jù),隨著時(shí)間的推移,將會(huì)按照時(shí)間順序不斷追加歷史數(shù)據(jù),因此其中的大數(shù)據(jù)反映了歷史時(shí)變性。值得注意的是,數(shù)據(jù)倉(cāng)庫(kù)的出現(xiàn)并不是取代數(shù)據(jù)庫(kù),二者的應(yīng)用側(cè)重點(diǎn)不同。表4-12給出了SQL數(shù)據(jù)庫(kù)與數(shù)據(jù)倉(cāng)庫(kù)的對(duì)比。
在20世紀(jì)90年代,傳統(tǒng)的數(shù)據(jù)倉(cāng)庫(kù)建立在SQL數(shù)據(jù)庫(kù)之上,所能分析的數(shù)據(jù)量有限。隨著以分布式數(shù)據(jù)庫(kù)為代表的NoSQL數(shù)據(jù)庫(kù)興起,如今的數(shù)據(jù)倉(cāng)庫(kù)也建立在分布式文件系統(tǒng)之上,處理來自不同業(yè)務(wù)類型的結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù),同時(shí)也繼承分布式架構(gòu)的優(yōu)點(diǎn)。限于篇幅,本節(jié)重點(diǎn)介紹基于Hadoop分布式架構(gòu)的Hive數(shù)據(jù)倉(cāng)庫(kù),更多的數(shù)據(jù)倉(cāng)庫(kù)資料請(qǐng)讀者自行查閱。4.2.5分布式數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)Hive表4-12SQL數(shù)據(jù)庫(kù)與數(shù)據(jù)倉(cāng)庫(kù)的對(duì)比4.2.5分布式數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)HiveHive是構(gòu)建在Hadoop架構(gòu)上的數(shù)據(jù)倉(cāng)庫(kù),使用類似SQL(Hive-QL)語(yǔ)句進(jìn)行海量大數(shù)據(jù)的分析和處理。Hive繼承了Hadoop分布式文件系統(tǒng)(HDFS)和分布式并行計(jì)算模型(MapReduce)的優(yōu)勢(shì),具有良好的可擴(kuò)展性,且用戶通過學(xué)習(xí)Hive-QL即可將原本建立在SQL數(shù)據(jù)庫(kù)上的數(shù)據(jù)倉(cāng)庫(kù)移植到Hive中。Hive具有如下的特點(diǎn):(1)Hive為用戶提供Hive-QL語(yǔ)句進(jìn)行數(shù)據(jù)操作,若用戶有SQL語(yǔ)句操作基礎(chǔ),能夠快速上手并使用Hive-QL語(yǔ)句完成數(shù)據(jù)的分析操作;(2)Hive提供加載各種類型數(shù)據(jù)的機(jī)制,可靈活處理結(jié)構(gòu)化、非結(jié)構(gòu)化和半結(jié)構(gòu)化大數(shù)據(jù);4.2.5分布式數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)Hive(3)Hive作為Hadoop框架中的重要一環(huán),數(shù)據(jù)的存儲(chǔ)位置較為靈活,既可以存儲(chǔ)在HDFS中,又可以存儲(chǔ)在HBase中;(4)Hive可使用MapReduce或Spark計(jì)算過程執(zhí)行查詢操作,同時(shí)支持過程查詢語(yǔ)句,以及亞秒級(jí)的高效查詢;(5)Hive提供多種接口,不但包括命令行(CLI),還可以使用驅(qū)動(dòng)模塊(如:JDBC)。Hive是一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具,本身并沒有數(shù)據(jù)存儲(chǔ)功能。其存儲(chǔ)的數(shù)據(jù)來自HDFS或HBase,但是又不能直接從HDFS或HBase讀取數(shù)據(jù),而是使用Spark或MapReduce實(shí)現(xiàn)數(shù)據(jù)讀寫,其本質(zhì)是將Hive-QL語(yǔ)句轉(zhuǎn)化為相應(yīng)的MapReduce處理操作過程。4.2.5分布式數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)Hive如圖4-16所示,給出了基于Hadoop框架的Hive架構(gòu),可以看出Hive提供了多種訪問接口,且通過MapReduce建立與底層HDFS之間的聯(lián)系,對(duì)存儲(chǔ)在其中的海量大數(shù)據(jù)進(jìn)行分析和處理。該架構(gòu)中的名詞解釋如下:(1)元數(shù)據(jù):記錄Hive數(shù)據(jù)倉(cāng)庫(kù)中的模型定義,各層級(jí)之間的映射關(guān)系,監(jiān)控?cái)?shù)據(jù)倉(cāng)庫(kù)的數(shù)據(jù)狀態(tài),以及數(shù)據(jù)抽取、轉(zhuǎn)換、加載任務(wù)的運(yùn)行狀態(tài)。(2)解析器:對(duì)用戶所編寫的Hive-QL進(jìn)行基本的語(yǔ)法檢驗(yàn),保證正確性;4.2.5分布式數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)Hive(3)編譯器:將正確的Hive-QL語(yǔ)句翻譯成MapReduce邏輯執(zhí)行計(jì)劃;(4)優(yōu)化器:優(yōu)化轉(zhuǎn)化后的MapReduce邏輯,去掉重復(fù)執(zhí)行的邏輯;(5)執(zhí)行器:將優(yōu)化后的邏輯執(zhí)行轉(zhuǎn)化成物理計(jì)劃執(zhí)行。0301024.2.5分布式數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)Hive圖4-16基于Hadoop框架的Hive架構(gòu)034.3
大數(shù)據(jù)分布式計(jì)算ONE4.3.1大數(shù)據(jù)分布式批處理框架數(shù)據(jù)的分析與計(jì)算是體現(xiàn)數(shù)據(jù)價(jià)值的重要手段之一,伴隨著數(shù)據(jù)量日益增多的大數(shù)據(jù)分析和計(jì)算場(chǎng)景,研究人員開始構(gòu)建由多個(gè)CPU計(jì)算單元組成的并行計(jì)算框架。例如:信息傳遞接口(MPI)定義了一組具有可移植性的編程接口,提供跨語(yǔ)言的通信協(xié)議,在多臺(tái)計(jì)算機(jī)之間構(gòu)建高性能的消息傳遞;開放運(yùn)算語(yǔ)言(OpenCL)是面向異構(gòu)系統(tǒng)通用目的并行編程的開放式、免費(fèi)標(biāo)準(zhǔn),便于開發(fā)人員面向高性能并行計(jì)算機(jī)編寫輕便的代碼;統(tǒng)一計(jì)算設(shè)備架構(gòu)(CUDA)是顯卡廠商N(yùn)VIDIA提供的并行計(jì)算平臺(tái)和編程模型,利用圖形處理器(GPU)的處理能力,能夠大幅提升并行計(jì)算的性能。在這些經(jīng)典的并行計(jì)算框架中,都采用“數(shù)據(jù)向計(jì)算靠攏”的方式,也就是在計(jì)算前將海量大數(shù)據(jù)存儲(chǔ)在不同機(jī)器上,然后通過高性能的消息傳遞、編程語(yǔ)言和編程模型等方式,在計(jì)算時(shí)將數(shù)據(jù)“拉取”到用于計(jì)算的高性能機(jī)器上,從而實(shí)現(xiàn)高性能的并行計(jì)算框架。4.3.1大數(shù)據(jù)分布式批處理框架隨著海量大數(shù)據(jù)的快速增長(zhǎng),傳統(tǒng)并行計(jì)算在數(shù)據(jù)傳輸中出現(xiàn)了性能瓶頸。為了在大數(shù)據(jù)中構(gòu)建更高性能的并行計(jì)算框架,MapReduce分布式計(jì)算模型將復(fù)雜的、大規(guī)模集群上的并行計(jì)算,高度地抽象為Map和Reduce函數(shù),該兩個(gè)函數(shù)的核心思想都源于函數(shù)式編程語(yǔ)言,開發(fā)人員即使沒有任何分布式并行計(jì)算開發(fā)經(jīng)驗(yàn),也能夠通過編寫Map函數(shù)和Reduce函數(shù),輕松將大數(shù)據(jù)的分析和計(jì)算并行地部署到計(jì)算機(jī)集群中。傳統(tǒng)并行計(jì)算架構(gòu)傾向于“計(jì)算密集型”應(yīng)用,而分布式并行計(jì)算架構(gòu)則傾向于“數(shù)據(jù)密集型”應(yīng)用,二者并沒有高下之分,只是適用于不同的應(yīng)用場(chǎng)景。4.3.1大數(shù)據(jù)分布式批處理框架MapReduce架構(gòu)的基本計(jì)算模型和處理思想MapReduce架構(gòu)的基本計(jì)算模型和處理思想包含如下三點(diǎn):(1)采用“分而治之”的策略對(duì)付大數(shù)據(jù):對(duì)于計(jì)算不包含依賴關(guān)系的大數(shù)據(jù),可將其切分成許多獨(dú)立的分片,并行處理每個(gè)數(shù)據(jù)分片。(2)編程過程上升到抽象的Map函數(shù)和Reduce函數(shù):開發(fā)人員編寫MapReduce計(jì)算模型時(shí)只需要實(shí)現(xiàn)Map函數(shù)和Reduce函數(shù),二者都通過統(tǒng)一的數(shù)據(jù)格式“鍵值對(duì)<key,value>”實(shí)現(xiàn)輸入輸出,按照一定的規(guī)則進(jìn)行消息傳遞。(3)統(tǒng)一架構(gòu)為開發(fā)人員隱藏底層實(shí)現(xiàn)細(xì)節(jié):傳統(tǒng)并行計(jì)算架構(gòu)缺少高層并行編程模型(如:MPI),開發(fā)人員需要自己設(shè)計(jì)存儲(chǔ)、計(jì)算和任務(wù)分發(fā),難度較大。MapReduce模型的編程過程對(duì)于開
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- T-CFIAS 3010-2023 飼料添加劑 乙氧基喹啉
- 初中英語(yǔ)教學(xué)工作參考計(jì)劃
- 溝通談判技巧-主課件B
- 商店選址分析報(bào)告范文
- 2024學(xué)年三省G20高三語(yǔ)文(上)12月聯(lián)考試卷附答案解析
- 《技術(shù)試驗(yàn)》課件
- 2024-2025學(xué)年年八年級(jí)數(shù)學(xué)人教版下冊(cè)專題整合復(fù)習(xí)卷第11章 一次函數(shù)單元測(cè)試(BC卷)(含答案)
- 小課題研究報(bào)告范文
- 東莞春節(jié)旅游報(bào)告范文
- 2025年福州貨運(yùn)從業(yè)資格證模擬考試試題題庫(kù)及答案
- 談?wù)勄嗄甏髮W(xué)生在中國(guó)式現(xiàn)代化征程上的使命與擔(dān)當(dāng)范文(6篇)
- DB13-T 5660-2023 水文水井分層抽水技術(shù)規(guī)范
- 二年級(jí)上冊(cè)綜合實(shí)踐測(cè)試卷
- 互聯(lián)網(wǎng)金融外文文獻(xiàn)翻譯
- 產(chǎn)前篩查、診斷及新生兒疾病篩查
- 小學(xué)《科學(xué)》期末測(cè)評(píng)方案
- 友邦保險(xiǎn)“愈從容”重疾專案管理服務(wù)手冊(cè)(完整版)
- 會(huì)計(jì)師事務(wù)所筆試題目整理
- 2023年消防接警員崗位理論知識(shí)考試參考題庫(kù)(濃縮500題)
- ?;⒅闊o機(jī)保溫板外墻施工方案
- GB/T 7702.20-2008煤質(zhì)顆?;钚蕴吭囼?yàn)方法孔容積和比表面積的測(cè)定
評(píng)論
0/150
提交評(píng)論