大數(shù)據(jù)存儲與計算_第1頁
大數(shù)據(jù)存儲與計算_第2頁
大數(shù)據(jù)存儲與計算_第3頁
大數(shù)據(jù)存儲與計算_第4頁
大數(shù)據(jù)存儲與計算_第5頁
已閱讀5頁,還剩76頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章大數(shù)據(jù)存儲與計算

提綱3.1大數(shù)據(jù)存儲3.2HDFS文件系統(tǒng)3.3NoSQL數(shù)據(jù)庫3.4Hbase數(shù)據(jù)庫3.5大數(shù)據(jù)處理3.6分布式計算3.7MapReduce模型3.8Spark通用計算框架《大數(shù)據(jù)導論》

3.1大數(shù)據(jù)存儲

BigData(大數(shù)據(jù)技術(shù))作為一個專有名詞成為熱點,主要應歸功于近年來互聯(lián)網(wǎng)、云計算、移動和物聯(lián)網(wǎng)的迅猛發(fā)展。無所不在的移動設備、RFID、無線傳感器每分每秒都在產(chǎn)生數(shù)據(jù),數(shù)以億計用戶的互聯(lián)網(wǎng)服務時時刻刻在產(chǎn)生巨量的交互,要處理的數(shù)據(jù)量實在是太大、增長太快了,而業(yè)務需求和競爭壓力對數(shù)據(jù)處理的實時性、有效性又提出了更高要求。在這種情況下,傳統(tǒng)的常規(guī)技術(shù)針對大數(shù)據(jù)存儲要求,采取了一些新存儲架構(gòu)和方法,主要包括DAS/NAS/SAN存儲結(jié)構(gòu)。但基于存儲設備的性能、成本等問題的考慮,架構(gòu)基于大規(guī)模分布式計算(MPP)的GFS/HDFS分布式文件系統(tǒng)、各種NoSQL分布式存儲方案等應運而生。3.1.1大數(shù)據(jù)如何存儲1.結(jié)構(gòu)化數(shù)據(jù)存儲結(jié)構(gòu)化數(shù)據(jù)通常是人們所熟悉的數(shù)據(jù)庫中的數(shù)據(jù),它本身就是一種對現(xiàn)實已發(fā)生事項的關(guān)鍵要素進行抽取的有價信息?,F(xiàn)在各類企業(yè)和組織都有自己的管理信息系統(tǒng),隨著時間的推移,數(shù)據(jù)庫中積累的結(jié)構(gòu)化數(shù)據(jù)越來越多,一些問題顯現(xiàn)出來,這些問題可以分為四類:1)歷史數(shù)據(jù)和當前數(shù)據(jù)都存在一個數(shù)據(jù)庫中,導致系統(tǒng)處理速度越來越慢;2)歷史數(shù)據(jù)與當前數(shù)據(jù)的期限如何界定;3)歷史數(shù)據(jù)應如何存儲;4)歷史數(shù)據(jù)的二次增值如何解決。3.1.1大數(shù)據(jù)如何存儲1.結(jié)構(gòu)化數(shù)據(jù)存儲問題1和問題2可以一起處理。導致系統(tǒng)處理速度越來越慢的原因除了傳統(tǒng)的技術(shù)架構(gòu)和當初建設系統(tǒng)的技術(shù)滯后于業(yè)務發(fā)展之外,最主要的是對于系統(tǒng)作用的定位問題。從過去30年管理信息系統(tǒng)發(fā)展的歷史來看,隨著信息技術(shù)的發(fā)展和信息系統(tǒng)領(lǐng)域的不斷細分,可將信息系統(tǒng)分為兩類,一類是基于目前的數(shù)據(jù)生產(chǎn)管理信息系統(tǒng),一類是基于歷史的數(shù)據(jù)應用管理信息系統(tǒng)。問題3和問題4可以放在一起處理。由于歷史數(shù)據(jù)量規(guī)模龐大,相對穩(wěn)態(tài),其存儲和加工處理與數(shù)據(jù)生產(chǎn)管理系統(tǒng)的思路應有很大的不同。結(jié)構(gòu)化數(shù)據(jù)存儲是為了分析而存儲,采用分布式方式,其目標有兩個:一是在海量的數(shù)據(jù)庫中快速查詢歷史數(shù)據(jù),二是在海量的數(shù)據(jù)庫中進行有價值信息的分析和挖掘。數(shù)據(jù)科學1.數(shù)據(jù)科學技能和熟練程度在上表中列出的這25項技能,反映了通常與數(shù)據(jù)科學家相關(guān)的技能集合。在進行針對數(shù)據(jù)科學家的調(diào)查中,調(diào)查者要求數(shù)據(jù)專業(yè)人員指出他們在25項不同數(shù)據(jù)科學技能上的熟練程度。這項研究數(shù)據(jù)基于620名被訪的數(shù)據(jù)專業(yè)人士,具備某種技能的百分比反映了指出他在該技能上至少中等熟練程度的被訪問者比例職位角色,即:商業(yè)經(jīng)理=250;開發(fā)人員=222;創(chuàng)意人員=221;研究人員=353。數(shù)據(jù)科學2.重要數(shù)據(jù)科學技能分析表明,所有數(shù)據(jù)專業(yè)人員中最常見的數(shù)據(jù)科學十大技能是:統(tǒng)計–溝通(87%)技術(shù)–處理結(jié)構(gòu)化數(shù)據(jù)(75%)數(shù)學&建模–數(shù)學(71%)商業(yè)–項目管理(71%)統(tǒng)計–數(shù)據(jù)挖掘和可視化工具(71%)統(tǒng)計–科學/科學方法(65%)統(tǒng)計–數(shù)據(jù)管理(65%)商業(yè)–產(chǎn)品設計和開發(fā)(59%)統(tǒng)計–統(tǒng)計學和統(tǒng)計建模(59%)商業(yè)–商業(yè)開發(fā)(53%)數(shù)據(jù)科學3.因職業(yè)角色而異的十大技能(1)商業(yè)經(jīng)理:統(tǒng)計–溝通(91%)商業(yè)–項目管理(86%)商業(yè)–商業(yè)開發(fā)(77%)技術(shù)–處理結(jié)構(gòu)化數(shù)據(jù)(74%)商業(yè)–預算(71%)商業(yè)–產(chǎn)品設計和開發(fā)(70%)數(shù)學&建模–數(shù)學(65%)統(tǒng)計–數(shù)據(jù)管理(64%)統(tǒng)計--數(shù)據(jù)挖掘和可視化工具(64%)商業(yè)–管理和兼容性(61%)(2)開發(fā)人員:技術(shù)–管理結(jié)構(gòu)化數(shù)據(jù)(91%)統(tǒng)計–溝通(85%)統(tǒng)計–數(shù)據(jù)挖掘和可視化工具(76%)商業(yè)–產(chǎn)品設計(75%)數(shù)學&建模–數(shù)學(75%)統(tǒng)計–數(shù)據(jù)管理(75%)商業(yè)–項目管理(74%)編程–數(shù)據(jù)庫管理(73%)編程–后端編程(70%)編程–系統(tǒng)管理(65%)數(shù)據(jù)科學數(shù)據(jù)科學(3)創(chuàng)意人員:統(tǒng)計–溝通(87%)技術(shù)–處理結(jié)構(gòu)化數(shù)據(jù)(79%)商業(yè)–項目管理(77%)統(tǒng)計–數(shù)據(jù)挖掘和可視化工具(77%)數(shù)學&建模–數(shù)學(75%)商業(yè)–產(chǎn)品設計和開發(fā)(68%)統(tǒng)計–科學/科學方法(68%)統(tǒng)計–數(shù)據(jù)管理(67%)統(tǒng)計–統(tǒng)計學和統(tǒng)計建模(63%)商業(yè)–商業(yè)開發(fā)(58%)2.非結(jié)構(gòu)化數(shù)據(jù)存儲常見的非結(jié)構(gòu)化數(shù)據(jù)包括文件、圖片、視頻、語音、郵件和聊天記錄等,和結(jié)構(gòu)化數(shù)據(jù)相比,這些數(shù)據(jù)是未被抽象出有價值信息的數(shù)據(jù),需要經(jīng)過二次加工才能得到其有價值信息。由于非結(jié)構(gòu)化數(shù)據(jù)的生產(chǎn)不受格式約束、不受主題約束,人人隨時都可以根據(jù)自己的視角和觀點進行創(chuàng)作生產(chǎn),所以數(shù)據(jù)量比結(jié)構(gòu)化數(shù)據(jù)大。由于非結(jié)構(gòu)化數(shù)據(jù)具有形式多樣、體量大、來源廣、維度多、有價內(nèi)容密度低、分析意義大等特點,所以要為了分析而存儲,而不是為了存儲而存儲,即存儲工作是分析的前置工作。當前針對非結(jié)構(gòu)化數(shù)據(jù)的特點均采用分布式文件系統(tǒng)方式來存儲這些數(shù)據(jù)。3.1.1大數(shù)據(jù)如何存儲3.半結(jié)構(gòu)化數(shù)據(jù)存儲半結(jié)構(gòu)化數(shù)據(jù)是指數(shù)據(jù)中既有結(jié)構(gòu)化數(shù)據(jù),也有非結(jié)構(gòu)化數(shù)據(jù),比如,攝像頭回轉(zhuǎn)給后端的數(shù)據(jù)中有位置、時間等結(jié)構(gòu)化數(shù)據(jù),還有圖片等非結(jié)構(gòu)化數(shù)據(jù)。這些數(shù)據(jù)是以數(shù)據(jù)流的形式傳遞的,所以半結(jié)構(gòu)化數(shù)據(jù)也叫流數(shù)據(jù)。對流數(shù)據(jù)進行處理的系統(tǒng)叫做數(shù)據(jù)流系統(tǒng)。數(shù)據(jù)流的特點是數(shù)據(jù)不是永久存儲在數(shù)據(jù)庫中的靜態(tài)數(shù)據(jù),而是瞬時處理的源源不斷的連續(xù)數(shù)據(jù)流。在大量的數(shù)據(jù)流應用系統(tǒng)中,數(shù)據(jù)流來自于地理上不同位置的數(shù)據(jù)源,非常適合分布式查詢處理。3.1.1大數(shù)據(jù)如何存儲1.容量問題要求數(shù)據(jù)容量通??蛇_PB級,因此,海量數(shù)據(jù)存儲系統(tǒng)一定要有相應等級的擴展能力。同時存儲系統(tǒng)的擴展一定要簡便,可以通過增加模塊或磁盤組來增加容量,擴展時甚至不需要停機。2.延遲問題“大數(shù)據(jù)”應用存在實時性問題,特別是涉及與網(wǎng)上交易或者金融類相關(guān)的應用。為了應對這樣的挑戰(zhàn),各種模式的固態(tài)存儲設備應運而生,小到簡單地在服務器內(nèi)部做高速緩存,大到通過高性能閃存存儲的全固態(tài)介質(zhì)可擴展存儲系統(tǒng),以及自動、智能地對熱點數(shù)據(jù)進行讀/寫高速緩存的系列產(chǎn)品。3.安全問題某些特殊行業(yè)的應用,比如金融數(shù)據(jù)、醫(yī)療信息以及政府情報等都有自己的安全標準和保密性要求。同時,大數(shù)據(jù)分析往往需要多類數(shù)據(jù)的相互參考,因此,會催生出一些新的、需考慮的安全問題。4.成本問題對于需要使用大數(shù)據(jù)環(huán)境的企業(yè)來說,成本控制是關(guān)鍵問題。想控制成本,就意味著讓每一臺設備實現(xiàn)更高效率,同時盡量減少昂貴的部件。目前,重復數(shù)據(jù)刪除技術(shù)已進入主存儲市場。3.1.2大數(shù)據(jù)存儲的問題5.數(shù)據(jù)的積累任何數(shù)據(jù)都是歷史記錄的一部分,而且數(shù)據(jù)的分析大多是基于時間段進行的。要實現(xiàn)長期的數(shù)據(jù)保存,就要求存儲廠商開發(fā)出能夠持續(xù)進行數(shù)據(jù)一致性檢測和保持長期高可用特性的產(chǎn)品,同時還要滿足數(shù)據(jù)直接在原位更新的功能需求。6.靈活性大數(shù)據(jù)存儲系統(tǒng)的基礎(chǔ)設施規(guī)模通常很大,因此必須經(jīng)過仔細設計才能保證存儲系統(tǒng)的靈活性,使其能夠隨著應用分析軟件一起擴容及擴展。在大數(shù)據(jù)存儲環(huán)境中,數(shù)據(jù)會同時保存在多個部署站點,已不需要再做數(shù)據(jù)遷移。一個大型的數(shù)據(jù)存儲基礎(chǔ)設施投入使用后就很難再調(diào)整,因此它必須能適應不同應用類型和數(shù)據(jù)場景。7.應用感知最早的一批大數(shù)據(jù)用戶已經(jīng)開發(fā)出針對應用的定制化的基礎(chǔ)設施,在主流存儲系統(tǒng)領(lǐng)域,應用感知技術(shù)的使用越來越普遍,它是改善系統(tǒng)效率和性能的重要手段,8.針對小用戶依賴大數(shù)據(jù)的不僅僅是特殊的大型用戶群體,作為一種商業(yè)需求,小型企業(yè)也將會用到大數(shù)據(jù)。目前一些存儲廠商已經(jīng)在開發(fā)一些小型的“大數(shù)據(jù)”存儲系統(tǒng),以吸引那些對成本比較敏感的用戶。3.1.2大數(shù)據(jù)存儲的問題

3.2HDFS文件系統(tǒng)

3.2.1相關(guān)概念1.存儲塊HDFS使用Block(存儲塊)對文件的存儲進行操作,Block是HDFS的基本存儲單元,在Hadoop1.x中默認大小是64M,Hadoop2.x中大小默認為128M,一個文件被分成多個塊,以塊作為存儲單位塊的大小遠遠大于普通文件系統(tǒng),可以最小化尋址開銷。HDFS采用抽象的塊概念可以帶來以下幾個明顯的好處:支持大規(guī)模文件存儲:文件以塊為單位進行存儲,一個大規(guī)模文件可以被分拆成若干個文件塊,不同的文件塊可以被分發(fā)到不同的節(jié)點上,因此,一個文件的大小不會受到單個節(jié)點的存儲容量的限制,可以遠遠大于網(wǎng)絡中任意節(jié)點的存儲容量。簡化系統(tǒng)設計:首先,大大簡化了存儲管理,因為文件塊大小是固定的,這樣就可以很容易計算出一個節(jié)點可以存儲多少文件塊;其次,方便了元數(shù)據(jù)的管理,元數(shù)據(jù)不需要和文件塊一起存儲,可以由其他系統(tǒng)負責管理元數(shù)據(jù)。適合數(shù)據(jù)備份:每個文件塊都可以冗余存儲到多個節(jié)點上,大大提高了系統(tǒng)的容錯性和可用性。

3.2HDFS文件系統(tǒng)

2.NameNode、SecondaryNameNode和DataNodeNameNode管理文件系統(tǒng)的命名空間。NameNode維護兩套數(shù)據(jù):一套是文件目錄與數(shù)據(jù)塊之間的映射關(guān)系,另一套是數(shù)據(jù)塊與節(jié)點間的關(guān)系。SecondaryNameNode第二名稱節(jié)點是HDFS架構(gòu)中的一個組成部分,它是用來保存名稱節(jié)點中對HDFS元數(shù)據(jù)信息的備份,并減少名稱節(jié)點重啟的時間。SecondaryNameNode一般是單獨運行在一臺機器上。DataNode數(shù)據(jù)節(jié)點是分布式文件系統(tǒng)HDFS的工作節(jié)點,負責數(shù)據(jù)的存儲和讀取,會根據(jù)客戶端或者是名稱節(jié)點的調(diào)度來進行數(shù)據(jù)的存儲和檢索,并且向名稱節(jié)點定期發(fā)送自己所存儲的塊的列表。每個數(shù)據(jù)節(jié)點中的數(shù)據(jù)會被保存在各自節(jié)點的本地Linux文件系統(tǒng)中。

3.2HDFS文件系統(tǒng)

3.心跳機制所謂“心跳”是一種形象化描述,指的是持續(xù)的按照一定頻率在運行,類似于心臟在永無休止的跳動。這里指的是DataNode向NameNode發(fā)送心跳的周期是3秒,NameNode周期性的從集群中的每個DataNode接收心跳包和塊報告,NameNode可以根據(jù)這個報告驗證塊映射和其他文件系統(tǒng)元數(shù)據(jù)。收到心跳包說明DataNode工作正常。如果DataNode不能發(fā)出心跳信息,NameNode會標記沒有心跳的DataNode為宕機,不會給它任何新的I/O請求。4.機架感知Hadoop在設計時考慮到數(shù)據(jù)的安全與高效,數(shù)據(jù)文件默認在HDFS上存放三份,存儲策略為本地一份,同機架內(nèi)其它某一節(jié)點上一份,不同機架的某一節(jié)點上一份。這樣如果本地數(shù)據(jù)損壞,節(jié)點可以從同一機架內(nèi)的相鄰節(jié)點拿到數(shù)據(jù),速度肯定比從跨機架節(jié)點上拿數(shù)據(jù)要快;同時,如果整個機架的網(wǎng)絡出現(xiàn)異常,也能保證在其它機架的節(jié)點上找到數(shù)據(jù)。

3.2.2HDFS分布式文件系統(tǒng)的結(jié)構(gòu)

HDFS采用Master/Slave架構(gòu)。一個HDFS集群是由一個NameNode和一定數(shù)目的DataNodes組成。NameNode是一個中心服務器,負責管理文件系統(tǒng)的名字空間(namespace)以及客戶端對文件的訪問。集群中的DataNode一般是一個節(jié)點一個,負責管理它所在節(jié)點上的存儲。HDFS暴露了文件系統(tǒng)的名字空間,用戶能夠以文件的形式在上面存儲數(shù)據(jù)。從內(nèi)部看,一個文件其實被分成一個或多個數(shù)據(jù)塊,這些塊存儲在一組DataNode上。NameNode執(zhí)行文件系統(tǒng)的名字空間操作,比如打開、關(guān)閉、重命名文件或目錄。它也負責確定數(shù)據(jù)塊到具體DataNode節(jié)點的映射。DataNode負責處理文件系統(tǒng)客戶端的讀寫請求。在NameNode的統(tǒng)一調(diào)度下進行數(shù)據(jù)塊的創(chuàng)建、刪除和復制,如圖3-1所示的HDFS文件系統(tǒng)整體結(jié)構(gòu)。

3.2.2HDFS分布式文件系統(tǒng)的結(jié)構(gòu)

2.3.3HDFS存儲原理

1.冗余數(shù)據(jù)保存作為一個分布式文件系統(tǒng),HDFS的主要設計目標就是為了保證系統(tǒng)的容錯性和可用性,HDFS采用了多副本方式對數(shù)據(jù)進行冗余存儲,通常一個數(shù)據(jù)塊的多個副本會被分布到不同的數(shù)據(jù)節(jié)點上,HDFS默認的副本系數(shù)是3,這適用于大多數(shù)情況。如圖所示,數(shù)據(jù)塊A被分別存放到數(shù)據(jù)節(jié)點1和2和4上,數(shù)據(jù)塊B被存放在數(shù)據(jù)節(jié)點2、4和5上。這種多副本方式具有以下幾個優(yōu)點:

(1)加快數(shù)據(jù)傳輸速度(2)容易檢查數(shù)據(jù)錯誤(3)保證數(shù)據(jù)可靠性

3.2.3HDFS存儲原理

1.數(shù)據(jù)存取策略1)數(shù)據(jù)存放第一個副本:放置在上傳文件的數(shù)據(jù)節(jié)點;如果是集群外提交,則隨機挑選一臺磁盤不太滿、CPU不太忙的節(jié)點。

第二個副本:放置在與第一個副本不同的機架的節(jié)點上。第三個副本:與第一個副本相同機架的其他節(jié)點上。更多副本:隨機節(jié)點。

3.2.3HDFS存儲原理

1.數(shù)據(jù)存取策略2)數(shù)據(jù)讀取當客戶端讀取數(shù)據(jù)時,從名稱節(jié)點獲得數(shù)據(jù)塊不同副本的存放位置列表,列表中包含了副本所在的數(shù)據(jù)節(jié)點,可以調(diào)用API來確定客戶端和這些數(shù)據(jù)節(jié)點所屬的機架ID,當發(fā)現(xiàn)某個數(shù)據(jù)塊副本對應的機架ID和客戶端對應的機架ID相同時,就優(yōu)先選擇該副本讀取數(shù)據(jù),如果沒有發(fā)現(xiàn),就隨機選擇一個副本讀取數(shù)據(jù)3)數(shù)據(jù)復制

數(shù)據(jù)復制主要是在數(shù)據(jù)寫入和數(shù)據(jù)恢復的時候發(fā)生。當客戶端向HDFS文件寫入數(shù)據(jù)的時候,一開始是寫到本地臨時文件中。假設該文件的副本系數(shù)設置為3,當本地臨時文件累積到一個數(shù)據(jù)塊的大小時,客戶端會從NameNode獲取一個DataNode列表用于存放副本。然后客戶端開始向第一個DataNode傳輸數(shù)據(jù),第一個DataNode一小部分一小部分(4KB)地接收數(shù)據(jù),將每一部分寫入本地倉庫,并同時傳輸該部分到列表中第二個DataNode節(jié)點。第二個DataNode也是這樣,一小部分一小部分地接收數(shù)據(jù),寫入本地倉庫,并同時傳給第三個DataNode。最后,第三個DataNode接收數(shù)據(jù)并存儲在本地。

3.3NoSQL數(shù)據(jù)庫

NoSQL(NotOnlySQL),意即“不僅僅是SQL”,泛指非關(guān)系型的數(shù)據(jù)庫,是一項全新的數(shù)據(jù)庫革命性運動。NoSQL一詞最早出現(xiàn)于1998年,是CarloStrozzi開發(fā)的一個輕量、開源、不提供SQL功能的關(guān)系型數(shù)據(jù)庫。2009年Last.fm的JohanOskarsson發(fā)起了一次關(guān)于分布式開源數(shù)據(jù)庫的討論,來自Rackspace的EricEvans再次提出了NoSQL的概念,這時的NoSQL主要指非關(guān)系型、分布式、不提供ACID的數(shù)據(jù)庫設計模式。2009年在亞特蘭大舉行的“no:sql(east)”討論會是一個里程碑,其口號是selectfun,profitfromreal—worldwhererelational=false;”。因此,對于NoSQL,最普遍的解釋是“非關(guān)聯(lián)型的”,強調(diào)鍵值存儲和文檔數(shù)據(jù)庫的優(yōu)點,而不是單純地反對RDBMS。相對于目前鋪天蓋地的關(guān)系型數(shù)據(jù)庫運用,這一概念無疑是一種全新的思維的注入。

3.3NoSQL數(shù)據(jù)庫

3.3.1NoSQL的產(chǎn)生傳統(tǒng)的關(guān)系數(shù)據(jù)庫在應付Web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的Web2.0純動態(tài)網(wǎng)站方面,已經(jīng)顯得力不從心,暴露了很多難以克服的問題,主要包括以下幾個方面:

對數(shù)據(jù)庫高并發(fā)讀寫的性能需求:Web2.0網(wǎng)站要根據(jù)用戶個性化信息來實時生成動態(tài)頁面和提供動態(tài)信息,所以,基本上無法使用動態(tài)頁面靜態(tài)化技術(shù),因此數(shù)據(jù)庫并發(fā)負載非常高,往往要達到每秒上萬次讀寫請求。關(guān)系數(shù)據(jù)庫應付上萬次SQL查詢還勉強頂?shù)米。菓渡先f次SQL寫數(shù)據(jù)請求,硬盤I/O就已經(jīng)無法承受了。其實對于普通的BBS網(wǎng)站,往往也存在對高并發(fā)寫請求的需求。

3.3NoSQL數(shù)據(jù)庫

對海量數(shù)據(jù)的高效率存儲和訪問的需求:對于大型的SNS站,每天用戶產(chǎn)生海量的用戶動態(tài),以國外的Friendfeed為例,一個月就達到了2.5億條用戶動態(tài),對于關(guān)系數(shù)據(jù)庫來說,在一張2.5億條記錄的表里面進行SQL查詢,效率是極其低下甚至是不可忍受的。再例如大型Web網(wǎng)站的用戶登錄系統(tǒng),例如騰訊和盛大,動輒數(shù)以億計的帳號,關(guān)系數(shù)據(jù)庫也很難應付。

對數(shù)據(jù)庫的高可擴展性和高可用性的需求:在基于Web的架構(gòu)當中,數(shù)據(jù)庫是最難進行橫向擴展的,當一個應用系統(tǒng)的用戶量和訪問量與日俱增的時候,你的數(shù)據(jù)庫卻沒有辦法像網(wǎng)頁服務器和應用服務器那樣簡單地通過添加更多的硬件和服務節(jié)點來擴展性能和負載能力。對于很多需要提供24小時不間斷服務的網(wǎng)站來說,對數(shù)據(jù)庫系統(tǒng)進行升級和擴展是非常痛苦的事情,往往需要停機維護和數(shù)據(jù)遷移。

3.2.2NoSQL與RDBMS

關(guān)系型數(shù)據(jù)庫與NoSQL的簡單比較

3.3.3NoSQL的分類

NoSQL僅僅是一個概念,NoSQL數(shù)據(jù)庫根據(jù)數(shù)據(jù)的存儲模型和特點分為很多種類,如何對他們分類,以便方便地根據(jù)自己應用特色選擇不同的NoSQL數(shù)據(jù)庫呢?NoSQL主要有六種存儲類型:列存儲、文檔存儲、Key-value存儲、圖存儲、對象存儲、xml數(shù)據(jù)庫,如表所示。

3.3.4NoSQL與NewSQL

雖然NoSQL數(shù)據(jù)庫提供了高擴展性和靈活性,但是它也有自己的缺點,主要有以下幾個方面:數(shù)據(jù)模型和查詢語言沒有數(shù)字驗證。SQL基于關(guān)系代數(shù)和關(guān)系演算的查詢結(jié)構(gòu)有堅實的數(shù)學保證,由于NoSQL沒有使用SQL,而使用一些模型還未有完善的數(shù)學基礎(chǔ),這也是NoSQL系統(tǒng)較為混亂的主要原因之一。不支持ACID特性。這為NoSQL帶來優(yōu)勢的同時也帶了了缺點,事務在有些情況下需要ACID特性使得系統(tǒng)在中斷情況下也能保證在線事務準確執(zhí)行。功能簡單。大多數(shù)NoSQL系統(tǒng)提供的功能比較簡單,這就增加了應用層的負擔。例如應用層要實現(xiàn)ACID,那么編寫代碼的程序員一定極其痛苦。沒有統(tǒng)一的查詢模型。NoSQL系統(tǒng)一般提供不同的查詢模型,這使得很難規(guī)范應用程序接口。

3.3.4NoSQL與NewSQL

NewSQL是用于在線事務處理(OLTP)的下一代可伸縮關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS),它可為讀寫工作負載提供NoSQL系統(tǒng)的可伸縮性能,并且維護保證傳統(tǒng)數(shù)據(jù)庫系統(tǒng)的ACID(原子性,一貫性,隔離,耐久性)。這些系統(tǒng)通過employingNoSQL樣式的功能(如面向列的數(shù)據(jù)存儲和分布式體系結(jié)構(gòu))來突破傳統(tǒng)的RDBMS性能限制,或采用內(nèi)存處理、對稱多處理(SMP)或Massively并行加工等技術(shù),并集成NoSQL或Searchcomponents,旨在處理大數(shù)據(jù)的體積、品種、速度和變異性等難題。

3.3.4NoSQL與NewSQL

NewSQL數(shù)據(jù)庫的分類類似于NoSQL,有許多類別的NewSQL解決方案。分類是基于供應商為保留SQL接口而采用的不同方法,并解決傳統(tǒng)的OLTP解決方案的可伸縮性和性能問題。NewSQL系統(tǒng)可分為三類新的體系結(jié)構(gòu)數(shù)據(jù)庫點集群中運行的。這些數(shù)據(jù)庫通常是從頭編寫的,并考慮到分布式體系結(jié)構(gòu),包括分布式并發(fā)控制、流控制和分布式查詢處理等組件。這類數(shù)據(jù)庫有VoltDB、NuoDBClustrix等。新的MySQL存儲引擎相同的編程接口,但比內(nèi)置引擎(如InnoDB)更有規(guī)模。這些新的存儲引擎的例子包括TokuDB和InfiniDB。透明聚類/切分這些解決方案保留了OLTP數(shù)據(jù)庫的原始格式,為群集提供了可插入的功能,以確??缮炜s性。

3.4HBase數(shù)據(jù)庫

3.4.1

Hbase簡介HBase即HadoopDatabase,是一個分布式的、面向列的開源數(shù)據(jù)庫,該技術(shù)來源于FayChang所撰寫的Google論文“Bigtable:一個結(jié)構(gòu)化數(shù)據(jù)的分布式存儲系統(tǒng)”。就像Bigtable利用了Google文件系統(tǒng)(FileSystem)所提供的分布式數(shù)據(jù)存儲一樣,HBase在Hadoop之上提供了類似于Bigtable的能力。HBase是Apache的Hadoop項目的子項目。HBase不同于一般的關(guān)系數(shù)據(jù)庫,它是一個適合于非結(jié)構(gòu)化數(shù)據(jù)存儲的數(shù)據(jù)庫。另一個不同的是HBase基于列的而不是基于行的模式。數(shù)據(jù)模型HBase的數(shù)據(jù)模型也是由一張張的表組成,每一張表里也有數(shù)據(jù)行和列,但是在HBase數(shù)據(jù)庫中的行和列又和關(guān)系型數(shù)據(jù)庫的稍有不同。下面統(tǒng)一介紹HBase數(shù)據(jù)模型中一些名詞的概念:表(Table):HBase會將數(shù)據(jù)組織進一張張的表里面,但是需要注意的是表名必須是能用在文件路徑里的合法名字,因為HBase的表是映射成hdfs上面的文件。行鍵(RowKey):HBase表的主鍵,表中的記錄按照行鍵排序;

時間戳(Timestamp):每次數(shù)據(jù)操作對應的時間戳,可以看作是數(shù)據(jù)的版本號;

列族(ColumnFamily):表在水平方向有一個或者多個列族組成,一個列族中可以由任意多個列組成,即列族支持動態(tài)擴展,無需預先定義列的數(shù)量以及類型,所有列均以二進制格式存儲,用戶需要自行進行類型轉(zhuǎn)換。單元(Cell):每一個行鍵,列族和列標識共同組成一個單元,存儲在單元里的數(shù)據(jù)稱單元數(shù)據(jù),單元和單元數(shù)據(jù)也沒有特定的數(shù)據(jù)類型,以二進制字節(jié)來存儲。

3.4.1Hbase簡介

HBase的系統(tǒng)架構(gòu)個功能組件類似于HDFS,由ZooKeeper、HMaster、HRegionServer組成。其中HMaster的作用類似于HDFS中的NameNode名字節(jié)點;HRegionServer的作用類似于數(shù)據(jù)節(jié)點DataNode。

3.4.2Hbase體系結(jié)構(gòu)

1)ClientClient是Hbase功能的使用者,包含訪問HBase的接口,client維護著一些緩存來加快對HBase的訪問,比如HRegion的位置信息。HBaseClient使用HBase的RPC機制與HMaster和HRegionServer進行通信。對于管理類操作,Client與HMaster進行RPC;對于數(shù)據(jù)讀寫類操作,Client與HRegionServer進行RPC。2)zookeeper協(xié)調(diào)者Zookeeper存儲了RegionServer的狀態(tài)信息、HMaster地址,存儲Hbase的schema,包括有哪些table,每個table有哪些columnfamily。監(jiān)控主Master和備用Master,一旦主Master異常馬上啟用備用Master。HMaster隨時感知各個HRegionServer的健康狀況。

3.4.2Hbase體系結(jié)構(gòu)

3)HMaster管理者HMaster沒有單點問題,HBase中可以啟動多個HMaster,通過Zookeeper的MasterElection機制保證總有一個HMaster運行,HMaster在功能上主要負責表和HRegion的管理工作:

管理用戶對表的增、刪、改、查操作;

管理HRegionServer的負載均衡,調(diào)整HRegion分布;

在HRegion分裂后,負責新HRegion的分配;

在HRegionServer停機后,負責失效HRegionServer上的HRegion的遷移。

每個HRegion服務器都會和HMaster服務器通訊,HMaster的主要任務就是要告訴每個HRegion服務器它要維護哪些HRegion。

3.4.2Hbase體系結(jié)構(gòu)

4)HRegionServer存儲者HregionServer是HBase中最核心的模塊,主要負責響應用戶I/O請求,向HDFS文件系統(tǒng)中讀寫數(shù)據(jù)。HRegionServer內(nèi)部管理了一系列HRegion對象,每個HRegion對應著表(Table)中的一個HRegion,HRegion由多個HStore組成。每個HStore對應了表中的一個列族的存儲,可以看出,每個列族其實就是一個集中的存儲單元,因此,最好將具備共同IO特性的列放在一個列族中,這樣最高效。Client訪問HBase上數(shù)據(jù)的過程并不需要HMaster參與(尋址訪問Zookeeper和HRegionServer,數(shù)據(jù)讀寫訪問HRegionServer),HMaster僅僅維護著表和HRegion的元數(shù)據(jù)信息,負載很低。

3.4.2Hbase體系結(jié)構(gòu)

1.物理模型用戶在表格中存儲數(shù)據(jù),每一行都有一個可排序的主鍵和任意多的列。由于是稀疏存儲,同一張里面的每一行數(shù)據(jù)都可以有截然不同的列。列名字的格式是"<family>:<qualifier>",都是由字符串組成的,每一張表有一個列族集合,這個集合是固定不變的,只能通過改變表結(jié)構(gòu)來改變。但是qulifier值相對于每一行來說都是可以改變的。HBase把同一個列族里面的數(shù)據(jù)存儲在同一個目錄下,并且HBase的寫操作是鎖行的,每一行都是一個原子元素,都可以加鎖。HBase所有數(shù)據(jù)庫的更新都有一個時間戳標記,每個更新都是一個新的版本,HBase會保留一定數(shù)量的版本,這個值是可以設定的,客戶端可以選擇獲取距離某個時間點最近的版本單元的值,或者一次獲取所有版本單元的值。

3.4.3

HBase數(shù)據(jù)模型

2.概念視圖可以將一個表想象成一個大的映射關(guān)系,通過行健、行健+時間戳或行鍵+列(列族:列修飾符),就可以定位特定數(shù)據(jù),HBase是稀疏存儲數(shù)據(jù)的,因此某些列可以是空白的,下表是某個test表的HBase概念視圖。

3.4.3

HBase數(shù)據(jù)模型

3.5大數(shù)據(jù)處理

3.5.1多處理器技術(shù)1.單處理器計算性能的發(fā)展提升單處理器計算機系統(tǒng)計算速度的常用技術(shù)手段有以下幾個方面:1)提升計算機處理器字長。2)提高處理器芯片集成度。3)提升處理器的主頻。4)改進處理器微架構(gòu)。2.多處理器技術(shù)的發(fā)展大數(shù)據(jù)處理的基本單元是計算機,作為計算機核心的處理器的功能是將輸入的數(shù)字化數(shù)據(jù)和信息進行加工和處理,然后將結(jié)果輸出。因此處理器的性能往往是決定計算機性能高低的決定性因素。衡量一個具有N個處理器的計算節(jié)點的性能指標可用公式(3-1)表示。

公式(3-1)

IPS的計算過程包括兩部分,前半部分是單個處理器計算能力的計算過程,后半部分是N個并行處理器結(jié)合后該計算節(jié)點的計算能力的計算過程。在前半部分中,MF(MainFrequency)為處理器的主頻,即處理器內(nèi)核工作的時鐘頻率(ClockSpeed);IPC(InstructionPerClock)為每個時鐘周期內(nèi)可執(zhí)行的指令數(shù)。在后半部分中,F(xiàn)為計算工作中不可被并行化的部分所占比例;N為處理器數(shù)量。

從公式中可以看出,提高計算節(jié)點的性能有兩個途徑,一方面是增加單處理器的計算能力;另一方面是增加處理器的數(shù)量從公式可以看出,提高處理器的主頻(MF)是提升計算能力的最直接方式

3.5.1多處理器技術(shù)

多處理器計算系統(tǒng)按照其結(jié)構(gòu)特征,通??梢苑譃閮深悾悍菍ΨQ多處理器架構(gòu)(AsymmetricMultiProcessing,ASMP);對稱多處理器架構(gòu)(SymmetricMultiProcessing,SMP)

3.5.1多處理器技術(shù)

3.5.2并行計算

并行計算(ParallelComputing)是指在具有并行處理能力的計算節(jié)點上,將一個計算任務分解成多個并行子任務,并分配給不同的處理器,各個處理器之間相互協(xié)同,并行地執(zhí)行子任務,從而達到加速計算速度或提升計算規(guī)模的目的。為了成功開展并行計算,必須具備三個基本條件:并行機;并行算法的設計;并行編程。3.2并行計算1.并行機并行計算的基礎(chǔ)是具有并行處理能力的計算節(jié)點,即并行機,并行機需包含兩個或兩個以上的處理器,這些處理器通過互連網(wǎng)絡相連,協(xié)同并行工作。并行機的核心要素主要包括3個:處理器、內(nèi)存、網(wǎng)絡,因此計算節(jié)點并行化研究工作也就集中在這3個核心要素的并行化上。處理器通常采用以下幾種方式對處理器資源進行并行化提升超標量(Superscalar)技術(shù)顯式并行指令計算(ExplicitlyParallelInstructionsComputing,EPIC)向量處理器(VectorProcessor)多線程(Multithreading)技術(shù)內(nèi)存的并行化方式可以分為兩類。分布式內(nèi)存結(jié)構(gòu)。共享內(nèi)存結(jié)構(gòu)3.5.2并行計算互連網(wǎng)絡是連接所有處理節(jié)點形成并行機的高速網(wǎng)絡,因此是決定并行機性能的第三個核心因素。在這里對這些網(wǎng)絡結(jié)構(gòu)按照其連接性質(zhì)做一個簡要的分類。1)靜態(tài)拓撲結(jié)構(gòu)靜態(tài)拓撲結(jié)構(gòu)即處理節(jié)點之間通過固定的物理連接相連,且在程序運行的過程中節(jié)點間的連接方式不發(fā)生變化。這樣的靜態(tài)拓撲結(jié)構(gòu)包括陣列(Array)、環(huán)(Ring)、網(wǎng)格(Mesh)、環(huán)面(Torus)、樹(Tree)、超立方體(Hypercube)、蝶網(wǎng)(Butterfly)、Benes網(wǎng)等。

2)動態(tài)拓撲結(jié)構(gòu)動態(tài)拓撲結(jié)構(gòu)即在處理節(jié)點之間的連接路徑交叉處采用電子開關(guān)、路由器或仲裁器等動態(tài)連接設備,實現(xiàn)節(jié)點間的動態(tài)連接。動態(tài)拓撲結(jié)構(gòu)包括單一總線、多層總線、交叉開關(guān)、多級互連網(wǎng)絡等。3)高速互聯(lián)網(wǎng)絡高速互聯(lián)網(wǎng)絡是隨著網(wǎng)絡技術(shù)的發(fā)展而新產(chǎn)生的新的并行機互連網(wǎng)絡。在高速互聯(lián)網(wǎng)絡模式下,處理節(jié)點間可以通過高速以太網(wǎng)或?qū)S媒粨Q機相連,實現(xiàn)高達G比特甚至T比特級的數(shù)據(jù)交換。高速互聯(lián)網(wǎng)絡的引入,降低了并行機互連網(wǎng)絡的設計難度和研發(fā)成本,使得采用普通計算機集群作為并行技術(shù)節(jié)點成為可能,極大地推動了并行計算的應用領(lǐng)域和規(guī)模。3.5.2并行計算2.并行算法

適合并行機處理的計算任務普遍具有可分解為多個并行子任務的特性,將一個大的計算任務分解為多個可執(zhí)行的并行子任務的過程即為并行算法的設計。一個好的并行算法設計,可以極大地提升計算任務的并行度,即可降低式(3-1)中的參數(shù)F,從而實現(xiàn)在并行計算環(huán)境下的更高性能處理。并行算法的設計過程,可以分為以下4個階段3.5.2并行計算1)劃分(Partitioning)劃分方法描述充分開拓算法的并發(fā)性和可擴放性;先進行數(shù)據(jù)分解(稱域分解),再進行計算功能的分解(稱功能分解);使數(shù)據(jù)集和計算集互不相交;劃分階段忽略處理器數(shù)目和目標機器的體系結(jié)構(gòu);能分為兩類劃分:域分解(domaindecomposition)功能分解(functionaldecomposition)3.5.2并行計算2)通信a、通信描述通訊是PCAM設計過程的重要階段;劃分產(chǎn)生的諸任務,一般不能完全獨立執(zhí)行,需要在任務間進行數(shù)據(jù)交流;從而產(chǎn)生了通訊;功能分解確定了諸任務之間的數(shù)據(jù)流;諸任務是并發(fā)執(zhí)行的,通訊則限制了這種并發(fā)性;b、四個通訊模式局部/全局通訊結(jié)構(gòu)化/非結(jié)構(gòu)化通訊靜態(tài)/動態(tài)通訊同步/異步通訊3.5.2并行計算3)任務組合進入到任務聚合階段后,設計者就需要仔細考慮實際環(huán)境中的各種限制因素進行優(yōu)化以最終實現(xiàn)高效的并行算法。任務聚合是將前面階段劃分出的細粒度子任務進行組合成粗粒度的較大子任務,以達到以下3個目標。a)擴大任務粒度,以避免大量細粒度任務帶來的額外過量通信開銷和任務創(chuàng)建開銷,從而提高算法的性能。b)保持算法可擴展度,在任務聚合時要避免過度聚合,要保持足夠的任務數(shù)量,以適應算法規(guī)模和運行環(huán)境的變化,以及利用任務間執(zhí)行與通信的時間交錯性提高算法性能。c)降低程序?qū)崿F(xiàn)復雜度,過細粒度的任務劃分通常會增加程序?qū)崿F(xiàn)的復雜度,任務聚合需要通過一定的組合方式避免程序?qū)崿F(xiàn)的過高復雜度。4)處理器映射(Mapping)并行算法設計的最后一步,是決定如何將拆分好的子任務指派到特定的處理器執(zhí)行,即處理器映射。處理器映射算法的設計目標就是降低完成整個計算任務的處理器執(zhí)行時間。為了達到這個目標,設計者需要仔細規(guī)劃以達到兩個目標的優(yōu)化。a)提高并行度,即盡量將那些可以并發(fā)執(zhí)行的任務分配到不同的處理器中執(zhí)行,以充分利用不同處理器的并行處理能力,降低執(zhí)行時間。b)提高局部執(zhí)行效率,即盡量將互相之間會產(chǎn)生頻繁通信的任務分配在同一個處理器執(zhí)行,以避免這些任務在不同處理器中增加額外的通信開銷。3.5.2并行計算3.6分布式計算3.6.1分布式計算簡介隨著信息化項目中數(shù)據(jù)的飛速增長,一些大任務要求計算機能應付大量的計算任務,此時單機并行計算或多機并行計算尤其對于分散系統(tǒng)(一組計算機通過計算機網(wǎng)絡相互連通后形成的系統(tǒng))的計算顯示出局限性。分布式計算就是將計算任務分攤到大量的計算節(jié)點上,一起完成海量的計算任務。而分布式計算的原理和并行計算類似,就是將一個復雜龐大的計算任務是當劃分為一個個小任務。任務并行執(zhí)行。只不過分布式計算會將這些任務分配到不同的計算節(jié)點上,每個計算節(jié)點只需要完成自己的任務即可,可以有效分擔海量的計算任務。而每個計算節(jié)點也可以并行處理自身的任務。更加充分利用機器的CPU資源。最后再將每個節(jié)點計算結(jié)果匯總。再到最后的計算結(jié)果。1.分布式計算步驟劃分計算任務以支持分布式計算,很多時候看起來較為困難。但人們逐漸發(fā)現(xiàn)這樣確實是可行的。而且隨著計算任務量增加與計算節(jié)點增加,這種劃分體現(xiàn)出來的價值會越來越大。分布式計算一般分為以下幾步:1)設計分布式計算模型首先要規(guī)定分布式系統(tǒng)的計算模型。計算模型決定了系統(tǒng)中各個組件應該如何運行。組件之間應該如何進行消息通信,組件和節(jié)點應該如何管理等。2)分布式任務分配分布式算法不同于普通算法。普通算法通常是按部就班一部接一部完成任務。而分布式計算中,計算任務是分攤到各個節(jié)點上的。該算法著重解決的是能否分配任務。我如何分配任務的問題。3.6.1分布式計算簡介2.分布式計算優(yōu)點分布式計算是在兩個或多個軟件互相共享信息,這些軟件既可以在同一臺計算機上運行,也可以在通過網(wǎng)絡連接起來的多臺計算機上運行。

分布式計算比起其它算法具有以下幾個優(yōu)點:1)稀有資源可以共享。

2)通過分布式計算可以在多臺計算機上平衡計算負載。

3)可以把程序放在最適合運行它的計算機上。其中,共享稀有資源和平衡負載是計算機分布式計算的核心思想之一。3.6.1分布式計算簡介1.CAP理論2000年7月,加州大學伯克利分校的EricBrewer教授在ACMPODC會議上提出CAP猜想。2年后,麻省理工學院的SethGilbert和NancyLynch從理論上證明了CAP。之后,CAP理論正式成為分布式計算領(lǐng)域的公認定理。一個分布式系統(tǒng)不可能同時滿足一致性(C:Consistency)、可用性(A:Availability)和分區(qū)容錯性(P:Partitiontolerance)這三個基本需求,最多只能同時滿足其中兩項。3.6.2分布式計算理論基礎(chǔ)2.BASE理論BASE是BasicallyAvailable(基本可用)、Softstate(軟狀態(tài))和Eventuallyconsistent(最終一致性)三個短語的縮寫。BASE理論是對CAP中一致性和可用性權(quán)衡的結(jié)果,其來源于對大規(guī)模互聯(lián)網(wǎng)系統(tǒng)分布式實踐的總結(jié),是基于CAP定理逐步演化而來的。BASE理論的核心思想是:即使無法做到強一致性,但每個應用都可以根據(jù)自身業(yè)務特點,采用適當?shù)姆绞絹硎瓜到y(tǒng)達到最終一致性。3.6.2分布式計算理論基礎(chǔ)

3.7.1MapReduce簡介MapReduce概念MapReduce是面向大數(shù)據(jù)并行處理的計算模型、框架和平臺,它隱含以下3層含義:1)MapReduce是一個基于集群的高性能并行計算平臺(ClusterInfrastructure)。它允許用市場上普通的商用服務器構(gòu)成一個包含數(shù)十、數(shù)百至數(shù)千個節(jié)點的分布和并行計算集群。2)MapReduce是一個并行計算與運行軟件框架(SoftwareFramework)。它提供了一個龐大但設計精良的并行計算軟件框架,能自動完成計算任務的并行化處理,自動劃分計算數(shù)據(jù)和計算任務,在集群節(jié)點上自動分配和執(zhí)行任務以及收集計算結(jié)果,將數(shù)據(jù)分布存儲、數(shù)據(jù)通信.容錯處理等并行計算涉及到的很多系統(tǒng)底層的復雜細節(jié)交由系統(tǒng)負責處理,大大減少r軟件開發(fā)人員的負擔。3)MapReduce是一個并行程序設計模型與方法(ProgrammingModel&Metbodology)。它借助于甬數(shù)式程序設計語言Lisp的設計思想,提供了一種簡便的并行程序設計方法,用Map和Reduce兩個函數(shù)編程實現(xiàn)基本的并行計算任務,提供了抽象的操作和并行編程接口,以簡單方便地完成大規(guī)模數(shù)據(jù)的編程和計算處理

。3.7MapReduce模型MapReduce主要功能1.數(shù)據(jù)劃分和計算任務調(diào)度:系統(tǒng)自動將一個作業(yè)(Job)待處理的大數(shù)據(jù)劃分為很多個數(shù)據(jù)塊,每個數(shù)據(jù)塊對應于一個計算任務(Task),并自動調(diào)度計算節(jié)點來處理相應的數(shù)據(jù)塊。作業(yè)和任務調(diào)度功能主要負責分配和調(diào)度計算節(jié)點(Map節(jié)點或Reduce節(jié)點),同時負責監(jiān)控這些節(jié)點的執(zhí)行狀態(tài),并負責Map節(jié)點執(zhí)行的同步控制。2.數(shù)據(jù)/代碼互定位:為了減少數(shù)據(jù)通信,一個基本原則是本地化數(shù)據(jù)處理,即一個計算節(jié)點盡可能處理其本地磁盤上所分布存儲的數(shù)據(jù),這實現(xiàn)了代碼向數(shù)據(jù)的遷移;當無法進行這種本地化數(shù)據(jù)處理時,再尋找其他可用節(jié)點并將數(shù)據(jù)從網(wǎng)絡上傳送給該節(jié)點(數(shù)據(jù)向代碼遷移),但將盡可能從數(shù)據(jù)所在的本地機架上尋找可用節(jié)點以減少通信延遲。3.7MapReduce模型MapReduce主要功能3.系統(tǒng)優(yōu)化:為了減少數(shù)據(jù)通信開銷,中間結(jié)果數(shù)據(jù)進入Reduce節(jié)點前會進行一定的合并處理;一個Reduce節(jié)點所處理的數(shù)據(jù)可能會來自多個Map節(jié)點,為了避免Reduce計算階段發(fā)生數(shù)據(jù)相關(guān)性,Map節(jié)點輸出的中間結(jié)果需使用一定的策略進行適當?shù)膭澐痔幚?,保證相關(guān)性數(shù)據(jù)發(fā)送到同一個Reduce節(jié)點;此外,系統(tǒng)還進行一些計算性能優(yōu)化處理,如對最慢的計算任務采用多備份執(zhí)行、選最快完成者作為結(jié)果。4.出錯檢測和恢復:以低端商用服務器構(gòu)成的大規(guī)模MapReduce計算集群中,節(jié)點硬件(主機、磁盤、內(nèi)存等)出錯和軟件出錯是常態(tài),因此MapReduce需要能檢測并隔離出錯節(jié)點,并調(diào)度分配新的節(jié)點接管出錯節(jié)點的計算任務。同時,系統(tǒng)還將維護數(shù)據(jù)存儲的可靠性,用多備份冗余存儲機制提高數(shù)據(jù)存儲的可靠性,并能及時檢測和恢復出錯的數(shù)據(jù)。3.7MapReduce模型

3.7.2MapReduce編程模型MapReduce模型從MapReduce命名特點可以看出,MapReduce由兩個階段組成:Map和Reduce。用戶只需編寫map()和reduce()兩個函數(shù),即可完成簡單的分布式程序的設計。Map()函數(shù)以key/value對作為輸入,產(chǎn)生另外一系列key/value對作為中間輸出寫入本地磁盤。MapReduce框架會自動把這些中間數(shù)據(jù)按照key值進行聚集,且key值相同(用戶可設定聚集策略,默認情況下是對key值進行哈希取模)的數(shù)據(jù)被統(tǒng)一交給reduce()函數(shù)處理。Reduce()函數(shù)以key及對應的value列表作為輸入,經(jīng)合并key相同的value值后,產(chǎn)生另外一系列key/value對作為最終輸出寫入HDFS3.7MapReduce模型Shuffle過程Shuffle指的是對Map輸出結(jié)果進行分區(qū)、排序、合并等處理并交給Reduce過程。Map端的Shuffle過程a)執(zhí)行Mapb)緩存寫入c)溢寫(spill)d)文件歸并3.7MapReduce模型Reduce端的Shuffle過程copy過程Merge過程reducer的輸入文件3.7MapReduce模型WordCount詞頻統(tǒng)計下面以MapReduce中的“helloworid”程序-WordCount為例介紹程序設計方法。3.7MapReduce模型其中Map部分如下:

//key:字符串偏移量

//value:文件中一行字符串的內(nèi)容

map(Stringkey,stringvalue)//將字符串分割成單詞

words=splitintoToken(value),//將一組單詞中每個單詞賦值給wForeachwordwinwords//輸出key/value(key為w,value為”1”)EmitIntermediate(w,”1”);Reduce部分如下:

//key:一個單詞

ilvalues單詞出現(xiàn)的次數(shù)列表

Reduce(stringkey,Iteratorvalues):intresuit;foreachvinvaluesresult+=stringToint(v);Emit(key,IntToStrmg(result);MapReduce1架構(gòu)MapReduce模型在發(fā)展過程中經(jīng)歷了兩個版本:MRv1和YARN/MRv2。這一小節(jié)將為大家介紹一下MRv1計算框架。同HDFS一樣,HadoopMapReduce也采用了Master/Slave(M/S)架構(gòu),它主要由以下幾個組件組成:Client、JobTracker、TaskTracker和Task。下面分別對這幾個組件進行介紹。如圖3-12HadoopMapReduce架構(gòu)。3.7.3YARN/MapReduce2為從根本上解決舊MapReduce框架的性能瓶頸,促進Hadoop框架的更長遠發(fā)展,從0.23.0版本開始,Hadoop的MapReduce框架完全重構(gòu),發(fā)生了根本的變化。新的HadoopMapReduce框架命名為MapReduceV2或者叫Yarn。1.Yarn基本組成

1)ResourceManager(RM)

2)ApplicationMaster(AM)

3)NodeManager(NM)

4)Container2、MRv2架構(gòu)3.7.3YARN/MapReduce2Yarn執(zhí)行流程3.7.3Yarn/MapReduce21)用戶向YARN中提交應用程序,其中包括ApplicationMaster程序、啟動ApplicationMaster的命令、用戶程序等。2)

ResourceManager為該應用程序分配第一個Container,并與對應的NodeManager通信,要求它在這個Container中啟動應用程序的ApplicationMaster。3)ApplicationMaster首先向ResourceManager注冊,這樣,用戶可以直接通過ResourceManager查看應用程序的運行狀態(tài),然后,它將為各個任務申請資源,并監(jiān)控它的運行狀態(tài),直到運行結(jié)束,即重復步驟4~7。4)

ApplicationMaster采用輪詢的方式通過RPC協(xié)議向ResourceManager申請和領(lǐng)取資源。5)

一旦ApplicationMaster申請到資源后,則與對應的NodeManager通信,要求其啟動任務。6)

NodeManager為任務設置好運行環(huán)境(包括環(huán)境變量、jar包、二進制程序等)后,將任務啟動命令寫到一個腳本中,并通過運行該腳本啟動任務。7)

各個任務通過某個RPC協(xié)議向ApplicationMaster匯報自己的狀態(tài)和進度,以讓ApplicationMaster隨時掌握各個任務的運行狀態(tài),從而可以在任務失敗時重新啟動任務。在應用程序運行過程中,用戶可隨時通過RPC向ApplicationMaster查詢應用程序的當前運行狀態(tài)。8)

應用程序運行完成后,ApplicationMaster向ResourceManager注銷,并關(guān)閉自己。3.7.3MapReduce21、MapReduce參數(shù)配置優(yōu)化右圖為MapReduce部分調(diào)整參數(shù)3.7.4MapReduce性能調(diào)優(yōu)3.8Spark通用計算框架3.8.1Spark簡介Spark是UCBerkeleyAMPLab(加州大學伯克利分校AMP實驗室)所開源的類HadoopMapReduce的通用并行計算框架,Spark是為了跟Hadoop配合而開發(fā)出來的,不是為了取代Hadoop。Hadoop雖然已成為大數(shù)據(jù)技術(shù)的事實標準,但其本身還存在諸多缺陷,最主要的缺陷是其MapReduce計算模型延遲過高,無法勝任實時、快速計算的需求,因而只適用于離線批處理的應用場景。Hadoop存在如下一些缺點:表達能力有限。計算都必須要轉(zhuǎn)化成Map和Reduce兩個操作,但這并不適合所有的情況,難以描述復雜的數(shù)據(jù)處理過程;磁盤IO開銷大。每次執(zhí)行時都需要從磁盤讀取數(shù)據(jù),并且在計算完成后需要將中間結(jié)果寫入到磁盤中,IO開銷較大;延遲高。一次計算可能需要分解成一系列按順序執(zhí)行的MapReduce任務,任務之間的銜接由于涉及到IO開銷,會產(chǎn)生較高延遲。而且,在前一個任務執(zhí)行完成之前,其他任務無法開始,難以勝任復雜、多階段的計算任務。3.8.1Spark簡介Spark具有如下幾個主要特點:運行速度快:Spark使用先進的DAG(DirectedAcyclicGraph,有向無環(huán)圖)執(zhí)行引擎,以支持循環(huán)數(shù)據(jù)流與內(nèi)存計算,中間結(jié)果都存儲在內(nèi)存中,大大減少了IO開銷基于內(nèi)存的執(zhí)行速度可比HadoopMapReduce快上百倍,基于磁盤的執(zhí)行速度也能快十倍;容易使用:Spark支持使用Scala、Java、Python和R語言進行編程,簡潔的API設計有助于用戶輕松構(gòu)建并行程序,并且可以通過SparkShell進行交互式編程;通用性:Spark提供了完整而強大的技術(shù)棧,包括SQL查詢、流式計算、機器學習和圖算法組件,這些組件可以無縫整合在同一個應用中,足以應對復雜的計算;運行模式多樣:Spark提供了多種高層次、簡潔的API,通常情況下,對于實現(xiàn)相同功能的應用程序,Spark的代碼量要比Hadoop少2-5倍。但Spark并不能完全替代Hadoop,主要用于替代Hadoop中的MapReduce計算模型。實際上,Spark已經(jīng)很好地融入了Hadoop生態(tài)圈,并成為其中的重要一員,它可以借助于YARN實現(xiàn)資源調(diào)度管理,可以訪問HDFS、Cassandra、HBase、Hive等多種數(shù)據(jù)源。3.8.1Spark簡介3.8.2Spark生態(tài)系統(tǒng)SparkCore:SparkCore包含Spark的基本功能,如內(nèi)存計算、任務調(diào)度、部署模式、故障恢復、存儲管理等。Spark建立在統(tǒng)一的抽象RDD之上,使其可以以基本一致的方式應對不同的大數(shù)據(jù)處理場景;通常所說的ApacheSpark,就是指SparkCore;SparkSQL:SparkSQL允許開發(fā)人員直接處理RDD,同時也可查詢Hive、HBase等外部數(shù)據(jù)源。SparkSQL的一個重要特點是其能夠統(tǒng)一處理關(guān)系表和RDD,使得開發(fā)人員可以輕松地使用SQL命令進行查詢,并進行更復雜的數(shù)據(jù)分析;SparkStreaming:SparkStreaming支持高吞吐量、可容錯處理的實時流數(shù)據(jù)處理,其核心思路是將流式計算分解成一系列短小的批處理作業(yè)。SparkStreaming支持多種數(shù)據(jù)輸入源,如Kafka、Flume和TCP套接字等;MLlib(機器學習):MLlib提供了常用機器學習算法的實現(xiàn),包括聚類、分類、回歸、協(xié)同過濾等,降低了機器學習的門檻,開發(fā)人員只要具備一定的理論知識就能進行機器學習的工作;GraphX(圖計算):GraphX是Spark中用于圖計算的API,可認為是Pregel在Spark上的重寫及優(yōu)化,Graphx性能良好,擁有豐富的功能和運算符,能在海量數(shù)據(jù)上自如地運行復雜的圖算法。3.8.3Spark框架及計算1.Spark基本概念RDD:是彈性分布式數(shù)據(jù)集(ResilientDistributed

溫馨提示

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

評論

0/150

提交評論