《大數(shù)據(jù)導(dǎo)論》課件 第4章 大數(shù)據(jù)處理_第1頁
《大數(shù)據(jù)導(dǎo)論》課件 第4章 大數(shù)據(jù)處理_第2頁
《大數(shù)據(jù)導(dǎo)論》課件 第4章 大數(shù)據(jù)處理_第3頁
《大數(shù)據(jù)導(dǎo)論》課件 第4章 大數(shù)據(jù)處理_第4頁
《大數(shù)據(jù)導(dǎo)論》課件 第4章 大數(shù)據(jù)處理_第5頁
已閱讀5頁,還剩155頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第4章大數(shù)據(jù)處理演講人2024-08-08目錄4.1大數(shù)據(jù)處理框架4.2大數(shù)據(jù)分布式存儲4.3大數(shù)據(jù)分布式計算014.1大數(shù)據(jù)處理框架4.1.1主流大數(shù)據(jù)處理框架簡介大數(shù)據(jù)處理的基本環(huán)節(jié)包含大數(shù)據(jù)存儲與大數(shù)據(jù)分析兩大部分。其中大數(shù)據(jù)存儲包含數(shù)據(jù)采集、存儲和管理,大數(shù)據(jù)分析包含數(shù)據(jù)計算、挖掘和應(yīng)用。大數(shù)據(jù)技術(shù)是眾多技術(shù)的組合,缺一不可,共同組成大數(shù)據(jù)的處理體系。因此,業(yè)界針對不同特性的大數(shù)據(jù)及其分析技術(shù),設(shè)計并構(gòu)建了大數(shù)據(jù)處理框架。大數(shù)據(jù)處理框架集成了各類技術(shù),能夠勝任不同特性的大數(shù)據(jù)存儲與計算。表4-1給出了代表性的大數(shù)據(jù)處理框架及其提供的大數(shù)據(jù)處理技術(shù)。4.1.1主流大數(shù)據(jù)處理框架簡介表4-1代表性的大數(shù)據(jù)處理框架及其所提供的大數(shù)據(jù)處理技術(shù)4.1.1主流大數(shù)據(jù)處理框架簡介批處理大數(shù)據(jù)計算框架批處理計算是大數(shù)據(jù)最早的經(jīng)典應(yīng)用場景之一。批處理計算的需求源于數(shù)據(jù)挖掘在大數(shù)據(jù)場景下的拓展。在傳統(tǒng)小規(guī)模數(shù)據(jù)的分析與挖掘中,通常使用經(jīng)典的數(shù)據(jù)挖掘方法,從數(shù)據(jù)中挖掘出有意義的知識,從而正確的指導(dǎo)生產(chǎn)、生活中的決策。例如:奔馳汽車的生產(chǎn)線通過收集數(shù)據(jù)進(jìn)行分析和挖掘,優(yōu)化生產(chǎn)線提升生產(chǎn)的效率。然而,隨著大數(shù)據(jù)時代的來臨,傳統(tǒng)數(shù)據(jù)挖掘方法已經(jīng)無法滿足大數(shù)據(jù)場景的需求。通常,在單臺機(jī)器上設(shè)計的數(shù)據(jù)挖掘方法通常針對兆字節(jié)(MB)級,當(dāng)數(shù)據(jù)拓展至十億字節(jié)(GB)級別時,數(shù)據(jù)挖掘方法所需的時間將會呈指數(shù)增長,無法在給定的時間內(nèi)獲得挖掘結(jié)果。批處理計算的誕生就是為了解決大數(shù)據(jù)場景下的數(shù)據(jù)分析與挖掘。其中,MapReduce是最具代表性的大數(shù)據(jù)批處理計算模型。MapReduce支持分布式編程,能夠?qū)鹘y(tǒng)的數(shù)據(jù)分析與挖掘方法擴(kuò)展至并行計算過程,4.1.1主流大數(shù)據(jù)處理框架簡介批處理大數(shù)據(jù)計算框架可用于太字節(jié)(TB)級海量大數(shù)據(jù)的分析與挖掘。實際上,MapReduce將復(fù)雜的數(shù)據(jù)分析與挖掘任務(wù),抽象化成Map函數(shù)和Reduce函數(shù),數(shù)據(jù)分析與挖掘人員可以輕松將所編寫的方法拓展至并行計算框架,并運行在分布式系統(tǒng)上完成海量大數(shù)據(jù)的計算。MapReduce批處理計算模型基于磁盤讀寫海量大數(shù)據(jù),因此受到磁盤I/O瓶頸的影響,具有較大的時延性。為了解決高時延問題,SparkCore批處理框架則基于分布式內(nèi)存讀寫海量大數(shù)據(jù),具有較低延遲,能夠進(jìn)行更高效率的分布式批處理計算任務(wù)。4.1.1主流大數(shù)據(jù)處理框架簡介流式大數(shù)據(jù)計算框架流式大數(shù)據(jù)是大量、快速、時變的以“流水”形式持續(xù)到達(dá)系統(tǒng)的大數(shù)據(jù)的統(tǒng)稱。近年來,隨著物聯(lián)網(wǎng)和人工智能技術(shù)的興起,以傳感器為代表的大數(shù)據(jù)采集形成了流式大數(shù)據(jù),如網(wǎng)絡(luò)監(jiān)控攝像頭、Web2.0應(yīng)用視頻流等。流式大數(shù)據(jù)的來源多種多樣,與傳統(tǒng)靜態(tài)大數(shù)據(jù)的區(qū)別包含三個方面:(1)始終在線,持續(xù)流動:新數(shù)據(jù)像“水流”一樣源源不斷生成,很少會出現(xiàn)數(shù)據(jù)不足的情況,但是對流式大數(shù)據(jù)的分析要強(qiáng)調(diào)實時性、突發(fā)性、無序性和易失性;(2)結(jié)構(gòu)松散,隨意變動:流式大數(shù)據(jù)的結(jié)構(gòu)較為松散,其原因在于流式大數(shù)據(jù)環(huán)境對數(shù)據(jù)結(jié)構(gòu)和類型要求不嚴(yán)格,另外多數(shù)流式大數(shù)據(jù)處于新興行業(yè),可能存在不同的數(shù)據(jù)格式或者隨時出現(xiàn)數(shù)據(jù)流終端的可能;4.1.1主流大數(shù)據(jù)處理框架簡介流式大數(shù)據(jù)計算框架(3)高基數(shù)存儲特性:與批處理計算任務(wù)可以重復(fù)多次不同,流式大數(shù)據(jù)的計算往往僅能進(jìn)行一次,對于存儲環(huán)境要求更為嚴(yán)格,對大規(guī)模實時持續(xù)到達(dá)系統(tǒng)的數(shù)據(jù)讀寫性能要求更高。

由于流式大數(shù)據(jù)呈現(xiàn)大規(guī)模實時持續(xù)到達(dá)的特性,隱含在大數(shù)據(jù)中有價值的知識將會伴隨著時間的流逝而消失。針對這類在時間分辨率和數(shù)量上接近于無限的動態(tài)大數(shù)據(jù),在進(jìn)行分析和計算時需要給出秒級甚至亞秒級響應(yīng)。因此,流式大數(shù)據(jù)計算框架要求有實時分析能力,并且能夠針對高基數(shù)存儲、結(jié)構(gòu)松散且持續(xù)到達(dá)的數(shù)據(jù)流進(jìn)行計算,給出有價值的分析結(jié)果。目前,由于流式大數(shù)據(jù)在商業(yè)互聯(lián)網(wǎng)活動中呈現(xiàn)占比越來越高的趨勢,大型企業(yè)已經(jīng)開發(fā)了用于企業(yè)級流式大數(shù)據(jù)處理的框架。例如:阿里巴巴開發(fā)了銀河流數(shù)據(jù)計算平臺,百度開發(fā)了DStream流式大數(shù)據(jù)計算框架。4.1.1主流大數(shù)據(jù)處理框架簡介流式大數(shù)據(jù)計算框架在開源流式大數(shù)據(jù)框架中,也涌現(xiàn)了成熟、可靠的框架,例如Storm流式大數(shù)據(jù)計算框架,可以輕松、可靠的處理各種結(jié)構(gòu)的數(shù)據(jù)流,每秒給出百萬級數(shù)據(jù)計算結(jié)果響應(yīng)。另外,依托于Spark成熟的體系架構(gòu),架構(gòu)在其上的SparkStreaming流式計算框架,也具有快速處理流式大數(shù)據(jù)、給出亞秒級響應(yīng)的能力。4.1.1主流大數(shù)據(jù)處理框架簡介圖式大數(shù)據(jù)計算框架“圖數(shù)據(jù)”的基本元素為“圖(Graph)”,最基本的圖結(jié)構(gòu)由頂點和邊組成,每個頂點代表一個實體(事務(wù)、類別或數(shù)據(jù)),每條邊代表兩個實體之間的關(guān)聯(lián)關(guān)系。兩個實體之間的關(guān)系可以用有向邊或無向邊表示。如圖4-1所示,坐在教室中的三位學(xué)生分別表示一個節(jié)點,三位同學(xué)之間的關(guān)系為邊,關(guān)系可以被廣泛的定義:同學(xué)關(guān)系、同桌關(guān)系、合作關(guān)系等。由海量圖中的頂點和關(guān)系組成的大數(shù)據(jù)稱為圖式大數(shù)據(jù),圖式大數(shù)據(jù)的計算一般使用基于圖的方法分析圖中的頂點和連接關(guān)系,從中挖掘出有意義的知識。通常來講,圖式大數(shù)據(jù)的計算包括:查詢圖數(shù)據(jù)、統(tǒng)計圖數(shù)據(jù)基本信息、可視化圖數(shù)據(jù),以及將圖數(shù)據(jù)合并到數(shù)據(jù)挖掘任務(wù)中,進(jìn)行有意義的知識挖掘。4.1.1主流大數(shù)據(jù)處理框架簡介圖式大數(shù)據(jù)計算框架4-1圖數(shù)據(jù)的基本構(gòu)成結(jié)構(gòu)4.1.1主流大數(shù)據(jù)處理框架簡介圖式大數(shù)據(jù)計算框架當(dāng)前,隨著社交網(wǎng)絡(luò)、智能信息系統(tǒng)的興起,圖式大數(shù)據(jù)的計算被應(yīng)用到許多場景:(1)社交網(wǎng)絡(luò)分析:在Web2.0時代的社交平臺中,社交網(wǎng)絡(luò)是常見的圖式大數(shù)據(jù),代表中不同個體與組織之間的社會關(guān)系,通過對其中的大數(shù)據(jù)計算獲得復(fù)雜的社交網(wǎng)絡(luò)關(guān)系。例如:微博使用圖式數(shù)據(jù)庫管理社交網(wǎng)絡(luò)關(guān)系,實現(xiàn)好友推薦等;(2)電子商務(wù)推薦:電子商務(wù)場景中的圖式大數(shù)據(jù)為用戶和商品,其中不同用戶、不同商品為節(jié)點,用戶與用戶、用戶與商品以及商品與商品之間的關(guān)系組成了圖式大數(shù)據(jù)。針對用戶與商品之間的圖網(wǎng)絡(luò),可以有效分析購物偏好。例如:淘寶使用圖式大數(shù)據(jù)實現(xiàn)用戶感興趣的商品推薦;4.1.1主流大數(shù)據(jù)處理框架簡介圖式大數(shù)據(jù)計算框架(3)交通網(wǎng)絡(luò)應(yīng)用:交通網(wǎng)絡(luò)的形式多種多樣,例如:飛機(jī)、高鐵、地鐵或公交車等。交通網(wǎng)絡(luò)可以抽象成站點和乘客的圖式大數(shù)據(jù),站點與站點之間、站點與乘客之間的關(guān)系能夠組成有意義的圖式大數(shù)據(jù),通過對其挖掘優(yōu)化交通線路,提升乘客舒適度。實際上,批處理計算框架具有多階段、粗粒度計算特性,流計算框架則具有單階段、快速計算特性,都無法表達(dá)圖式大數(shù)據(jù)的稀疏架構(gòu)、細(xì)粒度等特征,無法直接應(yīng)用到圖式大數(shù)據(jù)計算。因此,針對海量圖式大數(shù)據(jù),需要設(shè)計全新的基于圖的分布式計算框架,將傳統(tǒng)基于圖的計算方法擴(kuò)展至分布式場景,用于圖式大數(shù)據(jù)的計算。目前,已有許多圖式大數(shù)據(jù)計算框架不斷涌現(xiàn)。例如,Pregel是基于批量同步并行模型(BSP)實現(xiàn)的并行圖式大數(shù)據(jù)計算框架,通過分布式、可擴(kuò)展且具有容錯機(jī)制的分布式平臺,構(gòu)建大型圖的遍歷、最短路徑、最大流等常用的圖計算方法,取得了不錯的效果。另外,依托于Spark成熟的體系架構(gòu),架構(gòu)在其上的SparkGraphX圖式計算框架,也具有快速處理大型圖式大數(shù)據(jù)的能力。4.1.1主流大數(shù)據(jù)處理框架簡介大數(shù)據(jù)實時查詢分析框架實時查詢分析是數(shù)據(jù)分析與計算的最重要任務(wù)之一。在傳統(tǒng)的數(shù)據(jù)存儲與管理中,數(shù)據(jù)通常存儲在關(guān)系型數(shù)據(jù)庫中,依靠關(guān)系型數(shù)據(jù)庫的結(jié)構(gòu)化查詢語言(SQL)的強(qiáng)大檢索能力,可以快速進(jìn)行兆字節(jié)(MB)級數(shù)據(jù)的實時查詢分析。然而,在大數(shù)據(jù)時代背景下,若依然將太字節(jié)(TB)級大數(shù)據(jù)存儲在關(guān)系型數(shù)據(jù)庫中,則很難直接通過SQL獲得秒級的響應(yīng)。針對大數(shù)據(jù)實時查詢分析需求,一些實時或準(zhǔn)實時響應(yīng)的大數(shù)據(jù)查詢分析框架應(yīng)運而生。大型企業(yè)已經(jīng)開發(fā)了用于企業(yè)級大數(shù)據(jù)實時查詢分析框架。例如:Google開發(fā)了Dremel實時交互查詢系統(tǒng),通過多級樹狀尋址方法和列式存儲結(jié)構(gòu),做到了對千萬億字節(jié)(PB)級數(shù)據(jù)的秒級查詢響應(yīng)。4.1.1主流大數(shù)據(jù)處理框架簡介大數(shù)據(jù)實時查詢分析框架在開源大數(shù)據(jù)實時查詢分析框架中,也涌現(xiàn)了快速、準(zhǔn)確的實時查詢框架。在Hadoop強(qiáng)大的分布式存儲架構(gòu)基礎(chǔ)上,研究人員開發(fā)出了列式存儲結(jié)構(gòu)的HBase數(shù)據(jù)庫,可實現(xiàn)實時快速的大數(shù)據(jù)查詢?nèi)蝿?wù);此外,為了實現(xiàn)大數(shù)據(jù)挖掘任務(wù)的實時響應(yīng),研究人員還開發(fā)出了Hive數(shù)據(jù)倉庫,可實現(xiàn)快速的大數(shù)據(jù)挖掘分析任務(wù)。同樣,依托于Spark成熟的體系架構(gòu),架構(gòu)在其上的SparkSQL則實現(xiàn)了海量大數(shù)據(jù)上的關(guān)系型查詢框架,做到了海量大數(shù)據(jù)的實時查詢?nèi)蝿?wù)。4.1.1主流大數(shù)據(jù)處理框架簡介混合大數(shù)據(jù)計算框架當(dāng)前,大數(shù)據(jù)已經(jīng)進(jìn)入全新的時代,既有靜態(tài)存儲的大數(shù)據(jù)需要進(jìn)行批處理計算任務(wù),又有以物聯(lián)網(wǎng)為代表的實時流式大數(shù)據(jù)需要進(jìn)行流式處理計算任務(wù),還有以Web2.0時代為代表的社交網(wǎng)絡(luò)圖數(shù)據(jù)需要進(jìn)行圖式處理計算任務(wù),以及在大數(shù)據(jù)場景下的實時查詢?nèi)蝿?wù),因此在Hadoop基礎(chǔ)上逐漸發(fā)展出了混合大數(shù)據(jù)計算框架,其中最具代表性的是Spark框架。如今,Spark框架集成了上述所有任務(wù)的實現(xiàn)方式,構(gòu)建出了“一體適用”的混合大數(shù)據(jù)計算框架,能夠適應(yīng)不同時期的大數(shù)據(jù)計算任務(wù)。4.1.2批處理框架HadoopHadoop是最早成功構(gòu)建大數(shù)據(jù)批處理的計算框架,起源于Apache軟件基金會的子項目Lucene下的Nutch。該項目早期的設(shè)計目標(biāo)是構(gòu)建大型開源的網(wǎng)絡(luò)搜索引擎,實現(xiàn)網(wǎng)頁抓取、索引、查詢等功能。隨著項目的不斷發(fā)展,逐漸出現(xiàn)了一個亟待解決的瓶頸:隨著網(wǎng)頁數(shù)量呈指數(shù)級增長時,如何解決對數(shù)億級別的網(wǎng)頁大數(shù)據(jù)構(gòu)建存儲、索引和查詢功能。與此同時,Google公司也在探索企業(yè)級的數(shù)億級別網(wǎng)頁存儲和索引,并于2003—2004年發(fā)表了三篇論文提供了相應(yīng)的解決方案:(1)分布式文件系統(tǒng)(GoogleFileSystem,GFS),用于海量網(wǎng)頁大數(shù)據(jù)的存儲;(2)分布式計算框架(GoogleMapReduce),用于海量網(wǎng)頁的索引和計算;4.1.2批處理框架Hadoop(3)分布式結(jié)構(gòu)化存儲系統(tǒng)(GoogleBigTable),用于海量網(wǎng)頁大數(shù)據(jù)的快速檢索;基于Google對于海量大數(shù)據(jù)網(wǎng)頁存儲、檢索和計算的框架,Lucene+Nutch項目創(chuàng)始人DougCutting實現(xiàn)了開源分布式文件系統(tǒng)、分布式計算框架和分布式結(jié)構(gòu)化存儲系統(tǒng),并將所實現(xiàn)的系統(tǒng)從Nutch項目中剝離出來,成為了獨立的項目框架并命名為Hadoop。在Apache基金會的支持下,Hadoop項目在2008年成為頂級項目,并得到了快速的發(fā)展。表4-2給出了ApacheHadoop項目的創(chuàng)建到發(fā)展的關(guān)鍵時間節(jié)點。1.2批處理框架Hadoop表4-2ApacheHadoop項目的發(fā)展關(guān)鍵時間節(jié)點4.1.2批處理框架HadoopHadoop批處理框架是一個對海量大數(shù)據(jù)進(jìn)行分布式存儲和計算的軟件框架,采用Java語言編寫,具有很好的跨平臺特性,且能夠部署到廉價的計算機(jī)集群中。面向海量增長的大數(shù)據(jù)應(yīng)用場景,Hadoop框架能夠提供可靠、高效、準(zhǔn)確且具有良好伸縮性的大數(shù)據(jù)存儲和計算,其主要優(yōu)點包括:(1)可靠性高:采用冗余數(shù)據(jù)存儲方式,每份數(shù)據(jù)擁有多個副本存儲在不同存儲設(shè)備中,當(dāng)某個副本出現(xiàn)故障時能夠快速修復(fù)、還原,具有較高的大數(shù)據(jù)存儲可靠性;(2)擴(kuò)展性好:采用分布式架構(gòu)進(jìn)行大數(shù)據(jù)的存儲,底層僅采用廉價存儲設(shè)備組成分布式架構(gòu),對其進(jìn)行容量擴(kuò)展僅需增加廉價存儲設(shè)備,具有不錯的可擴(kuò)展特性;4.1.2批處理框架Hadoop(3)效率高:采用MapReduce分布式計算技術(shù),將計算任務(wù)分配到不同機(jī)器中并行運行,并將計算結(jié)果匯總到總臺,具有較高的計算效率;(4)穩(wěn)定性佳:分別采用冗余式多副本存儲提升存儲的穩(wěn)定,以及采用負(fù)載均衡的機(jī)制自動將任務(wù)分配給空閑資源,并自動將失敗任務(wù)重新分配,具有極佳的穩(wěn)定性;(5)成本低:一方面Hadoop的底層存儲、計算采用廉價計算機(jī)集群,另一方面Hadoop穩(wěn)定運行在Linux操作系統(tǒng),且支持多種語言的操作,如C++、Java和Python等。

經(jīng)過近15年的發(fā)展,Hadoop項目由早期的分布式存儲和分布式計算框架,經(jīng)過多個版本迭代逐漸形成了批處理框架的生態(tài)體系,對不同格式、結(jié)構(gòu)的大數(shù)據(jù)都有很好的支持,針對各種應(yīng)用場景的批處理計算都有不錯的方案,同時在資源管理和分配上也有良好支撐。表4-3給出了批處理框架Hadoop的關(guān)鍵版本更迭情況。4.1.2批處理框架Hadoop表4-3Hadoop的關(guān)鍵版本更迭情況4.1.2批處理框架Hadoop實際上,Hadoop項目源于Apache基金會,該基金會的宗旨是構(gòu)建免費、開源的軟件項目。因此,經(jīng)過多年版本更迭,在Hadoop在核心組件(HadoopCommon、分布式文件系統(tǒng)、Mapreduce分布式計算模型、通用資源協(xié)調(diào)系統(tǒng)YARN)基礎(chǔ)上,逐步發(fā)展成Hadoop生態(tài)系統(tǒng),如圖4-2所示。Hadoop生態(tài)系統(tǒng)是通過組合現(xiàn)有的各個功能組件,共同構(gòu)建和提供各類場景中大數(shù)據(jù)存儲和分析問題的解決方案。4.1.2批處理框架Hadoop圖4-2Hadoop生態(tài)系統(tǒng)4.1.2批處理框架Hadoop在Hadoop生態(tài)系統(tǒng)中,各類組件共同工作,提供各類數(shù)據(jù)的采集、分析、存儲和維護(hù)等服務(wù),重要組件的功能為:(1)HDFS:Hadoop分布式文件系統(tǒng),用于靜態(tài)大數(shù)據(jù)的分布式存儲,是核心組件之一;(2)MapReudce:分布式計算框架,用于大數(shù)據(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ù)庫,適合于非結(jié)構(gòu)化數(shù)據(jù)的存儲,底層基于HDFS實現(xiàn)數(shù)據(jù)存儲,具有較高的可靠性、可伸縮性和性能;(5)Hive:Hadoop分布式數(shù)據(jù)倉庫,用于對海量大數(shù)據(jù)進(jìn)行提取、轉(zhuǎn)化加載,能夠使用MapReduce邏輯構(gòu)建快速的數(shù)據(jù)查詢和分析服務(wù),提供類似于SQL的Hive-QL查詢語句;4.1.2批處理框架Hadoop(6)Pig:定義在Hadoop之上的高級過程語言,能夠使用簡單的PigLatin語法構(gòu)建MapReduce任務(wù),實現(xiàn)大型半結(jié)構(gòu)化數(shù)據(jù)的查詢和分析;(7)Drill:低延遲的分布式海量大數(shù)據(jù)交互式查詢引擎,能夠支持結(jié)構(gòu)化、半結(jié)構(gòu)化以及嵌套數(shù)據(jù)的查詢和分析,并兼容SQL語法,性能較高;(8)Mahout&SparkMLlib:開源機(jī)器學(xué)習(xí)庫,實現(xiàn)了包括聚類、分類、推薦過濾和頻繁子集挖掘的算法,并通過Hadoop&Spark進(jìn)行算法的分布式實現(xiàn),能夠有效地擴(kuò)展至分布式計算框架中;(9)Spark:專為大規(guī)模數(shù)據(jù)處理而設(shè)計的快速、通用計算引擎,基于內(nèi)存的分布式查詢和計算,擁有更高的效率,是Hadoop的補(bǔ)充。目前,Spark已經(jīng)逐漸發(fā)展出支持各種大數(shù)據(jù)分析與計算的模型,并且開放多種編程接口,實用性較強(qiáng);4.1.2批處理框架Hadoop(10)Oozie:用于管理Hadoop任務(wù)的工作流調(diào)度系統(tǒng);(11)Flume:分布式、高可用性的數(shù)據(jù)采集、聚合系統(tǒng),能夠?qū)adoop集群運行過程中的海量日志大數(shù)據(jù)匯總到中央存儲系統(tǒng)中;(12)Kafka:自動化數(shù)據(jù)采集工具,支持高吞吐、分布式的消息訂閱,可用于處理消費者在網(wǎng)站中的所有動作流,例如網(wǎng)頁瀏覽、搜索和其他行為等;(13)Storm:流式計算框架,適合于流式大數(shù)據(jù)的分析與計算;(14)Solr&Lucene:提供在分布式文件系統(tǒng)中進(jìn)行全文搜索的工具,通過豐富的查詢語言提供高效率的搜索引擎,同時實現(xiàn)了可配置、可擴(kuò)展的功能;(15)Sqoop:數(shù)據(jù)傳遞工具,支持傳統(tǒng)關(guān)系數(shù)據(jù)庫(如:MySQL、SQLSever)與分布式數(shù)據(jù)管理系統(tǒng)(HDFS、Hive)進(jìn)行數(shù)據(jù)傳遞,使Hadoop能夠快速獲取關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù);4.1.2批處理框架Hadoop(16)ZooKeeper:Hadoop分布式應(yīng)用程序協(xié)調(diào)服務(wù)系統(tǒng),能夠為分布式的存儲和計算任務(wù)提供一致性服務(wù),包括配置維護(hù)、域名服務(wù)、分布式同步和組服務(wù)等;(17)Ambari:基于Web的Hadoop集群配置、管理和監(jiān)控系統(tǒng),支持Hadoop集群的快速可視化地安裝、運維和監(jiān)視,極大的降低了Hadoop集群安裝與配置的難度;4.1.3流處理框架Storm隨著物聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,逐漸興起以傳感器實時數(shù)據(jù)為基礎(chǔ)的數(shù)據(jù)密集型應(yīng)用,在交通監(jiān)控、金融證券、氣象測控和生產(chǎn)制造等領(lǐng)域中具有廣泛應(yīng)用,稱為流處理。流處理面向的是流數(shù)據(jù),即一組順序、大量、快速、連續(xù)到達(dá)的序列數(shù)據(jù)。一般情況下,流數(shù)據(jù)可被視為一個隨時間延續(xù)無限增長的動態(tài)數(shù)據(jù)集合,又被稱為“動態(tài)大數(shù)據(jù)”。相對于流數(shù)據(jù),傳統(tǒng)大數(shù)據(jù)可被稱為“靜態(tài)大數(shù)據(jù)”,即所有的歷史大數(shù)據(jù)都“靜止”的存儲在分布式文件系統(tǒng)、分布式數(shù)據(jù)庫或分布式數(shù)據(jù)倉庫中,研究者可利用數(shù)據(jù)分析和計算工具,從存儲的海量大數(shù)據(jù)中挖掘出有意義的知識,對“靜態(tài)大數(shù)據(jù)”的處理稱為“批處理”。如今,流數(shù)據(jù)隨處可見,如圖4-3所示,數(shù)據(jù)像流水一樣持續(xù)到達(dá),大量的應(yīng)用具有這樣的特點,例如:4.1.3流處理框架Storm(1)交通工具、工業(yè)設(shè)備、氣象儀器等將傳感器的數(shù)據(jù)持續(xù)發(fā)送給服務(wù)器,由服務(wù)器進(jìn)行性能監(jiān)測,提前預(yù)測交通事故、設(shè)備故障以及惡劣天氣等;11(2)金融證券市場中的交易數(shù)據(jù)符合流數(shù)據(jù)特點,當(dāng)交易市場開啟時將會源源不斷產(chǎn)生交易數(shù)據(jù),由服務(wù)器進(jìn)行監(jiān)測,計算風(fēng)險價值,根據(jù)實時交易數(shù)據(jù)平衡投資組合;22(3)用于定位功能的收集使用高德地圖導(dǎo)航路徑,手機(jī)將實時的位置信息持續(xù)發(fā)送給服務(wù)器,由服務(wù)器分析位置信息的變化,從而優(yōu)化導(dǎo)航路徑;33(4)淘寶“雙十一”促銷活動,根據(jù)實時在線的交易數(shù)據(jù),分析不同類別的商品銷售情況和廣告點擊情況,從而動態(tài)調(diào)整廣告樣式、文案,提升銷售額。444.1.3流處理框架Storm針對流數(shù)據(jù)的處理則稱為“流處理”,其處理的數(shù)據(jù)記錄為流數(shù)據(jù)最小組成單元。表4-4給出了流數(shù)據(jù)與靜態(tài)大數(shù)據(jù)的對比。圖4-3常見的流數(shù)據(jù)和流處理過程(以騰訊云為例)4.1.3流處理框架Storm表4-4流數(shù)據(jù)與靜態(tài)大數(shù)據(jù)的對比4.1.3流處理框架Storm根據(jù)流數(shù)據(jù)的特點可知,流處理對應(yīng)的計算方法稱為實時計算。圖4-4所示,給出了批處理和流處理的示意圖。我們可知兩類大數(shù)據(jù)處理的區(qū)別:(1)與批處理逐漸積累靜態(tài)的大數(shù)據(jù)不同,流處理將大數(shù)據(jù)平攤至每個時間節(jié)點,連續(xù)進(jìn)行小批量的數(shù)據(jù)傳輸和處理,數(shù)據(jù)實時地持續(xù)流動,計算完成后的數(shù)據(jù)直接丟棄;(2)以分布式數(shù)據(jù)庫為例,批處理維護(hù)的是一張張數(shù)據(jù)表,對數(shù)據(jù)表實施計算邏輯,且支持反復(fù)修改計算邏輯,挖掘有意義的知識;相反,流計算實現(xiàn)需定義好計算邏輯,提交到流處理框架后,在處理進(jìn)程中無法更改計算邏輯;4.1.3流處理框架Storm圖4-4批處理與流處理過程對比4.1.3流處理框架Storm(3)批處理每次將所需的大數(shù)據(jù)一次性提交給計算邏輯,對計算結(jié)果返回的時間要求較低,流處理則是每次小批量計算后,將結(jié)果立即顯示在實時在線系統(tǒng)中,要求在秒級內(nèi)返回計算結(jié)果。

如上所述,流處理面向的流數(shù)據(jù)格式復(fù)雜、來源廣泛,且單點時間內(nèi)的數(shù)據(jù)量巨大,對實時計算帶來了新的挑戰(zhàn)。在此背景下,大數(shù)據(jù)技術(shù)逐漸發(fā)展出一門新的學(xué)科——流計算。流計算的基本理念為流數(shù)據(jù)的單點價值隨著時間的流逝而快速下降,因此面對如水流到達(dá)的流式大數(shù)據(jù),流計算應(yīng)該立即執(zhí)行計算邏輯,而不是存儲到文件系統(tǒng)中。因此,流計算需要設(shè)計低延遲、高可靠且滿足擴(kuò)展特性的計算引擎,其設(shè)計需滿足如下需求:4.1.3流處理框架Storm(1)數(shù)據(jù)規(guī)模:隨著物聯(lián)網(wǎng)技術(shù)的提升,高清攝像頭、超高維建模引擎的出現(xiàn),為單點流數(shù)據(jù)帶來了全新的挑戰(zhàn),流計算引擎在單點時間內(nèi)至少需要面對TB級大數(shù)據(jù)規(guī)模;(2)計算性能:支持高性能處理單點大數(shù)據(jù),每秒處理百萬級條大數(shù)據(jù),且保持較低的延遲,計算結(jié)果在毫秒或秒級呈現(xiàn);(3)分布式:支持大數(shù)據(jù)存儲的基本分布式架構(gòu),在計算機(jī)集群上構(gòu)建分布式流計算框架,利用集群的存儲和計算優(yōu)勢,支持計算機(jī)集群的平滑擴(kuò)展;(4)可靠性:針對單點的流式計算,要求計算結(jié)果具有不錯的可靠性;(5)易用性:支持快速的開發(fā)與部署,具體框架實現(xiàn)邏輯對使用者透明,支持常見編程語言接口,且具有較強(qiáng)的可移植性。4.1.3流處理框架StormHadoop框架針對大數(shù)據(jù)的存儲和計算分別實現(xiàn)了HDFS和MapReduce模型,其中MapReduce適用于批處理的計算,若直接將MapReduce模型嵌入到流計算框架中,針對單點的流數(shù)據(jù)片段實施計算,將會造成如下的問題:(1)流數(shù)據(jù)片段之間存在前后聯(lián)系,MapReduce在計算當(dāng)前流數(shù)據(jù)片段時,需考慮前序的多個流數(shù)據(jù)片段,增加了任務(wù)的復(fù)雜性和計算開銷;(2)為滿足流計算的實時性,需修改MapReduce中將緩存寫入磁盤的操作,增加MapReduce的開發(fā)復(fù)雜性,也增加了使用難度;4.1.3流處理框架Storm(3)降低了流計算的易用性,任意的流計算任務(wù)都必須借助于MapReduce實現(xiàn)。隨著流數(shù)據(jù)的不斷增長,由于Hadoop框架不再適用于流計算,國內(nèi)外業(yè)界已經(jīng)涌現(xiàn)出了許多適合流數(shù)據(jù)和流計算的框架,具體表4-5所示。限于篇幅,本節(jié)重點介紹Storm流處理框架,更多其他流處理框架請讀者查閱資料。Storm框架最早由Twitter開發(fā)并于2011年在GitHub上開源,2013年進(jìn)入Apache成為孵化項目,2014年9月成為Apache頂級項目。Storm框架采用分布式架構(gòu)實現(xiàn)實時的大數(shù)據(jù)處理,被稱為“實時版Hadoop”。4.1.3流處理框架Storm表4-5常見的流處理框架4.1.3流處理框架Storm在以往的互聯(lián)網(wǎng)應(yīng)用開發(fā)中,開發(fā)人員一方面要設(shè)計數(shù)據(jù)的邏輯計算,另一方面還需要考慮數(shù)據(jù)的實時流轉(zhuǎn)、交互和分布等問題,二者往往無法兼顧。然而,Storm框架可以高效、可靠地處理流數(shù)據(jù),支持多種編程語言接口,并且能夠方便地與分布式數(shù)據(jù)庫系統(tǒng)整合,解決了互聯(lián)網(wǎng)開發(fā)時的流數(shù)據(jù)處理問題。在Storm框架基礎(chǔ)上,開發(fā)人員可快速搭建可靠、易用的實時流計算邏輯,并配合數(shù)據(jù)庫實現(xiàn)功能強(qiáng)大的流式大數(shù)據(jù)處理。如今,主流互聯(lián)網(wǎng)應(yīng)用開發(fā)都包含批處理和流處理兩類框架,從而解決開發(fā)人員在邏輯計算、實時數(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語言開發(fā),同時支持Java和Python編程接口,具有如下特點:(1)編程模型簡單:Storm框架為實時的大數(shù)據(jù)計算提供了簡單的編程接口,與Hadoop一樣,使用者可直接使用編程接口實現(xiàn)并行性,降低了開發(fā)的難度;(2)可擴(kuò)展性優(yōu):Storm框架中包含“工作進(jìn)程、線程和任務(wù)”三個實體。在分布式集群上,每個節(jié)點可以運行多個工作進(jìn)程,每個工作進(jìn)程上創(chuàng)建多個線程,每個線程執(zhí)行多個計算任務(wù)。計算任務(wù)是最小的工作單元,可以在線程、進(jìn)程和節(jié)點上并行,支持靈活的水平擴(kuò)展;4.1.3流處理框架Storm(3)可靠性高:Storm框架構(gòu)建類似“消息樹”的結(jié)構(gòu),從樹根出發(fā)直到樹上所有節(jié)點均被處理,才認(rèn)為計算任務(wù)被完全處理,一旦某個節(jié)點處理失敗,則重新執(zhí)行計算;(4)高容錯率:Storm框架為實現(xiàn)實時的流計算,將保證處理單元永遠(yuǎn)執(zhí)行,除非顯式的終止處理單元。在計算過程中出現(xiàn)異常時,Storm框架會重新安排出問題的處理單元;(5)高效率:Storm框架采用網(wǎng)絡(luò)直傳、內(nèi)存計算等方式,時延遠(yuǎn)低于Hadoop通過HDFS的磁盤讀寫方式,因此更適合流數(shù)據(jù)場景,免去了數(shù)據(jù)收集的時延;(6)支持本地模式:Storm框架支持在本地的進(jìn)程中模擬該框架所有功能,因而可為使用者提供簡便的調(diào)試環(huán)境,使用起來更為方便。4.1.3流處理框架Storm以計算機(jī)集群日志文件生產(chǎn)過程為例,我們對比Storm框架和Hadoop框架的異同點。在由幾百個節(jié)點組成的集群中,集群日志文件包含幾百個源頭,且集群運行中每個節(jié)點將會源源不斷的產(chǎn)生日志文件。這些日志文件中有大量重復(fù),但其中小部分卻是有意義的,需要存儲在數(shù)據(jù)庫中。在這樣的場景中:(1)若使用Hadoop框架進(jìn)行存儲和分析,首先需要將日志文件存儲到HDFS上。由于日志文件源源不斷,HDFS采用緩存方式以分鐘為單位切分日志文件(更小粒度的日志將會產(chǎn)生數(shù)量龐大的文件),每分鐘日志文件存儲后再調(diào)用MapReduce執(zhí)行去除重復(fù)的計算,由于MapReduce效率較低,當(dāng)前去重任務(wù)還未結(jié)束,陸續(xù)到達(dá)的日志文件已經(jīng)填滿緩沖區(qū),緩沖區(qū)溢出將會造成日志文件丟失。4.1.3流處理框架Storm(2)若采用Storm框架,將會為每個節(jié)點的日志文件分配一個監(jiān)控進(jìn)程,按照秒級或毫秒級收集日志文件,每個日志文件進(jìn)入流式框架后直接進(jìn)行去重計算。若為重復(fù)日志文件則直接丟棄,若日志文件不重復(fù)則添加到數(shù)據(jù)庫。因此,Storm框架更適合于流式大數(shù)據(jù)的分析和計算。Storm框架主要包括七大核心基本組件:(1)Stream(流):采用Stream描述流數(shù)據(jù);(2)Spout(源頭):將Stream的源頭抽象為Spout;(3)Bolt(處理邏輯):將Stream的狀態(tài)轉(zhuǎn)換抽象為Bolt;(4)Topology(拓?fù)鋱D):實時流處理的任務(wù)邏輯,由Spout和Bolt組成;4.1.3流處理框架Storm(5)Streamgrouping(流分組):告知Topology如何在組件之間進(jìn)行數(shù)據(jù)傳送;(6)Task(任務(wù)):實際執(zhí)行Spout和Bolt的線程,每個Task對應(yīng)一個線程;(7)Worker(工作進(jìn)程):每個Topology由一個或多個Worker執(zhí)行。

Storm框架的目標(biāo)是進(jìn)行流處理,Hadoop框架的目標(biāo)是進(jìn)行批處理,二者在五個方面的異同點如表4-6所示。4.1.3流處理框架Storm表4-6Storm框架與Hadoop框架的異同點4.1.4混合處理框架Spark隨著時代的發(fā)展,在大數(shù)據(jù)的分析與計算中,將會呈現(xiàn)不同的數(shù)據(jù)類型,其特點各不相同,主要包括:(1)批處理:響應(yīng)時間跨度在小時級,數(shù)據(jù)量龐大;(2)交互式查詢:響應(yīng)時間跨度在分鐘級,數(shù)據(jù)量格式多樣;(3)流數(shù)據(jù):響應(yīng)時間跨度在秒級,數(shù)據(jù)如流水一樣到達(dá);(4)圖數(shù)據(jù):響應(yīng)時間跨度在分鐘級,數(shù)據(jù)格式為由節(jié)點和邊組成的圖;(5)機(jī)器學(xué)習(xí):響應(yīng)時間跨度在分鐘級,需在大數(shù)據(jù)上構(gòu)建機(jī)器學(xué)習(xí)模型。在上文中,我們知道大數(shù)據(jù)批處理任務(wù)一般使用MapReduce計算,交互式查詢?nèi)蝿?wù)使用建立在Hadoop上的分布式數(shù)據(jù)庫完成,流計算任務(wù)則使用流處理框架Storm,圖計算和機(jī)器學(xué)習(xí)也能夠采用相應(yīng)的框架實現(xiàn)。然而,當(dāng)面臨不同類型的大數(shù)據(jù)計算任務(wù)時,在眾多計算框架中切換,將會造成格式不統(tǒng)一、管理開銷大以及資源協(xié)調(diào)與分配困難等問題。4.1.4混合處理框架Spark為了能在單個框架上實現(xiàn)各類數(shù)據(jù)的各種計算模式,研究者提出了Spark混合處理框架。Spark于2009年誕生于加州大學(xué)伯克利分校的AMP實驗室,于2010年開源,是最早實現(xiàn)基于內(nèi)存的分布式計算框架,可用于構(gòu)建低延遲的大數(shù)據(jù)分布式計算任務(wù)。隨著Hadoop框架中的MapReduce模型在高效率批處理計算、流計算、圖計算中存在瓶頸,Spark于2013年6月成為Apache孵化項目,旨在基于HDFS的大數(shù)據(jù)存儲,構(gòu)建適用于不同類型的高效分布式計算任務(wù)。Spark不但提供了不同高級語言的編程接口,還支持通用執(zhí)行圖的優(yōu)化引擎。表4-7給出了Spark的優(yōu)點。4.1.4混合處理框架Spark表4-7Spark框架的優(yōu)點4.1.4混合處理框架Spark基于上述優(yōu)點,Spark提供了更高性能的分布式計算模型,其性能比MapReduce計算模型高100倍,如圖4-6所示,即使Spark在內(nèi)存容量有限且需使用磁盤讀寫時,其性能也幾乎為MapReduce的10倍左右。2014年,在100TB數(shù)據(jù)的排序任務(wù)對比中,Spark在206個節(jié)點上通過23分鐘完成任務(wù),MapReduce則在2000個節(jié)點上通過72分鐘完成任務(wù)。Spark僅僅占用1/10的計算資源,但獲得了遠(yuǎn)高于MapReduce的性能,由此Spark也于2014年2月成為Apache頂級項目。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)建了針對不同任務(wù)的統(tǒng)一資源分配與協(xié)調(diào)系統(tǒng),逐漸發(fā)展表4-8所示。圖4-6Logistic回歸任務(wù)在Spark和MapReduce上的性能對比4.1.4混合處理框架Spark表4-8Spark的特點4.1.4混合處理框架SparkSpark的生態(tài)體系如圖4-7所示,Spark既可以使用本地運行模式、獨立運行模式,或使用第三方管理模式(如:Mesos或YARN管理框架),還支持云計算方式(如:亞馬遜EC2)。此外,在底層大數(shù)據(jù)存儲上,Spark既可以使用Hadoop分布式文件系統(tǒng)(HDFS)、或使用分布式數(shù)據(jù)庫或數(shù)據(jù)倉庫(如:HBase或Hive),還支持云存儲(如:亞馬遜EC2)。圖4-7Spark生態(tài)體系4.1.4混合處理框架Spark(1)SparkCore:Spark的基礎(chǔ)和核心功能,面向批處理任務(wù),涵蓋內(nèi)存計算、任務(wù)調(diào)度、故障恢復(fù)和存儲管理等,通過統(tǒng)一抽象的數(shù)據(jù)類型,應(yīng)對不同的大數(shù)據(jù)類型;根據(jù)圖4-7,Spark生態(tài)體系主要包括五大基本組件:(2)SparkSQL:用于結(jié)構(gòu)化數(shù)據(jù)處理的組件,面向交互式查詢?nèi)蝿?wù),開發(fā)人員無須編寫Spark應(yīng)用程序,可直接使用SQL語句建立交互式查詢,并兼容分布式數(shù)據(jù)庫、分布式數(shù)據(jù)倉庫等;4.1.4混合處理框架Spark(3)SparkStreaming:支持高吞吐量、具有容錯機(jī)制的流計算框架,面向流計算任務(wù),核心方案是將流數(shù)據(jù)劃分為短時間內(nèi)的切片。每個切片作為批處理任務(wù)運行在SparkCore之上,完成流處理的任務(wù)。隨著Spark的發(fā)展,2016年提出結(jié)構(gòu)化流計算(StructuredStreaming),該模塊將數(shù)據(jù)流看作沒有邊界的數(shù)據(jù)表,可直接使用SparkSQL進(jìn)行流計算,進(jìn)一步降低了基于Spark流計算的門檻;(4)SparkGraphX:在Spark上提供了用于圖計算的API,面向圖計算任務(wù),擁有豐富的圖定義功能和運算符,支持在海量圖結(jié)構(gòu)數(shù)據(jù)上運行算法,性能優(yōu)良;(5)SparkMLlib:提供了經(jīng)典機(jī)器學(xué)習(xí)算法的分布式實現(xiàn),面向機(jī)器學(xué)習(xí)任務(wù),涵蓋聚類、分類、回歸和協(xié)同過濾等,使用者僅需擁有簡單機(jī)器學(xué)習(xí)知識,即可調(diào)用API完成機(jī)器學(xué)習(xí)任務(wù)。4.1.4混合處理框架Spark在SparkCore的作用下,SparkSQL、SparkStreaming、SparkGraphX和SparkMLlib的編程API幾乎一致,使用者可以幾乎無縫應(yīng)用不同的模塊,處理特定的大數(shù)據(jù)計算和分析任務(wù),因而Spark稱為混合處理框架。024.2

大數(shù)據(jù)分布式存儲4.2.1經(jīng)典數(shù)據(jù)存儲與管理技術(shù)經(jīng)典數(shù)據(jù)存儲方法在經(jīng)典操作系統(tǒng)中,數(shù)據(jù)以文件系統(tǒng)的方式存儲。文件系統(tǒng)的最小單位為512字節(jié),將磁盤空間以512字節(jié)為單位劃分“磁盤塊”,用于存儲各種類型的文件。實際上,“磁盤塊”是文件系統(tǒng)讀寫的最小單位,稱為“塊(Block)”。因此,文件通常以“塊”的整數(shù)倍存儲,即每次讀寫的數(shù)據(jù)量必須是“塊”的整數(shù)倍。文件的存儲方式分為兩種:一是連續(xù)地址空間分配;二是非連續(xù)地址空間分配。連續(xù)地址空間分配方式是分配一整塊物理磁盤空間用于文件的存儲。這種方式需要給出磁盤空間起始塊的地址和文件的長度,通過二者確定文件存儲的磁盤空間范圍。采用這種方式存儲文件須事先確定文件的大小,這樣操作系統(tǒng)才能夠分配合適的連續(xù)空間用于存儲該文件。在操作系統(tǒng)中,存放維護(hù)該文件必要信息的塊,稱為文件頭。通過文件頭中的信息,客戶端能夠快速定位文件存儲的地址,進(jìn)而完成對文件的讀寫。4.2.1經(jīng)典數(shù)據(jù)存儲與管理技術(shù)經(jīng)典數(shù)據(jù)存儲方法非連續(xù)地址空間分配方式則采用離散的磁盤空間存儲文件,可以有效消除磁盤空間中的碎片,提升磁盤空間的使用率,且擴(kuò)展文件長度也較為便捷。非連續(xù)地址空間分配包含兩種方式:鏈?zhǔn)椒峙浜退饕椒峙?。采用鏈?zhǔn)椒峙涞牟僮飨到y(tǒng)維護(hù)一個文件分配表(FileAllocationTable,FAT),給出了文件名的起始磁盤塊號。FAT表中包含物理塊號和下一個塊號的地址,通過迭代的跳轉(zhuǎn)訪問“下一個塊號”,即可訪問存放文件的所有磁盤塊,從而完成讀寫工作。采用索引表的操作系統(tǒng)則為每個存儲的文件創(chuàng)建一個索引表,其中存放指向文件所有磁盤塊的指針列表。索引表中存放的是邏輯頁面與物理存儲塊之間的映射關(guān)系。4.2.1經(jīng)典數(shù)據(jù)存儲與管理技術(shù)經(jīng)典數(shù)據(jù)管理方法經(jīng)典操作系統(tǒng)中的數(shù)據(jù)管理方法一般使用關(guān)系型數(shù)據(jù)庫技術(shù)。在計算機(jī)操作系統(tǒng)中,采用文件管理的數(shù)據(jù)只能實現(xiàn)簡單的功能(例如:Excel表格存放數(shù)據(jù)并進(jìn)行簡單的統(tǒng)計),想要快速查詢所存儲的數(shù)據(jù),以及發(fā)現(xiàn)各個文件中數(shù)據(jù)的關(guān)系則變得困難。數(shù)據(jù)庫是“按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲和管理數(shù)據(jù)的倉庫”,是一種安裝在操作系統(tǒng)中,進(jìn)行有組織、可共享并進(jìn)行統(tǒng)一管理的大量數(shù)據(jù)的集合。通過數(shù)據(jù)庫管理技術(shù),我們不但能夠?qū)崿F(xiàn)單個文件的數(shù)據(jù)管理,而且能夠獲取多個文件中的數(shù)據(jù)關(guān)系,并且數(shù)據(jù)庫中的數(shù)據(jù)能夠共享給不同的用戶,實現(xiàn)更為強(qiáng)大、全面的數(shù)據(jù)管理功能。隨著數(shù)據(jù)庫技術(shù)的發(fā)展,數(shù)據(jù)庫先后經(jīng)歷了層次數(shù)據(jù)庫、網(wǎng)狀數(shù)據(jù)庫和關(guān)系數(shù)據(jù)庫等階段,關(guān)系型數(shù)據(jù)庫是數(shù)據(jù)管理中的最為常用數(shù)據(jù)庫之一。在關(guān)系型數(shù)據(jù)庫中,最基本的數(shù)據(jù)存儲單位為數(shù)據(jù)表,數(shù)據(jù)庫由多個數(shù)據(jù)表組成。4.2.1經(jīng)典數(shù)據(jù)存儲與管理技術(shù)經(jīng)典數(shù)據(jù)管理方法最基礎(chǔ)的數(shù)據(jù)表形態(tài)為二維表,由行和列組成,與Excel表格的存儲形態(tài)類似,所不同的是數(shù)據(jù)表之間可建立連接關(guān)系,獲得強(qiáng)大的檢索、統(tǒng)計和分析功能。因此,關(guān)系型數(shù)據(jù)庫由多張表和各表之間的關(guān)系構(gòu)成。數(shù)據(jù)表是典型的結(jié)構(gòu)化數(shù)據(jù)存儲和管理方法。如圖4-8所示,以學(xué)生信息的存儲為例,每張數(shù)據(jù)表包含獨有的名字標(biāo)識,表中包含記錄數(shù)據(jù)屬性的“列”,以及記錄實際數(shù)據(jù)的“行”。其中,“學(xué)號、姓名、出生日期和性別”屬于數(shù)據(jù)屬性,可根據(jù)需要在設(shè)計表的時候定義;每一行則是實際的數(shù)據(jù)記錄,包含每個數(shù)據(jù)屬性的值。為了保持良好的關(guān)系特性,關(guān)系型數(shù)據(jù)庫要求為每個數(shù)據(jù)屬性設(shè)置數(shù)據(jù)形式,以保證每個數(shù)據(jù)屬性值的完備性。4.2.1經(jīng)典數(shù)據(jù)存儲與管理技術(shù)經(jīng)典數(shù)據(jù)管理方法圖4-8關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)表結(jié)構(gòu)4.2.1經(jīng)典數(shù)據(jù)存儲與管理技術(shù)經(jīng)典數(shù)據(jù)管理方法在關(guān)系型數(shù)據(jù)庫中,允許創(chuàng)建多張數(shù)據(jù)表,用于存放不同類別的數(shù)據(jù)。在眾多數(shù)據(jù)表中,想要發(fā)現(xiàn)有意義的數(shù)據(jù)關(guān)系,就需要建立各個數(shù)據(jù)表中的關(guān)系?;跀?shù)據(jù)庫的原理,研究者和開發(fā)人員設(shè)計并開發(fā)了數(shù)據(jù)庫管理系統(tǒng)(DatabaseManagementSystem,DBMS),在計算機(jī)上實現(xiàn)關(guān)系型數(shù)據(jù)庫的管理,例如:MySQL,Oracle以及SQLServer等關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。為了在數(shù)據(jù)庫中進(jìn)行高效的數(shù)據(jù)查詢、統(tǒng)計、分析和管理,數(shù)據(jù)庫管理系統(tǒng)提供結(jié)構(gòu)化查詢語言(StructuredQueryLanguage,SQL),通過SQL定義操作關(guān)系型數(shù)據(jù)庫的規(guī)則。數(shù)據(jù)庫管理人員只需要學(xué)習(xí)SQL語句,即可高效地操作關(guān)系型數(shù)據(jù)庫,對數(shù)據(jù)表完成數(shù)據(jù)的增加、刪除、查詢、修改等管理操作。因此,關(guān)系型數(shù)據(jù)庫也被稱為SQL數(shù)據(jù)庫。4.2.2分布式大數(shù)據(jù)存儲與管理技術(shù)大數(shù)據(jù)時代背景下,面對海量的大規(guī)模數(shù)據(jù)存儲需求,單臺計算機(jī)的傳統(tǒng)文件存儲方式顯得捉襟見肘。相比于本地文件系統(tǒng)僅能使用本地的存儲磁盤空間,分布式存儲系統(tǒng)能夠通過網(wǎng)絡(luò)互聯(lián)的方式建立多臺計算機(jī)之間的聯(lián)系,使海量大數(shù)據(jù)存儲在分布式的磁盤空間中。分布式存儲系統(tǒng)一般架構(gòu)在計算機(jī)集群之上,由若干臺計算機(jī)終端集群而成,每臺計算機(jī)提供磁盤存儲空間。如圖4-9所示,常見的計算機(jī)集群中包含有若干個計算機(jī)機(jī)架,每個計算機(jī)機(jī)架中存放有若干臺計算機(jī)終端。其中,同一個機(jī)架上的計算機(jī)終端通過局域網(wǎng)相連,不同機(jī)架之間通過交換機(jī)通信。大數(shù)據(jù)雖然存儲在不同機(jī)架、不同計算機(jī)終端中,但分布式存儲系統(tǒng)可通過網(wǎng)絡(luò)進(jìn)行通信或交換信息,使得程序像訪問本地文件系統(tǒng)一樣的訪問分布式存儲系統(tǒng),允許使用者從任意網(wǎng)絡(luò)或計算機(jī)訪問所存儲的文件?;诜植际酱鎯ο到y(tǒng),操作系統(tǒng)可通過授權(quán)的方式在終端用戶之間輕松地共享文件。4.2.2分布式大數(shù)據(jù)存儲與管理技術(shù)圖4-9常見的用于存儲分布式存儲系統(tǒng)的計算機(jī)集群4.2.2分布式大數(shù)據(jù)存儲與管理技術(shù)分布式存儲系統(tǒng)主要包含三個類別:分布式文件系統(tǒng)、分布式塊存儲和分布式對象存儲。當(dāng)然,隨著分布式存儲方式的發(fā)展,還包括近年來新興的分布式數(shù)據(jù)庫和分布式緩存等形式。分布式文件系統(tǒng)的存儲架構(gòu)類別主要包含三種方式:(1)采用控制節(jié)點為中心的架構(gòu):整個計算機(jī)集群中包含一個服務(wù)器節(jié)點用于控制,以及若干個用戶端存儲節(jié)點用于海量大數(shù)據(jù)的存儲,整體架構(gòu)采用“用戶端/服務(wù)器”模式。具有代表性的分布式文件系統(tǒng)包括,谷歌分布式文件系統(tǒng)(GoogleFileSystem)和Hadoop分布式文件系統(tǒng)(HadoopDistributedFileSystem,HDFS)。4.2.2分布式大數(shù)據(jù)存儲與管理技術(shù)(2)采用計算模式的無中心服務(wù)器架構(gòu):客戶端通過設(shè)備映射關(guān)系計算地址,尋找文件在計算機(jī)集群中的存儲位置,明確文件的讀寫位置后,由客戶端直接與存儲節(jié)點通信,完成文件的讀寫工作。此類架構(gòu)具有代表性的分布式文件系統(tǒng):Linux操作系統(tǒng)中的Ceph系統(tǒng)。(3)采用一致性哈希的無中心服務(wù)器架構(gòu):首先將分布式存儲的磁盤設(shè)備制定為哈希環(huán),客戶端進(jìn)行讀寫工作時,通過文件名稱計算出相應(yīng)的哈希值,通過哈希環(huán)將哈希值映射到文件的具體存儲磁盤設(shè)備中。明確文件位置后,客戶端完成文件的讀寫操作。此類架構(gòu)具4.2.2分布式大數(shù)據(jù)存儲與管理技術(shù)有代表性的分布式文件系統(tǒng):OpenStack構(gòu)建的Swift分布式文件系統(tǒng)。當(dāng)然,分布式文件系統(tǒng)中的文件也需要存儲在磁盤設(shè)備中。與傳統(tǒng)文件系統(tǒng)的存儲方式相同,分布式文件系統(tǒng)也采用磁盤塊作為文件存儲的最小單位。不過由于存儲的是海量大數(shù)據(jù),分布式文件系統(tǒng)一般設(shè)置較大的基本“磁盤塊”(如Hadoop2.0的分布式文件系統(tǒng)默認(rèn)最小磁盤塊為128MB),在文件讀寫時能夠更快的尋找到地址,提升文件讀寫時的性能。此外,與傳統(tǒng)文件系統(tǒng)不同的是,分布式文件系統(tǒng)的基本“磁盤塊”占據(jù)空間較大,若一個文件占不滿一個“磁盤塊”,該“磁盤塊”還可以存儲其他文件。表4-9給出了分布式文件系統(tǒng)的主要特點。4.2.2分布式大數(shù)據(jù)存儲與管理技術(shù)表4-9分布式文件系統(tǒng)的主要特點4.2.2分布式大數(shù)據(jù)存儲與管理技術(shù)客戶端在訪問分布式文件系統(tǒng)時,應(yīng)該與訪問傳統(tǒng)文件系統(tǒng)時相同,即分布式文件系統(tǒng)提供文件讀寫時對客戶端有良好的透明性,主要包括:(1)訪問透明性:分布式文件系統(tǒng)提供與傳統(tǒng)文件系統(tǒng)相同的訪問方式。當(dāng)客戶端發(fā)出訪問請求時,分布式文件系統(tǒng)應(yīng)該能夠自動定位想要訪問文件位置,將位置發(fā)送給客戶端。從客戶端角度來看,其與本地文件系統(tǒng)的訪問方式相同,因此客戶端具有訪問透明性;(2)命名透明性:存儲在分布式文件系統(tǒng)中的文件,其名稱中不能含有文件存儲位置的相關(guān)提示信息。當(dāng)文件名稱確定后,從當(dāng)前存儲位置傳輸?shù)狡渌恢脮r(例如:制作文件副本、修復(fù)受損文件等操作),其名稱不能被更改,客戶端不用關(guān)心命名問題,具有命名透明性;4.2.2分布式大數(shù)據(jù)存儲與管理技術(shù)(3)結(jié)構(gòu)透明性:在訪問分布式文件系統(tǒng)時,客戶端并不能確定服務(wù)器集群中存儲設(shè)備、文件副本的數(shù)量,為了提供高性能和訪問一致性,有必要提供多個文件的副本,選擇不繁忙的副本提供給客戶端讀寫,客戶端不用考慮具體的副本,具有結(jié)構(gòu)透明性;(4)復(fù)制透明性:客戶端在分布式文件系統(tǒng)中進(jìn)行復(fù)制時,關(guān)于文件多個副本同時需要進(jìn)行復(fù)制等操作,客戶端不必關(guān)心如何具體執(zhí)行,具有復(fù)制透明性。除了上述特點以外,一個高性能、高可用性的分布式文件系統(tǒng),還應(yīng)該支持多樣化的存儲介質(zhì)和多種文件訪問方式。在計算機(jī)集群中,磁盤存儲設(shè)備應(yīng)該支持各類存儲介質(zhì)存放文件,包括機(jī)械硬盤,SAS、SSD、NVMe固態(tài)硬盤,甚至是公有云存儲等,分布式文件系統(tǒng)應(yīng)該能夠保證文件存儲在任意可用的存儲介質(zhì)上??蛻舳嗽诜植际轿募到y(tǒng)中讀寫文件時,應(yīng)該能夠支持多種網(wǎng)絡(luò)協(xié)議進(jìn)行文件訪問,4.2.2分布式大數(shù)據(jù)存儲與管理技術(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)的訪問,實現(xiàn)安全機(jī)制。分布式文件系統(tǒng)在大數(shù)據(jù)存儲和管理中具有明顯的優(yōu)勢。在大數(shù)據(jù)時代下,許多應(yīng)用場景中采用分布式文件系統(tǒng)存儲大數(shù)據(jù),分布式文件系統(tǒng)存在相應(yīng)的優(yōu)缺點:(1)優(yōu)點:分布式文件系統(tǒng)允許多個客戶端并發(fā)讀寫數(shù)據(jù),允許在客戶端之間遠(yuǎn)程共享數(shù)據(jù),通過計算機(jī)集群架構(gòu)提高文件的可用性,降低了訪問時間并提升了網(wǎng)絡(luò)傳輸效率。同時,分布式文件系統(tǒng)提高了改變數(shù)據(jù)大小的方法,提升了數(shù)據(jù)交換能力,并給予了數(shù)據(jù)處理的透明度。4.2.2分布式大數(shù)據(jù)存儲與管理技術(shù)(2)缺點:分布式文件系統(tǒng)依賴網(wǎng)絡(luò)傳輸,計算機(jī)集群中各個節(jié)點之間的網(wǎng)絡(luò)連接存在安全問題,數(shù)據(jù)在各節(jié)點之間的移動可能由于網(wǎng)絡(luò)問題丟失。同時,在分布式文件系統(tǒng)上建立數(shù)據(jù)庫更為復(fù)雜,節(jié)點間同時傳輸數(shù)據(jù)也可能造成網(wǎng)絡(luò)擁塞、延遲等問題。4.2.3分布式文件系統(tǒng)(HDFS)Hadoop分布式文件系統(tǒng)(HDFS)是Hadoop架構(gòu)中大數(shù)據(jù)分布式存儲的關(guān)鍵。實際上,HDFS是Google分布式文件系統(tǒng)的開源實現(xiàn),支持讀寫和處理超大規(guī)模的文件,并能夠運行在廉價計算機(jī)組成的集群上。在HDFS的設(shè)計過程中,考慮了構(gòu)建分布式文件系統(tǒng)的計算機(jī)集群實際情況,認(rèn)為計算機(jī)集群中出現(xiàn)硬件故障是常態(tài),在設(shè)計時需要考慮經(jīng)常出現(xiàn)硬件故障的情況。因此,HDFS具有高度的容錯能力,可部署在大規(guī)模低成本計算機(jī)集群上,其特點表4-10所示。4.2.3分布式文件系統(tǒng)(HDFS)表4-10HDFS的主要特點4.2.3分布式文件系統(tǒng)(HDFS)雖然HDFS采用分布式文件系統(tǒng)架構(gòu),但是文件在計算機(jī)集群中的實際存儲過程采用抽象的“數(shù)據(jù)塊”,默認(rèn)大小為64MB或128M(Hadoop2.0以上版本為128M)。面對海量大數(shù)據(jù)文件的存儲,HDFS將文件拆分成多個存盤塊單獨存儲。HDFS通過設(shè)置更大的數(shù)據(jù)塊(傳統(tǒng)文件系統(tǒng)的“磁盤塊”為512B),保證大數(shù)據(jù)文件被切分成更少數(shù)量的數(shù)據(jù)塊,最小化了尋址開銷,同時兼顧本地磁盤的利用效率,最終將最基本的數(shù)據(jù)塊設(shè)置為64MB或128M,在對大數(shù)據(jù)文件的讀寫時效率較高。采用抽象的、較大容量的數(shù)據(jù)塊,保證HDFS支持大數(shù)據(jù)文件的存儲,固定的數(shù)據(jù)塊能夠簡化大數(shù)據(jù)分析和計算時的方法設(shè)計,以及方便數(shù)據(jù)的復(fù)制、遷移和備份等常見操作。HDFS采用控制節(jié)點為中心的架構(gòu)(即主-從體系架構(gòu)),如圖4-10所示,HDFS架構(gòu)主要包含客戶端、名稱節(jié)點、第二名稱節(jié)點和數(shù)據(jù)節(jié)點四個重要組成部分。4.2.3分布式文件系統(tǒng)(HDFS)圖4-10HDFS的基本架構(gòu)和重要組成部分4.2.3分布式文件系統(tǒng)(HDFS)(1)客戶端:HDFS的使用者通過客戶端向名稱節(jié)點發(fā)起請求,請求獲取數(shù)據(jù)存儲的“元數(shù)據(jù)”,包含:命名空間、磁盤塊映射信息和數(shù)據(jù)節(jié)點的位置信息等。(2)名稱節(jié)點(NameNode):名稱節(jié)點是HDFS文件管理中的最重要組成部分,維護(hù)著分布式文件系統(tǒng)的目錄樹,包含兩個重要的元數(shù)據(jù)管理文件:FsImage文件和Edits文件。FsImage文件是元數(shù)據(jù)的永久性檢查點,其中包含了HDFS中所有文件的目錄,以及文件的序列化信息(包括:文件ID,類型,所屬用戶,用戶權(quán)限、時間戳等)。Edits文件存放了HDFS所有操作的日志信息(包括:文件的創(chuàng)建、刪除、追加和重命名等操作)。每次名稱節(jié)點啟動后,將FsImage文件讀入到內(nèi)存中,然后執(zhí)行Edits文件中的每個操作,保證文件目錄和序列化信息等元數(shù)據(jù)都是最新的且同步,這個過程可以看作是將FsImage文件與Edits文件進(jìn)行合并。4.2.3分布式文件系統(tǒng)(HDFS)(3)第二名稱節(jié)點(SecondaryNameNode):實際上,經(jīng)過HDFS的長期運行,將會產(chǎn)生較大的FsImage文件和Edits文件,每次重啟時將耗費大量的時間進(jìn)行兩個文件的合并。因此,Hadoop框架另外設(shè)置一個“第二名稱節(jié)點”,其任務(wù)包含兩個:一是備份文件目錄和日志,二是定期合并FsImage文件和Edits文件。第二名稱節(jié)點的主要功能是定期從名稱節(jié)點中獲取FsImage文件和Edits文件,合并兩個文件后,生成“檢查點”文件,然后將“檢查點”文件返還給名稱節(jié)點。采用這種方式定期合并兩個文件,能夠防止名稱節(jié)點重啟時需要將整個FsImage文件和Edits文件同時加載到內(nèi)存中,避免消耗大量的時間用于文件加載與合并。4.2.3分布式文件系統(tǒng)(HDFS)(4)數(shù)據(jù)節(jié)點(DataNode):HDFS中包含多個數(shù)據(jù)節(jié)點,計算機(jī)集群中每臺存儲終端設(shè)備都運行一個數(shù)據(jù)節(jié)點。數(shù)據(jù)節(jié)點管理存儲文件的“數(shù)據(jù)塊”。其中,每個數(shù)據(jù)塊包含兩個文件:一是存儲數(shù)據(jù)本身,二是數(shù)據(jù)節(jié)點的“元數(shù)據(jù)”(包括:數(shù)據(jù)塊的長度、完整性校驗信息和時間戳等)。

數(shù)據(jù)節(jié)點的工作流程如圖4-11所示,包含六個步驟:4.2.3分布式文件系統(tǒng)(HDFS)圖4-11數(shù)據(jù)節(jié)點的工作流程4.2.3分布式文件系統(tǒng)(HDFS)(1)集群中任意一臺計算機(jī)啟動數(shù)據(jù)節(jié)點后,立即向名稱節(jié)點注冊信息;(2)名稱節(jié)點受理注冊信息后,返回信息告訴數(shù)據(jù)節(jié)點注冊完成;(3)數(shù)據(jù)節(jié)點周期性上報在該計算機(jī)上管理的所有“數(shù)據(jù)塊”信息;(4)穩(wěn)定運行過程中,數(shù)據(jù)節(jié)點周期性向名稱節(jié)點發(fā)送“心跳信息”,同時若有對數(shù)據(jù)塊的操作,將信息存放在“心跳信息”中,一起上報給名稱節(jié)點更新;(5)名稱節(jié)點定時接收來自每個數(shù)據(jù)節(jié)點的“心跳信息”(默認(rèn)為3秒發(fā)送一次)。當(dāng)超時未收到“心跳信息”時(默認(rèn)為10分鐘30秒),則認(rèn)為該數(shù)據(jù)節(jié)點發(fā)生故障,將啟動數(shù)據(jù)塊的“容錯備份”機(jī)制,尋找另一臺空閑的計算機(jī)啟動數(shù)據(jù)節(jié)點,恢復(fù)故障數(shù)據(jù)節(jié)點的數(shù)據(jù)塊副本;(6)當(dāng)完成正確的數(shù)據(jù)塊寫入時,數(shù)據(jù)節(jié)點會同步其管理的數(shù)據(jù)塊,滿足數(shù)據(jù)塊的多個副本數(shù)據(jù)一致性的要求。4.2.3分布式文件系統(tǒng)(HDFS)如上所述,當(dāng)數(shù)據(jù)節(jié)點發(fā)生故障時,名稱節(jié)點將會啟動“容錯備份”機(jī)制進(jìn)行數(shù)據(jù)塊副本的備份。實際上,HDFS為了保證高容錯性和高讀寫性能,采用多個數(shù)據(jù)塊的冗余存儲策略。如圖4-12所示,大數(shù)據(jù)文件通常被劃分為多個數(shù)據(jù)塊存儲,每個數(shù)據(jù)塊在HDFS中包含多個副本,且多個副本分布地存儲在不同的數(shù)據(jù)節(jié)點上。例如:數(shù)據(jù)塊1可以分別存儲在數(shù)據(jù)節(jié)點1、數(shù)據(jù)節(jié)點2和數(shù)據(jù)節(jié)點4上。通常,HDFS中的數(shù)據(jù)塊冗余存放采用如下的規(guī)則:4.2.3分布式文件系統(tǒng)(HDFS)(1)第1個副本:放置在上傳文件時的本機(jī)數(shù)據(jù)節(jié)點上;(2)第2個副本:放置在與第1個副本相同機(jī)架上的數(shù)據(jù)節(jié)點上;(3)第3個副本:放置在與第1個副本不同機(jī)架上的數(shù)據(jù)節(jié)點上;(4)更多的副本:隨機(jī)選擇存放,盡量放置在與第1、3個副本相同或相鄰機(jī)架的數(shù)據(jù)節(jié)點上。

這樣做的目的,一方面通過不同機(jī)架上的數(shù)據(jù)節(jié)點,降低由于機(jī)架的損壞導(dǎo)致所有數(shù)據(jù)塊的副本丟失,無法進(jìn)行“容錯備份”機(jī)制;另一方面,多個副本放在相同或相鄰的機(jī)架上,在客戶端并發(fā)訪問時,能夠減少尋址的開銷,提升數(shù)據(jù)塊讀寫時的效率。4.2.3分布式文件系統(tǒng)(HDFS)圖4-12HDFS的多副本冗余存儲的策略4.2.3分布式文件系統(tǒng)(HDFS)與傳統(tǒng)文件系統(tǒng)直接尋址讀寫不同,客戶端對存儲在HDFS上的文件進(jìn)行讀寫時包含幾個步驟。圖4-13(a)所示,HDFS讀數(shù)據(jù)過程包含6個步驟:(a)讀文件過程(1)客戶端向HDFS接口發(fā)送打開文件的請求;(2)訪問HDFS的名稱節(jié)點獲取存儲文件的數(shù)據(jù)塊地址信息;(3)通過地址信息建立文件輸入流,客戶端向其發(fā)送讀取請求;(4)處理列表中各個數(shù)據(jù)塊的讀取請求,找到存放數(shù)據(jù)塊的數(shù)據(jù)節(jié)點;(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個步驟:(1)客戶端向HDFS接口發(fā)送打開文件的請求;(2)訪問HDFS的名稱節(jié)點創(chuàng)建想要寫入文件的元數(shù)據(jù),以及寫入文件的目標(biāo)地址;(3)通過地址信息建立文件輸出流,客戶端向其發(fā)送寫入請求;(4)從輸出流中發(fā)送將要寫入的數(shù)據(jù)包,找到存放數(shù)據(jù)塊的數(shù)據(jù)節(jié)點;

(5)將數(shù)據(jù)包寫入第1個副本,然后寫入第2個副本,以此類推寫入所有副本,寫入完成后每個副本將“成功寫入”的確認(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ù)庫系統(tǒng)HBase在傳統(tǒng)數(shù)據(jù)的存儲和管理中,我們知道文件系統(tǒng)只能很好的存儲文件,對數(shù)據(jù)的管理需要借助于關(guān)系型數(shù)據(jù)庫,通過SQL語句可以快速查詢、統(tǒng)計和分析數(shù)據(jù)。在大數(shù)據(jù)的存儲與管理中,同樣需要在分布式文件系統(tǒng)基礎(chǔ)上,建立數(shù)據(jù)庫對大數(shù)據(jù)進(jìn)行管理。以HDFS為例,大數(shù)據(jù)存儲在計算機(jī)集群上,無法在集群上直接建立數(shù)據(jù)庫管理系統(tǒng)。因此,依托于大數(shù)據(jù)的分布式存儲方式,研究者們提出并開發(fā)了非關(guān)系型數(shù)據(jù)庫(NoSQL)。NoSQL數(shù)據(jù)庫支持分布式、非關(guān)系型存儲的大數(shù)據(jù),不支持SQL語句的查詢和事務(wù)。經(jīng)過十幾年的發(fā)展,NoSQL數(shù)據(jù)庫已經(jīng)發(fā)展出幾大不同的分支,如表4-11所示。4.2.4分布式數(shù)據(jù)庫系統(tǒng)HBase表4-11常見的幾類NoSQL數(shù)據(jù)庫4.2.4分布式數(shù)據(jù)庫系統(tǒng)HBaseHBase是建立在HDFS之上的一種NoSQL數(shù)據(jù)庫。HBase的設(shè)計原理來源于Google的BigTable,HBase是BigTable主要功能的開源實現(xiàn)。HBase屬于分布式數(shù)據(jù)庫系統(tǒng),具有高性能、高可靠、可伸縮以及面向列的特點,支持海量大數(shù)據(jù)的隨機(jī)實時讀寫、水平擴(kuò)展,其底層基于HDFS,所以可運行在廉價計算機(jī)集群上,并構(gòu)建數(shù)十億行和數(shù)百列的數(shù)據(jù)表。HBase數(shù)據(jù)庫的特點包括:(1)具有強(qiáng)一致性讀寫特點,保證并發(fā)讀寫時的數(shù)據(jù)一致性;(2)面向列的數(shù)據(jù)存儲方式,具有良好的存儲空間擴(kuò)展能力,以及較低的尋址開銷;(3)底層支持HDFS的塊存儲方式,延續(xù)了HDFS的優(yōu)點;(4)擁有自動轉(zhuǎn)移故障的能力,當(dāng)出現(xiàn)故障節(jié)點時可及時修復(fù);4.2.4分布式數(shù)據(jù)庫系統(tǒng)HBase(5)包含多元化的API操作方法,例如:HBaseShell,JavaAPI,ThriftGateway等。

HBase的設(shè)計背景為海量不斷增長的大數(shù)據(jù),且需要支持實時的單點數(shù)據(jù)查詢,而不需要復(fù)雜的關(guān)系型查詢條件。因此,在基礎(chǔ)數(shù)據(jù)表的設(shè)計上,強(qiáng)調(diào)對海量大數(shù)據(jù)的快速查詢,而簡化獲取各個表之間的連接關(guān)系。HBase中的表是一個稀疏、多維度、排序的映射表,通過行鍵(RowKey)、列族(ColumnFamily)、列限定符(ColumnQualifier)和時間戳(Timestamp)確定映射表中的一個數(shù)據(jù)單元(Cell)。為了保證所存儲的數(shù)據(jù)稀疏性,HBase每個數(shù)據(jù)單元存儲的數(shù)據(jù)都是未經(jīng)解釋的字符串(即Java中的byte[]類型),具體使用時讀出字符串后根據(jù)實際數(shù)據(jù)類型將字符串解析成相應(yīng)的數(shù)據(jù)類型。4.2.4分布式數(shù)據(jù)庫系統(tǒng)HBase為了便于理解HBase數(shù)據(jù)庫中基本表的結(jié)構(gòu),我們利用類似SQL數(shù)據(jù)庫模型展示HBase數(shù)據(jù)庫的基本數(shù)據(jù)表結(jié)構(gòu),如圖4-14所示。在HBase數(shù)據(jù)庫管理系統(tǒng)中,最基本的數(shù)據(jù)表由多行數(shù)據(jù)組成,主要包含概念為:(1)行(Row):每個數(shù)據(jù)表中包含若干行,每行由一個唯一的行鍵(RowKey)標(biāo)識??蛻舳嗽谠L問數(shù)據(jù)庫時依靠行鍵定位數(shù)據(jù)行,默認(rèn)采用二進(jìn)制數(shù)字表達(dá)行鍵,單表的數(shù)據(jù)存儲容量在百億行和百萬列。行鍵的設(shè)計目標(biāo)是將具有相關(guān)性的數(shù)據(jù)行存儲在一起,因此在存儲時使用字典順序?qū)π墟I排好序。在讀寫數(shù)據(jù)時,具有相關(guān)性的數(shù)據(jù)行大概率被一起讀寫,采用行鍵排序的存儲方式壓縮比很高,而且讀寫的尋址開銷很低。4.2.4分布式數(shù)據(jù)庫系統(tǒng)HBase(2)列族(ColumnFamily):數(shù)據(jù)表中的列由列族和列限定符組成,列族是最基本的訪問控制單元。為了提升數(shù)據(jù)庫訪問的性能,將同一個列族中的數(shù)據(jù)存儲在一起,存儲在同一列族中的實際數(shù)據(jù)類型保持相同,以滿足更高的壓縮比。在創(chuàng)建數(shù)據(jù)表之前,需要確定好列族的數(shù)量(一般為幾十個),由于數(shù)據(jù)按照列族存儲,定義好列族后不能頻繁修改。此外,每個列族都可以設(shè)置各自的存儲屬性,例如:是否將部分?jǐn)?shù)據(jù)緩存在內(nèi)存中,如何對行鍵進(jìn)行編碼以及采用何種方式對同列族數(shù)據(jù)進(jìn)行壓縮等。(3)列限定符(ColumnQualifier):列族和列限定符共同組成數(shù)據(jù)表中的屬性列,二者使用冒號分隔,如圖4-14所示,我們可以使用MajorInfo:Dept表示列族MajorInfo(專業(yè)信息)中的列限定符Dept(系的名稱),用于存儲具體的系名。4.2.4分布式數(shù)據(jù)庫系統(tǒng)HBase列限定符的數(shù)量不用事先定義好,可以根據(jù)需要無限擴(kuò)展,因此具有良好的伸縮特性。此外,每行中的列限定符數(shù)量可以不同,因此大部分列限定符在某些行中可以為空,因此HBase中的數(shù)據(jù)表具有稀疏性。這樣的設(shè)定使HBase能夠靈活存儲數(shù)據(jù),且稀疏數(shù)據(jù)的存儲效率較高。(4)時間戳(Timestamp):與經(jīng)典的SQL數(shù)據(jù)中的數(shù)據(jù)表不同,HBase數(shù)據(jù)表中的每個數(shù)據(jù)寫入時,還需要一起寫入時間戳,用于表示該數(shù)據(jù)值的版本。默認(rèn)情況下,時間戳由當(dāng)前HBase系統(tǒng)時間給定(64位整型變量),客戶端也可以自定義時間戳,其中時間戳最大的數(shù)據(jù)版本為最新版本。與經(jīng)典的SQL數(shù)據(jù)表在修改數(shù)據(jù)時直接覆蓋原數(shù)據(jù)不同,在HBase表中修改數(shù)據(jù)會增加一個新帶時間戳的副本,通過原數(shù)據(jù)的時間戳,客戶端依舊能夠訪問到原數(shù)據(jù)值。4.2.4分布式數(shù)據(jù)庫系統(tǒng)HBase圖4-14HBase數(shù)據(jù)庫中數(shù)據(jù)表的結(jié)構(gòu)實例4.2.5分布式數(shù)據(jù)倉庫系統(tǒng)Hive數(shù)據(jù)倉庫(DataWarehouse)是一個面向主題的、集成的、相對穩(wěn)定、反映歷史變化的數(shù)據(jù)集合,用于支持管理決策?!皵?shù)據(jù)倉庫”概念由BillInmon于1990年提出,其主要功能是組織聯(lián)機(jī)事務(wù)處理系統(tǒng)(OLTP,如:電子商務(wù)系統(tǒng))在經(jīng)年累月運行過程中積累的海量大數(shù)據(jù),通過數(shù)據(jù)倉庫特有的數(shù)據(jù)存儲架構(gòu),進(jìn)行有效的大數(shù)據(jù)分析,例如:聯(lián)機(jī)分析處理(OLAP)和數(shù)據(jù)挖掘(DataMining,DM),進(jìn)而通過分析結(jié)果構(gòu)建決策支持系統(tǒng)和主管信息系統(tǒng)等,幫助實現(xiàn)商業(yè)智能(BusinessIntelligence,BI)。如圖4-15所示,經(jīng)典的數(shù)據(jù)倉庫包含數(shù)據(jù)源獲取、數(shù)據(jù)存儲和管理、數(shù)據(jù)分析與挖掘引擎以及前端應(yīng)用四個階段。實際上,數(shù)據(jù)倉庫的數(shù)據(jù)來源于多種數(shù)據(jù)庫的存儲集合,4.2.5分布式數(shù)據(jù)倉庫系統(tǒng)Hive圖4-15經(jīng)典的數(shù)據(jù)倉庫體系結(jié)構(gòu)4.2.5分布式數(shù)據(jù)倉庫系統(tǒng)Hive可能包含OLTP系統(tǒng)中的傳統(tǒng)SQL數(shù)據(jù)庫(MySQL),NoSQL數(shù)據(jù)庫(HBase),以及一些外部數(shù)據(jù)。經(jīng)過數(shù)據(jù)倉庫的抽取、轉(zhuǎn)換和加載,以及聯(lián)機(jī)分析處理方法,提供企業(yè)級的商業(yè)智能服務(wù),包括:數(shù)據(jù)挖掘服務(wù)、數(shù)據(jù)分析服務(wù)和數(shù)據(jù)報表服務(wù)等。接下來,我們以電子商務(wù)系統(tǒng)的發(fā)展階段,介紹企業(yè)級業(yè)務(wù)數(shù)據(jù)從數(shù)據(jù)庫到數(shù)據(jù)倉庫的發(fā)展階段:4.2.5分布式數(shù)據(jù)倉庫系統(tǒng)Hive(1)發(fā)展初期:電子商務(wù)類項目的入行門檻較低,通過外包服務(wù)團(tuán)隊設(shè)計網(wǎng)站系統(tǒng)前端、后端和數(shù)據(jù)庫,即可提供常規(guī)的電子商務(wù)服務(wù);(2)發(fā)展中期:經(jīng)過2~3年運營后,電子商務(wù)客戶和訂單日益增多,普通的數(shù)據(jù)查詢業(yè)務(wù)變得逐漸困難,這時候出現(xiàn)大數(shù)據(jù)規(guī)模,一般采用“分庫分表”的方式勉強(qiáng)支撐高并發(fā)的數(shù)據(jù)查詢服務(wù);(3)發(fā)展后期:經(jīng)過5~10年的沉淀后,伴隨著電子商務(wù)業(yè)務(wù)的指數(shù)級增長,面對海量的大數(shù)據(jù)存儲,面臨越來越多復(fù)雜、深入的問題。例如:年輕女性用戶的化妝品購買量與購物促銷活動之間的關(guān)系。這類問題需要通過聯(lián)機(jī)分析處理,從歷史沉淀的海量大數(shù)據(jù)中挖掘出結(jié)果,這時候就需要建立數(shù)據(jù)倉庫,通過數(shù)據(jù)倉庫解決更多的商業(yè)智能需求。數(shù)據(jù)倉庫是大數(shù)據(jù)時代的產(chǎn)物,面對海量大數(shù)據(jù)的快速處理需求,具有如下的特點:4.2.5分布式數(shù)據(jù)倉庫系統(tǒng)Hive(1)面向主題:與面向事務(wù)應(yīng)用的數(shù)據(jù)庫不同,數(shù)據(jù)倉庫組織數(shù)據(jù)的方式是面向主題。例如:以“客戶價值分析”為主題的數(shù)據(jù)倉庫,需整合包含“存款業(yè)務(wù)”、“貸款業(yè)務(wù)”、“信用卡業(yè)務(wù)”和“理財業(yè)務(wù)”等多個業(yè)務(wù)數(shù)據(jù)庫的數(shù)據(jù),然后進(jìn)行主題分析;(2)集成性:數(shù)據(jù)倉庫中的數(shù)據(jù)格式必須保持一致,才能為同一個主題提供分析服務(wù)。因此,數(shù)據(jù)倉庫提供抽取、轉(zhuǎn)換、加載(ETL)方法,將不同結(jié)構(gòu)、不同類型、來自不同數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行集成服務(wù),轉(zhuǎn)換為相同的數(shù)據(jù)類型;(3)穩(wěn)定性:數(shù)據(jù)倉庫中進(jìn)行的主題分析一般來自長時間沉淀的大數(shù)據(jù),這些數(shù)據(jù)一旦進(jìn)入數(shù)據(jù)倉庫后都會保留較長時間,且一般極少更新,因此保持穩(wěn)定且不易丟失;4.2.5分布式數(shù)據(jù)倉庫系統(tǒng)Hive(4)時變性:數(shù)據(jù)倉庫中的大數(shù)據(jù)來自歷史沉淀數(shù)據(jù),隨著時間的推移,將會按照時間順序不斷追加歷史數(shù)據(jù),因此其中的大數(shù)據(jù)反映了歷史時變性。值得注意的是,數(shù)據(jù)倉庫的出現(xiàn)并不是取代數(shù)據(jù)庫,二者的應(yīng)用側(cè)重點不同。表4-12給出了SQL數(shù)據(jù)庫與數(shù)據(jù)倉庫的對比。

在20世紀(jì)90年代,傳統(tǒng)的數(shù)據(jù)倉庫建立在SQL數(shù)據(jù)庫之上,所能分析的數(shù)據(jù)量有限。隨著以分布式數(shù)據(jù)庫為代表的NoSQL數(shù)據(jù)庫興起,如今的數(shù)據(jù)倉庫也建立在分布式文件系統(tǒng)之上,處理來自不同業(yè)務(wù)類型的結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù),同時也繼承分布式架構(gòu)的優(yōu)點。限于篇幅,本節(jié)重點介紹基于Hadoop分布式架構(gòu)的Hive數(shù)據(jù)倉庫,更多的數(shù)據(jù)倉庫資料請讀者自行查閱。4.2.5分布式數(shù)據(jù)倉庫系統(tǒng)Hive表4-12SQL數(shù)據(jù)庫與數(shù)據(jù)倉庫的對比4.2.5分布式數(shù)據(jù)倉庫系統(tǒng)HiveHive是構(gòu)建在Hadoop架構(gòu)上的數(shù)據(jù)倉庫,使用類似SQL(Hive-QL)語句進(jìn)行海量大數(shù)據(jù)的分析和處理。Hive繼承了Hadoop分布式文件系統(tǒng)(HDFS)和分布式并行計算模型(MapReduce)的優(yōu)勢,具有良好的可擴(kuò)展性,且用戶通過學(xué)習(xí)Hive-QL即可將原本建立在SQL數(shù)據(jù)庫上的數(shù)據(jù)倉庫移植到Hive中。Hive具有如下的特點:(1)Hive為用戶提供Hive-QL語句進(jìn)行數(shù)據(jù)操作,若用戶有SQL語句操作基礎(chǔ),能夠快速上手并使用Hive-QL語句完成數(shù)據(jù)的分析操作;(2)Hive提供加載各種類型數(shù)據(jù)的機(jī)制,可靈活處理結(jié)構(gòu)化、非結(jié)構(gòu)化和半結(jié)構(gòu)化大數(shù)據(jù);4.2.5分布式數(shù)據(jù)倉庫系統(tǒng)Hive(3)Hive作為Hadoop框架中的重要一環(huán),數(shù)據(jù)的存儲位置較為靈活,既可以存儲在HDFS中,又可以存儲在HBase中;(4)Hive可使用MapReduce或Spark計算過程執(zhí)行查詢操作,同時支持過程查詢語句,以及亞秒級的高效查詢;(5)Hive提供多種接口,不但包括命令行(CLI),還可以使用驅(qū)動模塊(如:JDBC)。Hive是一個數(shù)據(jù)倉庫工具,本身并沒有數(shù)據(jù)存儲功能。其存儲的數(shù)據(jù)來自HDFS或HBase,但是又不能直接從HDFS或HBase讀取數(shù)據(jù),而是使用Spark或MapReduce實現(xiàn)數(shù)據(jù)讀寫,其本質(zhì)是將Hive-QL語句轉(zhuǎn)化為相應(yīng)的MapReduce處理操作過程。4.2.5分布式數(shù)據(jù)倉庫系統(tǒng)Hive如圖4-16所示,給出了基于Hadoop框架的Hive架構(gòu),可以看出Hive提供了多種訪問接口,且通過MapReduce建立與底層HDFS之間的聯(lián)系,對存儲在其中的海量大數(shù)據(jù)進(jìn)行分析和處理。該架構(gòu)中的名詞解釋如下:(1)元數(shù)據(jù):記錄Hive數(shù)據(jù)倉庫中的模型定義,各層級之間的映射關(guān)系,監(jiān)控數(shù)據(jù)倉庫的數(shù)據(jù)狀態(tài),以及數(shù)據(jù)抽取、轉(zhuǎn)換、加載任務(wù)的運行狀態(tài)。(2)解析器:對用戶所編寫的Hive-QL進(jìn)行基本的語法檢驗,保證正確性;4.2.5分布式數(shù)據(jù)倉庫系統(tǒng)Hive(3)編譯器:將正確的Hive-QL語句翻譯成MapReduce邏輯執(zhí)行計劃;(4)優(yōu)化器:優(yōu)化轉(zhuǎn)化后的MapReduce邏輯,去掉重復(fù)執(zhí)行的邏輯;(5)執(zhí)行器:將優(yōu)化后的邏輯執(zhí)行轉(zhuǎn)化成物理計劃執(zhí)行。0301024.2.5分布式數(shù)據(jù)倉庫系統(tǒng)Hive圖4-16基于Hadoop框架的Hive架構(gòu)034.3

大數(shù)據(jù)分布式計算ONE4.3.1大數(shù)據(jù)分布式批處理框架數(shù)據(jù)的分析與計算是體現(xiàn)數(shù)據(jù)價值的重要手段之一,伴隨著數(shù)據(jù)量日益增多的大數(shù)據(jù)分析和計算場景,研究人員開始構(gòu)建由多個CPU計算單元組成的并行計算框架。例如:信息傳遞接口(MPI)定義了一組具有可移植性的編程接口,提供跨語言的通信協(xié)議,在多臺計算機(jī)之間構(gòu)建高性能的消息傳遞;開放運算語言(OpenCL)是面向異構(gòu)系統(tǒng)通用目的并行編程的開放式、免費標(biāo)準(zhǔn),便于開發(fā)人員面向高性能并行計算機(jī)編寫輕便的代碼;統(tǒng)一計算設(shè)備架構(gòu)(CUDA)是顯卡廠商NVIDIA提供的并行計算平臺和編程模型,利用圖形處理器(GPU)的處理能力,能夠大幅提升并行計算的性能。在這些經(jīng)典的并行計算框架中,都采用“數(shù)據(jù)向計算靠攏”的方式,也就是在計算前將海量大數(shù)據(jù)存儲在不同機(jī)器上,然后通過高性能的消息傳遞、編程語言和編程模型等方式,在計算時將數(shù)據(jù)“拉取”到用于計算的高性能機(jī)器上,從而實現(xiàn)高性能的并行計算框架。4.3.1大數(shù)據(jù)分布式批處理框架隨著海量大數(shù)據(jù)的快速增長,傳統(tǒng)并行計算在數(shù)據(jù)傳輸中出現(xiàn)了性能瓶頸。為了在大數(shù)據(jù)中構(gòu)建更高性能的并行計算框架,MapReduce分布式計算模型將復(fù)雜的、大規(guī)模集群上的并行計算,高度地抽象為Map和Reduce函數(shù),該兩個函數(shù)的核心思想都源于函數(shù)式編程語言,開發(fā)人員即使沒有任何分布式并行計算開發(fā)經(jīng)驗,也能夠通過編寫Map函數(shù)和Reduce函數(shù),輕松將大數(shù)據(jù)的分析和計算并行地部署到計算機(jī)集群中。傳統(tǒng)并行計算架構(gòu)傾向于“計算密集型”應(yīng)用,而分布式并行計算架構(gòu)則傾向于“數(shù)據(jù)密集型”應(yīng)用,二者并沒有高下之分,只是適用于不同的應(yīng)用場景。4.3.1大數(shù)據(jù)分布式批處理框架MapReduce架構(gòu)的基本計算模型和處理思想MapReduce架構(gòu)的基本計算模型和處理思想包含如下三點:(1)采用“分而治之”的策略對付大數(shù)據(jù):對于計算不包含依賴關(guān)系的大數(shù)據(jù),可將其切分成許多獨立的分片,并行處理每個數(shù)據(jù)分片。(2)編程過程上升到抽象的Map函數(shù)和Reduce函數(shù):開發(fā)人員編寫MapReduce計算模型時只需要實現(xiàn)Map函數(shù)和Reduce函數(shù),二者都通過統(tǒng)一的數(shù)據(jù)格式“鍵值對<key,value>”實現(xiàn)輸入輸出,按照一定的規(guī)則進(jìn)行消息傳遞。(3)統(tǒng)一架構(gòu)為開發(fā)人員隱藏底層實現(xiàn)細(xì)節(jié):傳統(tǒng)并行計算架構(gòu)缺少高層并行編程模型(如:MPI),開發(fā)人員需要自己設(shè)計存儲、計算和任務(wù)分發(fā),難度較大。MapReduce模型的編程過程對于開

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論