![《NoSQL數(shù)據(jù)庫原理與應(yīng)用案例教程》全套教學(xué)課件_第1頁](http://file4.renrendoc.com/view5/M01/0C/25/wKhkGGaGYFSADBXoAAFIHoSm_Bo200.jpg)
![《NoSQL數(shù)據(jù)庫原理與應(yīng)用案例教程》全套教學(xué)課件_第2頁](http://file4.renrendoc.com/view5/M01/0C/25/wKhkGGaGYFSADBXoAAFIHoSm_Bo2002.jpg)
![《NoSQL數(shù)據(jù)庫原理與應(yīng)用案例教程》全套教學(xué)課件_第3頁](http://file4.renrendoc.com/view5/M01/0C/25/wKhkGGaGYFSADBXoAAFIHoSm_Bo2003.jpg)
![《NoSQL數(shù)據(jù)庫原理與應(yīng)用案例教程》全套教學(xué)課件_第4頁](http://file4.renrendoc.com/view5/M01/0C/25/wKhkGGaGYFSADBXoAAFIHoSm_Bo2004.jpg)
![《NoSQL數(shù)據(jù)庫原理與應(yīng)用案例教程》全套教學(xué)課件_第5頁](http://file4.renrendoc.com/view5/M01/0C/25/wKhkGGaGYFSADBXoAAFIHoSm_Bo2005.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第一章NoSQL數(shù)據(jù)庫基礎(chǔ)NoSQL全套可編輯PPT課件第1章NoSQL數(shù)據(jù)庫基礎(chǔ).pptx第2章認(rèn)識HBase.pptx第3章HBase數(shù)據(jù)模型與使用.pptx第4章HBase原理實(shí)現(xiàn).pptx第5章MongoDB入門與使用.pptx第6章MongoDB進(jìn)階.pptx第7章其他非關(guān)系型數(shù)據(jù)庫簡介.pptx第8章NewSQL數(shù)據(jù)庫.pptx第9章綜合案例.pptx本期導(dǎo)讀
隨著信息化時代的不斷發(fā)展,數(shù)據(jù)量急劇增長,關(guān)系型數(shù)據(jù)庫遇到了發(fā)展瓶頸,于是,一種結(jié)構(gòu)簡單、分布式、易擴(kuò)展的非關(guān)系型數(shù)據(jù)庫NoSQL應(yīng)運(yùn)而生了。
本章從數(shù)據(jù)庫系統(tǒng)的基本概念入手,介紹關(guān)系型數(shù)據(jù)庫及其遇到的瓶頸,從而引出NoSQL數(shù)據(jù)庫,然后介紹分布式數(shù)據(jù)管理的特點(diǎn)和分布式系統(tǒng)的數(shù)據(jù)一致性,最后介紹NoSQL數(shù)據(jù)庫的分類。學(xué)習(xí)目標(biāo)了解數(shù)據(jù)庫系統(tǒng)的基本概念和關(guān)系型數(shù)據(jù)庫的基本原理。了解NoSQL數(shù)據(jù)庫的特點(diǎn)和應(yīng)用場景。理解分布式數(shù)據(jù)管理的特點(diǎn)。掌握CAP理論、BASE理論和最終一致性。熟悉NoSQL數(shù)據(jù)庫的分類。目錄數(shù)據(jù)庫系統(tǒng)典型應(yīng)用——NoSQL在國內(nèi)的應(yīng)用分布式數(shù)據(jù)管理的特點(diǎn)1.11.21.3分布式系統(tǒng)的數(shù)據(jù)一致性1.41.5NoSQL數(shù)據(jù)庫分類1.1數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)庫數(shù)據(jù)庫管理系統(tǒng)數(shù)據(jù)庫管理人員
數(shù)據(jù)庫系統(tǒng)(databasesystem,DBS)是為適應(yīng)數(shù)據(jù)處理的需要而發(fā)展起來的一種較為理想的數(shù)據(jù)處理系統(tǒng),也是一個為實(shí)際可運(yùn)行的存儲、維護(hù)和應(yīng)用系統(tǒng)提供數(shù)據(jù)的軟件系統(tǒng),是存儲介質(zhì)、處理對象和管理系統(tǒng)的集合體。1.1.1數(shù)據(jù)庫系統(tǒng)的基本概念DBS一般由4部分組成應(yīng)用程序
數(shù)據(jù)庫(database,DB)是長期存儲于計算機(jī)內(nèi)的、有組織的、可共享的大量數(shù)據(jù)的集合。1.1.1數(shù)據(jù)庫系統(tǒng)的基本概念1.?dāng)?shù)據(jù)庫
集合中大量復(fù)雜的數(shù)據(jù)按照一定的數(shù)據(jù)模型組織、描述和存儲,并經(jīng)過進(jìn)一步的操作處理之后,能夠提供給用戶使用。
最早用于數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)模型。
該模型使用樹形結(jié)構(gòu)表示各類實(shí)體和實(shí)體間的聯(lián)系,實(shí)體間的聯(lián)系按照自上而下的層次關(guān)系組織起來。層次模型1.1.1數(shù)據(jù)庫系統(tǒng)的基本概念常見的數(shù)據(jù)模型有層次模型、網(wǎng)狀模型和關(guān)系模型。結(jié)構(gòu)簡單清晰查詢率高圖1-1某學(xué)校的組織結(jié)構(gòu)使用網(wǎng)絡(luò)結(jié)構(gòu)來表示實(shí)體間的聯(lián)系,它彌補(bǔ)了層次模型不適合表示非層次結(jié)構(gòu)數(shù)據(jù)的缺點(diǎn)。該模型允許多個節(jié)點(diǎn)無雙親,一個節(jié)點(diǎn)也可以有多個雙親,各節(jié)點(diǎn)之間是多對多的關(guān)系(m∶n)。網(wǎng)狀模型1.1.1數(shù)據(jù)庫系統(tǒng)的基本概念更加直觀越來越復(fù)雜不易掌握圖1-2某學(xué)校的教務(wù)管理系統(tǒng)無論是實(shí)體還是實(shí)體間的聯(lián)系都可用一個滿足一定規(guī)范條件的二維表(也稱為關(guān)系)來表示。關(guān)系模型1.1.1數(shù)據(jù)庫系統(tǒng)的基本概念結(jié)構(gòu)簡單易懂操作方便有較高的數(shù)據(jù)獨(dú)立性表1-1學(xué)生信息表有較好的安全保密性1數(shù)據(jù)定義2數(shù)據(jù)操縱
DBMS提供數(shù)據(jù)定義語言(datadefinitionlanguage,DDL),用戶使用DDL語句定義數(shù)據(jù)庫中數(shù)據(jù)對象的組成與結(jié)構(gòu)。1.1.1數(shù)據(jù)庫系統(tǒng)的基本概念2.?dāng)?shù)據(jù)庫管理系統(tǒng)
DBMS提供數(shù)據(jù)操縱語言(datamanipulationlanguage,DML),用戶通過DML語句對數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行操作。3數(shù)據(jù)組織、存儲和管理1.1.1數(shù)據(jù)庫系統(tǒng)的基本概念
由于數(shù)據(jù)庫中會存儲大量數(shù)據(jù),DBMS須確定以何種文件結(jié)構(gòu)和存取方式對這些數(shù)據(jù)進(jìn)行分類組織、存儲和管理,從而實(shí)現(xiàn)數(shù)據(jù)之間的聯(lián)系。
數(shù)據(jù)組織和存儲的基本目標(biāo)是提高存儲空間的利用率,和選擇合適的存取方法來提高存取效率。4數(shù)據(jù)庫的運(yùn)行管理1.1.1數(shù)據(jù)庫系統(tǒng)的基本概念
DBMS提供數(shù)據(jù)庫的運(yùn)行控制和管理功能,包括多用戶環(huán)境下的數(shù)據(jù)庫的并發(fā)控制、數(shù)據(jù)庫的完整性控制、數(shù)據(jù)庫的安全性控制及發(fā)生故障后的數(shù)據(jù)庫恢復(fù),這些功能保證了數(shù)據(jù)庫系統(tǒng)的正常運(yùn)行。5數(shù)據(jù)庫的維護(hù)1.1.1數(shù)據(jù)庫系統(tǒng)的基本概念
包括數(shù)據(jù)庫初始數(shù)據(jù)的輸入、轉(zhuǎn)換,以及數(shù)據(jù)庫的轉(zhuǎn)儲、恢復(fù)、重組織、性能監(jiān)控和分析等。6接口與通信
DBMS提供了負(fù)責(zé)處理數(shù)據(jù)傳送的接口,這些接口與操作系統(tǒng)的聯(lián)機(jī)處理、分時系統(tǒng)及遠(yuǎn)程作業(yè)輸入相關(guān)。
DBMS還具有與網(wǎng)絡(luò)中其他軟件系統(tǒng)的通信功能和數(shù)據(jù)庫之間的互操作功能。1.1.1數(shù)據(jù)庫系統(tǒng)的基本概念3.應(yīng)用程序
應(yīng)用程序由開發(fā)人員編寫,作用是讓用戶通過應(yīng)用程序?qū)崿F(xiàn)對數(shù)據(jù)庫中數(shù)據(jù)的插入、刪除、更新和查詢等操作。
這些操作請求首先會發(fā)送給DBMS,由DBMS在數(shù)據(jù)庫中進(jìn)行相應(yīng)的操作,從而實(shí)現(xiàn)用戶和數(shù)據(jù)的交互,同時給用戶呈現(xiàn)出一個可視化的界面。1.1.1數(shù)據(jù)庫系統(tǒng)的基本概念4.?dāng)?shù)據(jù)庫管理人員
主要任務(wù)是負(fù)責(zé)數(shù)據(jù)庫從設(shè)計、測試到部署交付的全生命周期的管理和維護(hù),提高數(shù)據(jù)庫管理系統(tǒng)的穩(wěn)定性和安全性,使數(shù)據(jù)庫具有更高的性能。1.1.2
關(guān)系型數(shù)據(jù)庫1.關(guān)系型數(shù)據(jù)庫簡介
關(guān)系型數(shù)據(jù)庫使用關(guān)系模型對數(shù)據(jù)進(jìn)行組織。
一個關(guān)系型數(shù)據(jù)庫就是由二維表及其之間的聯(lián)系組成的一個數(shù)據(jù)組織。
常見的關(guān)系型數(shù)據(jù)庫有MySQL、Oracle、SQLServer和PostgreSQL等。2.SQL技術(shù)標(biāo)準(zhǔn)
結(jié)構(gòu)化查詢語言(structuredquerylanguage,SQL)是關(guān)系型數(shù)據(jù)庫的標(biāo)準(zhǔn)語言,是集數(shù)據(jù)查詢、數(shù)據(jù)定義、數(shù)據(jù)操縱和數(shù)據(jù)控制于一體的綜合性語言。1.1.2
關(guān)系型數(shù)據(jù)庫功
能動詞命令數(shù)據(jù)查詢SELECT數(shù)據(jù)定義CREATE、DROP、ALTER數(shù)據(jù)操縱INSERT、DELETE、UPDATE數(shù)據(jù)控制GRANT、REVOKE表1-2SQL中的動詞命令
不能引用被參照表中不存在的數(shù)據(jù)。實(shí)體完整性參照完整性實(shí)施計劃與措施表中必須有主鍵(能唯一標(biāo)識一個實(shí)體)且不能取空值。結(jié)果與目標(biāo)對比1.1.2
關(guān)系型數(shù)據(jù)庫3.完整性約束用戶自定義完整性在某一具體應(yīng)用中數(shù)據(jù)應(yīng)滿足的具體要求。實(shí)施計劃與措施
事務(wù)是數(shù)據(jù)庫管理系統(tǒng)執(zhí)行過程中的一個邏輯單位,由一系列有限的數(shù)據(jù)庫操作構(gòu)成。
關(guān)系型數(shù)據(jù)庫的事務(wù)機(jī)制能夠提供用戶在并發(fā)操作時數(shù)據(jù)的安全性、正確性和一致性。
關(guān)系型數(shù)據(jù)庫支持事務(wù)的ACID特性,即原子性(atomicity)、一致性(consistency)、隔離性(isolation)和持久性(durability)。1.1.2
關(guān)系型數(shù)據(jù)庫4.事務(wù)機(jī)制硬盤I/O是一個瓶頸高并發(fā)讀寫需求縱向擴(kuò)展會遇到硬件性能的瓶頸海量數(shù)據(jù)的高效率讀寫1.1.3
關(guān)系型數(shù)據(jù)庫的瓶頸處理的復(fù)雜度高擴(kuò)展性1.1.4
NoSQL數(shù)據(jù)庫的特點(diǎn)靈活的數(shù)據(jù)模型易擴(kuò)展高性能和高可用1.2典型應(yīng)用——NoSQL在國內(nèi)的應(yīng)用1.2.1NoSQL在視覺中國網(wǎng)站的應(yīng)用
視覺中國網(wǎng)站是國內(nèi)最大的創(chuàng)意人群的專業(yè)網(wǎng)站。
MongoDB是一個文檔數(shù)據(jù)庫,它既有鍵值數(shù)據(jù)庫的靈活性,又兼容關(guān)系型數(shù)據(jù)庫的大部分操作,因此開發(fā)效率較高。不過在最初使用MongoDB時,技術(shù)人員也會遇到一些困難,這是因?yàn)镸ongoDB是一個比較新的數(shù)據(jù)庫,相關(guān)資源和應(yīng)用案例較少,但是通過技術(shù)人員的不斷探索,最后都得以有效解決。
優(yōu)酷最初使用關(guān)系型數(shù)據(jù)庫MySQL存儲大量數(shù)據(jù),后來針對不同的業(yè)務(wù)場景選擇了不同的、更合適的NoSQL數(shù)據(jù)庫。
部分在線評論業(yè)務(wù)使用的是MongoDB,運(yùn)營數(shù)據(jù)分析及挖掘處理使用的是HBase,在key/value產(chǎn)品方面,使用Redis替代Memcached,在搜索產(chǎn)品中使用的是TokyoTyrant,還對Cassandra等產(chǎn)品進(jìn)行了研究。1.2.2NoSQL在優(yōu)酷的應(yīng)用
豆瓣網(wǎng)以書影音起家,為廣大用戶提供了一個可以描述和評論書籍、電影、音樂等作品的平臺,也提供了書影音推薦和小組話題交流等多種服務(wù)功能,致力于幫助都市人群發(fā)現(xiàn)生活中有用的事物。1.2.3NoSQL在豆瓣社區(qū)的應(yīng)用
隨著數(shù)據(jù)量(包含非結(jié)構(gòu)化數(shù)據(jù))的不斷增加,MySQL數(shù)據(jù)庫在存儲大文本數(shù)據(jù)時性能會下降。而且當(dāng)時NoSQL數(shù)據(jù)庫還不成熟,所以豆瓣網(wǎng)的工程師團(tuán)隊開始研發(fā)貼合自身業(yè)務(wù)的開源數(shù)據(jù)存儲系統(tǒng),即BeansDB。
BeansDB是一個針對大數(shù)據(jù)量、高可用性的分布式key/value存儲系統(tǒng)。
目前BeansDB在豆瓣內(nèi)部建立了兩個針對不同場景的集群,分別是DoubanFS和DoubanDB。1.2.3NoSQL在豆瓣社區(qū)的應(yīng)用
DoubanFS是為解決可擴(kuò)展圖片存儲問題而提出的,可以直接按照文件名尋找節(jié)點(diǎn),主要存儲圖片和音頻等數(shù)據(jù)。
DoubanDB是技術(shù)人員在DoubanFS的基礎(chǔ)上,參照Amazon的Dynamo思想搭建的,主要存儲影評、用戶個人介紹、帖子等大文本數(shù)據(jù),目的是降低MySQL數(shù)據(jù)庫的壓力,從而保證了它的性能。1.2.3NoSQL在豆瓣社區(qū)的應(yīng)用BeansDB最大的特點(diǎn)是伸縮性好。1.3分布式數(shù)據(jù)管理的特點(diǎn)1.分布透明性
在分布式系統(tǒng)中,數(shù)據(jù)分別存儲在通過網(wǎng)絡(luò)連接的計算機(jī)上,但是在邏輯上卻是一個統(tǒng)一的整體。這些數(shù)據(jù)被所有用戶共享,用戶訪問數(shù)據(jù)時不需要考慮數(shù)據(jù)的存儲場地和操作的執(zhí)行場地。1.3.1透明管理2.分片透明性
分片是將一個關(guān)系分為幾個子關(guān)系,每個子關(guān)系稱為一個分片。一個分片可能會根據(jù)具體需求存儲在不同場地上,片段是場地上的實(shí)際存儲副本。分片透明性指的是用戶無須考慮物理層數(shù)據(jù)分片的具體細(xì)節(jié),分片到片段的映射是由系統(tǒng)自動完成的。1.3.1透明管理圖1-6數(shù)據(jù)分片3.復(fù)制透明性
復(fù)制透明性指的是用戶只看到單一的數(shù)據(jù)副本,無須關(guān)心各個節(jié)點(diǎn)的復(fù)制情況,副本數(shù)據(jù)由系統(tǒng)統(tǒng)一管理。1.3.1透明管理
在分布式環(huán)境下,通常將數(shù)據(jù)復(fù)制為多個副本進(jìn)行存儲,但是這種多副本存儲的方式會帶來一些問題。1.3.2
數(shù)據(jù)多副本管理(1)需要副本的數(shù)量是多少,以及如何對這些副本進(jìn)行存儲。(2)當(dāng)用戶發(fā)起對副本的寫請求時,是否只能寫入指定副本。(3)用戶修改了某一個副本的數(shù)據(jù),如何將修改同步到系統(tǒng)的所有副本中。1.4分布式系統(tǒng)的數(shù)據(jù)一致性
CAP指的是分布式系統(tǒng)中的一致性(consistency)、可用性(availability)和分區(qū)容錯性(partitiontolerance)。1.4.1CAP理論C一致性
在分布式系統(tǒng)中完成某寫操作后,任何讀操作都應(yīng)該獲取到該寫操作寫入的那個值。A
大多數(shù)應(yīng)用系統(tǒng)都會響應(yīng)用戶的讀寫請求,而CAP可用性強(qiáng)調(diào)的是響應(yīng)的時效性。P
當(dāng)分布式系統(tǒng)中的一部分節(jié)點(diǎn)無法和其他節(jié)點(diǎn)進(jìn)行通信時,集群系統(tǒng)仍然能夠提供正常服務(wù)。可用性分區(qū)容錯性1.4.1CAP理論圖1-7CAP理論
CAP理論指的是在分布式系統(tǒng)中一致性、可用性和分區(qū)容錯性這3個特性不可兼得,最多同時滿足其中的兩個。
(1)CA保證了一致性和可用性而放棄分區(qū)容錯性。
(2)CP保證了一致性和分區(qū)容錯性而放棄可用性。
(3)AP保證了可用性和分區(qū)容錯性而放棄一致性。
BASE的基本含義是基本可用(basicallyavailable)、軟狀態(tài)(soft-state)和最終一致性(eventualconsistency)。1基本可用
分布式系統(tǒng)中如果部分節(jié)點(diǎn)或功能出現(xiàn)故障,其核心功能或當(dāng)前重要的功能仍然可以正常運(yùn)行。2
允許系統(tǒng)出現(xiàn)“中間狀態(tài)”。它在NoSQL數(shù)據(jù)庫中體現(xiàn)為允許不同節(jié)點(diǎn)的副本之間出現(xiàn)短暫的不一致,但是短暫的不一致不會影響系統(tǒng)的整體可用性。3
系統(tǒng)的狀態(tài)或者多個副本之間無須保證實(shí)時一致,只要最終數(shù)據(jù)是一致的就可以。軟狀態(tài)最終一致性1.4.2
BASE理論
一致性是指如何盡快將更新后的數(shù)據(jù)復(fù)制分布到整個系統(tǒng),從而保證數(shù)據(jù)最終一致。
數(shù)據(jù)更新后,根據(jù)其他進(jìn)程訪問到該數(shù)據(jù)的時間和訪問方式的不同,可以將最終一致性分為以下5種。1.4.3
最終一致性(1)因果一致性。(2)“讀己之所寫”一致性。(3)會話一致性。(4)單調(diào)讀一致性。(5)單調(diào)寫一致性。1.5NoSQL數(shù)據(jù)庫分類
鍵值數(shù)據(jù)庫主要應(yīng)用于少量數(shù)據(jù)存儲、高速讀寫訪問的場合,如存儲會話信息、配置文件信息及購物車數(shù)據(jù)等。
鍵值數(shù)據(jù)庫采用key/value(鍵值對)的數(shù)據(jù)模型。它用一個哈希表來存儲一個特定的鍵(key)和一個指針指向特定的值(value),用戶可通過key對具體的value進(jìn)行存儲和檢索,1.5.1鍵值數(shù)據(jù)庫圖1-8鍵值數(shù)據(jù)庫
列族數(shù)據(jù)庫采用面向列的數(shù)據(jù)模型,用來區(qū)別關(guān)系型數(shù)據(jù)庫中面向行的存儲模式。
列族數(shù)據(jù)庫由多個行組成,每一行由多個列族組成,不同行中列族數(shù)量可以是不同的。
列族是多個列的集合,列族中列的數(shù)量也可以不同,屬于同一個列族的數(shù)據(jù)會存放在一起。1.5.2列族數(shù)據(jù)庫1.5.2列族數(shù)據(jù)庫圖1-9列族數(shù)據(jù)庫
列族數(shù)據(jù)庫主要應(yīng)用于分布式數(shù)據(jù)存儲與管理的場合。
使用列族數(shù)據(jù)庫的公司有Ebay(Cassandra數(shù)據(jù)庫)、Twitter(Cassandra和HBase數(shù)據(jù)庫)、Facebook(HBase數(shù)據(jù)庫)和Yahoo!(HBase數(shù)據(jù)庫)等。
文檔數(shù)據(jù)庫的數(shù)據(jù)模型采用的是版本化的文檔,用來存儲并檢索文檔數(shù)據(jù)。文檔以特定的格式進(jìn)行存儲。
文檔數(shù)據(jù)庫是通過key對文檔進(jìn)行定位,文檔數(shù)據(jù)庫中存儲的文檔,相當(dāng)于鍵值數(shù)據(jù)庫中存儲的value。
文檔數(shù)據(jù)庫主要應(yīng)用于存儲、索引并管理面向文檔或沒有固定數(shù)據(jù)類型的數(shù)據(jù),如用戶評論、用戶注冊等。1.5.3文檔數(shù)據(jù)庫
圖數(shù)據(jù)庫采用圖形結(jié)構(gòu)的數(shù)據(jù)模型,通過節(jié)點(diǎn)、邊對數(shù)據(jù)進(jìn)行高效的存儲,節(jié)點(diǎn)代表實(shí)體,邊代表兩個節(jié)點(diǎn)之間的關(guān)系,如圖1-10所示。1.5.4圖數(shù)據(jù)庫圖1-10圖數(shù)據(jù)庫
圖數(shù)據(jù)庫主要應(yīng)用于大量復(fù)雜、互連接、低結(jié)構(gòu)化的圖結(jié)構(gòu)場合,1.5.4圖數(shù)據(jù)庫表1-3NoSQL數(shù)據(jù)庫分類數(shù)據(jù)庫分類數(shù)據(jù)模型優(yōu)點(diǎn)缺點(diǎn)典型產(chǎn)品鍵值數(shù)據(jù)庫key/value擴(kuò)展性好、大量寫操作時性能高無法存儲結(jié)構(gòu)化信息、條件查詢效率較低Redis、Memcached列族數(shù)據(jù)庫列式查找速度快、可擴(kuò)展性強(qiáng)、復(fù)雜性低功能相對局限,不支持事務(wù)強(qiáng)一致性HBase、Cassandra文檔數(shù)據(jù)庫版本化的文檔數(shù)據(jù)結(jié)構(gòu)很靈活、適合高并發(fā)場景缺乏統(tǒng)一的查詢語句MongoDB、RavenDB、CouchDB圖數(shù)據(jù)庫圖結(jié)構(gòu)支持復(fù)雜的圖形算法、可用于構(gòu)建復(fù)雜的關(guān)系圖譜復(fù)雜性高、不易做分布式集群方案Neo4j、FlockDB謝謝NoSQL第2章
認(rèn)識HBaseHBase本期導(dǎo)讀HBase是一個分布式的非關(guān)系型數(shù)據(jù)庫,具有稀疏、高可靠和易擴(kuò)展等特性,是谷歌公司Bigtable的開源實(shí)現(xiàn)。HBase利用Hadoop分布式文件系統(tǒng)作為其底層文件存儲系統(tǒng),適合存儲非結(jié)構(gòu)化和半結(jié)構(gòu)化的數(shù)據(jù)。
本章首先介紹HBase的發(fā)展歷程、HBase的特性及HBase和Hadoop的關(guān)系,然后介紹HDFS的原理,最后介紹HBase的組件和功能,以及HBase的安裝與配置。學(xué)習(xí)目標(biāo)了解HBase的發(fā)展歷程。熟悉HBase的特性和應(yīng)用場景。熟悉Hadoop生態(tài)系統(tǒng)的功能組件。理解HDFS的基本原理。掌握HBase的組件和基本功能。能夠安裝和配置HBase。目錄HBase簡介HDFS原理HBase的組件2.12.22.3HBase在人臉識別中的應(yīng)用2.42.5HBase的安裝與配置2.1HBase簡介2.1.1HBase的發(fā)展歷程圖2-2HBase大事記2.1.2HBase的特性特
性海量存儲面向列高可靠性極易擴(kuò)展稀疏非結(jié)構(gòu)化多版本Hadoop是由Apache軟件基金會(apachesoftwarefoundation,ASF)主持開發(fā)的一個開源軟件,為用戶提供了系統(tǒng)底層細(xì)節(jié)透明的分布式基礎(chǔ)框架。2.1.3HBase與HadoopHadoop早期的3個子項(xiàng)目分布式文件系統(tǒng)NoSQL數(shù)據(jù)庫HBase分布式計算框架Hadoop已成為大數(shù)據(jù)的代名詞,其發(fā)展已經(jīng)進(jìn)入穩(wěn)定成熟階段,能夠?qū)A繑?shù)據(jù)進(jìn)行高效的存儲、管理和分析。圖2-4Hadoop生態(tài)系統(tǒng)2.1.3HBase與HadoopHBase數(shù)據(jù)庫利用HDFS作為其文件存儲系統(tǒng),利用HadoopMapReduce分布式計算框架處理其中的海量數(shù)據(jù),利用Zookeeper進(jìn)行分布式協(xié)作服務(wù)管理,利用Sqoop實(shí)現(xiàn)與關(guān)系型數(shù)據(jù)庫之間傳輸數(shù)據(jù)。2.1.3HBase與Hadoop項(xiàng)
目HBaseBigtable文件存儲系統(tǒng)HDFSGFS海量數(shù)據(jù)處理HadoopMapReduceMapReduce協(xié)作服務(wù)管理ZookeeperChubby表2-1HBase與Bigtable的底層技術(shù)對比2.1.3HBase與Hadoop表2-2HBase與Hadoop的版本兼容信息Hadoop版本HBase1.3.xHBase1.4.xHBase1.6.xHBase1.7.xHBase2.2.xHadoop2.7.0XXXXXHadoop2.7.1+SSXXXHadoop2.8.(0~2)XXXXXHadoop2.8.(3~4)NT③NTXXXHadoop2.8.5+NTNTSXSHadoop2.9.(0~1)XXXXXHadoop2.9.2+NTNTSXSHadoop3.1.0XXXXXHadoop3.1.1+XXXXS2.2HDFS原理
名稱節(jié)點(diǎn)是主節(jié)點(diǎn),負(fù)責(zé)維護(hù)HDFS文件系統(tǒng)的目錄樹、目錄樹中的文件和目錄的元數(shù)據(jù)信息,以及接收用戶的訪問和操作請求。
名稱節(jié)點(diǎn)中有兩個非常重要的文件,即鏡像文件(fsimage)和操作日志文件(editlog),1.名稱節(jié)點(diǎn)2.2.1HDFS基本架構(gòu)圖2-6名稱節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)(1)文件系統(tǒng)中的文件名、目錄名,以及他們之間的層級關(guān)系。fsimage文件中存儲的是文件和目錄的元數(shù)據(jù)信息,這些元數(shù)據(jù)信息有以下幾種。(2)文件目錄的所有者及其權(quán)限。(3)每個文件塊的名稱及文件由哪些塊組成。2.2.1HDFS基本架構(gòu)2.第二名稱節(jié)點(diǎn)HDFS使用第二名稱節(jié)點(diǎn)將fsimage和editlog文件定期合并,以減小editlog文件的大小,從而縮短名稱節(jié)點(diǎn)的啟動時間。圖2-8secondarynamenode工作原理2.2.1HDFS基本架構(gòu)
簡要分析其合并過程2.2.1HDFS基本架構(gòu)(1)第二名稱節(jié)點(diǎn)與名稱節(jié)點(diǎn)定期進(jìn)行通信,并請求名稱節(jié)點(diǎn)停止使用當(dāng)前的editlog文件。名稱節(jié)點(diǎn)會將后續(xù)的更新操作寫入一個新的editlog文件(editlog.new)中。(2)第二名稱節(jié)點(diǎn)通過HTTP協(xié)議將名稱節(jié)點(diǎn)中舊的fsimage和editlog文件復(fù)制到本地,然后加載到內(nèi)存中。
簡要分析其合并過程2.2.1HDFS基本架構(gòu)(3)第二名稱節(jié)點(diǎn)將fsimage和editlog文件合并。(5)名稱節(jié)點(diǎn)用新的fsimage文件(fsimage.ckpt)代替舊的fsimage文件,用新的editlog文件(editlog.new)代替舊的editlog文件。(4)通過HTTP協(xié)議將合并后的fsimage.ckpt發(fā)送給名稱節(jié)點(diǎn)。3.?dāng)?shù)據(jù)節(jié)點(diǎn)
數(shù)據(jù)節(jié)點(diǎn)是從節(jié)點(diǎn),也是HDFS的工作節(jié)點(diǎn),它負(fù)責(zé)存儲數(shù)據(jù)塊,也負(fù)責(zé)處理客戶端對數(shù)據(jù)塊的讀寫請求,同時還會在名稱節(jié)點(diǎn)的統(tǒng)一調(diào)度下完成數(shù)據(jù)塊的創(chuàng)建、刪除和復(fù)制等。2.2.1HDFS基本架構(gòu)2.2.2HDFS分塊機(jī)制和多副本機(jī)制1.分塊機(jī)制HDFS按塊存儲的好處如下:(1)文件可以任意大。(2)簡化了文件子系統(tǒng)的設(shè)計。(3)提高系統(tǒng)的可用性。(4)有利于負(fù)載均衡。2.多副本機(jī)制
HDFS中數(shù)據(jù)塊的副本數(shù)為3,并且采用以機(jī)架為基礎(chǔ)的策略存儲數(shù)據(jù)。一個HDFS集群中的多個服務(wù)器節(jié)點(diǎn)通常部署在多個機(jī)架上,這樣做的好處是可以防止機(jī)架故障導(dǎo)致數(shù)據(jù)塊不可用。圖2-9副本的存儲策略2.2.2HDFS分塊機(jī)制和多副本機(jī)制2.2.3HDFS讀寫機(jī)制1.讀數(shù)據(jù)圖2-10HDFS讀數(shù)據(jù)的過程圖2-11HDFS寫數(shù)據(jù)的過程2.2.3HDFS讀寫機(jī)制2.寫數(shù)據(jù)實(shí)施計劃與措施2.2.4HDFS的特點(diǎn)HDFS具有以下優(yōu)點(diǎn)TexthereTexthereTexthereTexthereTexthere(1)存儲超大文件。(2)流式數(shù)據(jù)訪問。(3)高容錯性。(4)可以構(gòu)建在廉價的機(jī)器上。(5)計算向數(shù)據(jù)靠攏。2.3HBase的組件和功能HBase的組件和功能圖2-12HBase系統(tǒng)架構(gòu)實(shí)施計劃與措施
客戶端包含訪問HBase的接口,是整個HBase集群的入口。
客戶端使用HBase的RPC機(jī)制與Master和RegionServer通信。其中,對于管理類的操作,客戶端與Master通信;對于數(shù)據(jù)讀寫類的操作,客戶端與RegionServer通信。2.3.1客戶端
Zookeeper是一個由Apache維護(hù)的分布式應(yīng)用程序協(xié)作服務(wù),主要用于實(shí)現(xiàn)分布式系統(tǒng)中Master選舉、分布式協(xié)調(diào)、集群管理、負(fù)載均衡、分布式鎖等功能。2.3.2Zookeeper(2)管理RegionServer的負(fù)載均衡。(1)管理用戶對表的增、刪、改、查等操作。2.3.3Master(3)Region拆分或合并之后,負(fù)責(zé)重新調(diào)整Region的分布。(4)在RegionServer發(fā)生故障后,負(fù)責(zé)失效RegionServer上Region的故障遷移工作。Master主服務(wù)器負(fù)責(zé)監(jiān)控集群中所有RegionServer的運(yùn)行狀態(tài),也用來管理表和Region,具體包括以下幾點(diǎn)2.3.4RegionServer
RegionServer是HBase的核心模塊,主要功能是維護(hù)分配給自己的多個Region,并響應(yīng)用戶的讀寫請求。HBase通常使用HDFS作為其底層文件存儲系統(tǒng),因此RegionServer須向HDFS中讀寫數(shù)據(jù)。2.4典型應(yīng)用——HBase在人臉識別中的應(yīng)用
典型應(yīng)用
人工智能的主要應(yīng)用場景有人臉識別、機(jī)器視覺、指紋識別、圖像處理和自然語言處理等,這些場景都需要處理并存儲海量的數(shù)據(jù),
人臉識別系統(tǒng)就是人工智能與HBase結(jié)合實(shí)現(xiàn)的,下面就對其進(jìn)行簡單介紹。
現(xiàn)在有兩個需求,
一是根據(jù)人臉組ID查找該組下面的所有人臉,
二是根據(jù)人臉組ID和人臉I(yè)D查找某個人臉的具體數(shù)據(jù)。
典型應(yīng)用
典型應(yīng)用HBase數(shù)據(jù)庫是該業(yè)務(wù)場景需求的不二之選。
首先,HBase具有動態(tài)列的特性,支持存儲上億級行和列的數(shù)據(jù);
其次,HBase支持多版本,所有的修改都會記錄在HBase中;
最后,HBase支持小文件存儲,如圖片、短視頻、文檔等,且具有讀寫強(qiáng)一致、檢索能力強(qiáng)和水平易擴(kuò)展等功能。表2-3人臉特征表2.5實(shí)戰(zhàn)演練——HBase的安裝與配置1.JDKJDK版本的選擇與HBase和Hadoop的版本相關(guān),并且只有使用JDK1.6以上的版本才能更好地支持HBase。2.5.1準(zhǔn)備工作表2-4HBase和JDK的版本兼容信息2.SSH
SSH是建立在應(yīng)用層和傳輸層基礎(chǔ)上的安全協(xié)議。HBase在集群模式下的啟動或關(guān)閉都依賴于SSH服務(wù),在集群中,只有啟動sshd后,才可以通過腳本遠(yuǎn)程操控其他的Hadoop和HBase進(jìn)程。2.5.1準(zhǔn)備工作3.HadoopHBase的安裝與單機(jī)模式的配置HBase以HDFS作為底層文件存儲系統(tǒng),所以Hadoop是安裝HBase的先行條件,可以從“/dist/hadoop/core/”網(wǎng)站下載相應(yīng)版本的安裝文件,本書使用的版本是Hadoop2.7.5。在安裝了JDK、SSH和Hadoop后,就可以安裝HBase了。2.5.2安裝HBase1342配置環(huán)境變量。重命名文件。下載安裝文件。解壓hbase-1.3.2-bin.tar.gz文件到相應(yīng)的目錄。步驟
HBase的運(yùn)行模式包括單機(jī)模式、偽分布式模式和分布式模式3種2.5.3配置HBase1.配置單機(jī)模式步驟一配置hbase-env.sh文件。打開hbase-env.sh文件后,需要在文件中配置Java環(huán)境變量并添加Zookeeper配置信息。步驟二配置hbase-site.xml文件。打開hbase-site.xml文件后,須設(shè)置hbase.rootdir屬性來指定HBase數(shù)據(jù)的持久化存儲位置。2.5.3配置HBase步驟三啟動HBase。配置完成后,使用以下命令測試HBase數(shù)據(jù)庫能否正常啟動。步驟四關(guān)閉HBase。2.配置偽分布式模式一步驟配置hbase-env.sh文件。打開hbase-env.sh文件后,需要在文件中配置Java環(huán)境變量、HBASE_CLASSPATH和HBASE_MANAGES_ZK。二配置hbase-site.xml文件。打開hbase-site.xml文件后,和單機(jī)模式一樣需要設(shè)置用于指定HBase數(shù)據(jù)存儲位置的屬性hbase.rootdir。四啟動HBase。步驟步驟三步驟關(guān)閉HBase。2.5.3配置HBase謝謝NoSQL第3章HBase數(shù)據(jù)模型與使用NoSQL本期導(dǎo)讀
HBase采用面向列的鍵值對存儲模式,其數(shù)據(jù)模型非常靈活,不僅在使用時無須預(yù)先定義列名及其數(shù)據(jù)類型等內(nèi)容,還能實(shí)現(xiàn)基于行鍵、列族、列名等的快速查詢。使用HBaseShell可以非常方便地與HBase交互,實(shí)現(xiàn)表的創(chuàng)建、查看、修改和數(shù)據(jù)讀寫等基本操作。
本章首先介紹HBase數(shù)據(jù)模型,然后介紹使用HBaseShell操作HBase的基本方法,最后介紹使用Python訪問并操作HBase的方法。學(xué)習(xí)目標(biāo)熟悉HBase數(shù)據(jù)模型的相關(guān)概念。理解HBase邏輯數(shù)據(jù)模型和物理數(shù)據(jù)模型。能夠使用HBaseShell命令對表、數(shù)據(jù)進(jìn)行操作。能夠使用HBase過濾器對數(shù)據(jù)進(jìn)行過濾。掌握使用Python訪問和操作HBase的方法。目錄HBase數(shù)據(jù)模型HBaseShell操作3.13.23.3通過Python訪問HBase3.1HBase數(shù)據(jù)模型1.表
在HBase數(shù)據(jù)庫中,數(shù)據(jù)以表的形式存儲,表由行和列組成。與關(guān)系型數(shù)據(jù)庫不同的是,HBase表中還存在一個或多個列族,它將一個或多個列組織在一起,HBase中的列必須屬于某一個列族。3.1.1HBase數(shù)據(jù)模型相關(guān)概念HBase表(table)的作用是將數(shù)據(jù)組織起來,同一個表中的數(shù)據(jù)通常都是相關(guān)的。2.行
每個HBase表都由若干個行(row)組成,每行數(shù)據(jù)都由一個行鍵(rowkey)和多個列組成,且可通過行鍵唯一標(biāo)識一行數(shù)據(jù)。3.1.1HBase數(shù)據(jù)模型相關(guān)概念3.列族
一個HBase表中有任意多個列族(columnfamily),列族和列均可以按需動態(tài)添加。表中的列均以字符串形式存儲,用戶在使用時需要自行進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。列名以列族名作為前綴,后面是列限定符名,列族名和列限定符名中間用冒號隔開3.1.1HBase數(shù)據(jù)模型相關(guān)概念4.列限定符3.1.1HBase數(shù)據(jù)模型相關(guān)概念HBase列族中的數(shù)據(jù)通過列限定符(columnqualifier)進(jìn)行定位,實(shí)際應(yīng)用中也常將它稱為列。
列限定符不需要在定義表和列族時定義,也沒有特定的數(shù)據(jù)類型,通常以二進(jìn)制字節(jié)來存儲。5.單元格3.1.1HBase數(shù)據(jù)模型相關(guān)概念
在HBase表中,行鍵、列族和列限定符共同確定一個單元格(cell)。單元格內(nèi)容沒有特定的數(shù)據(jù)類型,通常以二進(jìn)制字節(jié)存儲。6.時間戳
一個單元格中不同版本的數(shù)據(jù)按照時間戳倒序存儲,最新的數(shù)據(jù)版本排在最前面。
時間戳的數(shù)據(jù)類型是64位整型,每次對一個單元格執(zhí)行操作時,HBase會隱式地自動生成一個時間戳。HBase表可視為一個稀疏、多維的映射關(guān)系。3.1.2邏輯數(shù)據(jù)模型
所謂邏輯數(shù)據(jù)模型,就是邏輯視圖,也稱概念視圖,是HBase中數(shù)據(jù)的邏輯組織方式。表3-2HBase邏輯數(shù)據(jù)模型
關(guān)系型數(shù)據(jù)庫需要預(yù)先創(chuàng)建表結(jié)構(gòu),為每個列預(yù)留存儲空間,因此對于稀疏數(shù)據(jù)來說,表中會產(chǎn)生大量的NULL值,這樣會消耗大量的存儲空間。3.1.3物理數(shù)據(jù)模型表3-3HBase物理存儲方式(列族stu_info)行鍵列族stu_info列值時間戳20202001stu_info:nameTomt2stu_info:sexmalet2行鍵列族stu_grade列值時間戳20202001stu_grade:math59t2stu_grade:computer88t2stu_grade:math70t3表3-4HBase物理存儲方式(列族stu_grade)3.2HBaseShell操作1.創(chuàng)建表3.2.1數(shù)據(jù)定義HBase使用create命令創(chuàng)建表,創(chuàng)建表時須指明表名和列族名。create為創(chuàng)建表的命令,table表示表的名稱,大括號中的內(nèi)容是對列族進(jìn)行定義,NAME和VERSIONS為參數(shù)名,分別表示列族名和版本數(shù),columnfamily表示定義的列族名,versions表示列族版本數(shù),是指單元格內(nèi)的數(shù)據(jù)可以保留的最新版本個數(shù),符號“=>”表示將后面的值賦給指定的參數(shù)。2查看所有表表創(chuàng)建完成后,可以使用list命令查看當(dāng)前所有表名,語法形式如下:list3查看表結(jié)構(gòu)表創(chuàng)建完成后,可以使用describe命令查看表的基本信息,語法形式如下:describe<table>3.2.1數(shù)據(jù)定義4修改表結(jié)構(gòu)
表創(chuàng)建完成后,有時可能需要對表結(jié)構(gòu)進(jìn)行修改,HBase使用alter命令對表結(jié)構(gòu)進(jìn)行修改,如修改列族的參數(shù)信息,添加或刪除列族等。5刪除表
刪除表需分兩步進(jìn)行,首先使用disable命令將表設(shè)置為不可用,然后使用drop命令刪除表。3.2.1數(shù)據(jù)定義3.2.2數(shù)據(jù)操作1.插入/更新數(shù)據(jù)HBase使用put命令向表中插入數(shù)據(jù),或更新指定行的數(shù)據(jù)。在使用該命令時必須指定表名和行鍵,語法形式如下:put<table>,<rowkey>,<columnfamily:columnqualifier>,<value>[,timestamp]上述語句中,rowkey表示行鍵;columnfamily表示列族名稱;columnqualifier表示列限定符名稱;value表示單元格內(nèi)容;timestamp表示時間戳,是可選項(xiàng)。2.查看數(shù)據(jù)HBase中有兩個用于查看數(shù)據(jù)的命令,分別為get和scan。3.2.2數(shù)據(jù)操作(1)使用get命令可查看表中的一行或一個單元格的數(shù)據(jù),語法形式如下:get<table>,<rowkey>[,<columnfamily>[:<columnqualifier>]](2)使用scan命令可查看表中的全部或部分?jǐn)?shù)據(jù),語法形式如下:scan<table>[,{COLUMNS=><columnfamily>[:<columnqualifier>][,LIMIT=>num]}]3.刪除數(shù)據(jù)HBase中有兩個用于刪除數(shù)據(jù)的命令,分別為delete和deleteall。3.2.2數(shù)據(jù)操作(1)使用delete命令可刪除一個單元格的數(shù)據(jù),語法形式如下:delete<table>,<rowkey>,<columnfamily>[:<columnqualifier>][,timestamp](2)使用deleteall命令可跨列族刪除一行數(shù)據(jù),語法形式如下:deleteall<table>,<rowkey>[,<columnfamily>[:<columnqualifier>]][,timestamp]1.授予權(quán)限
HBase使用grant命令授予用戶權(quán)限,語法形式如下:grant<useror@group>,<permissions>[,<table>[,<columnfamily>[,<columnqualifier>]]]3.2.3權(quán)限管理上述語句中,grant為授予權(quán)限的命令,useror@group表示為某個用戶或用戶組授予權(quán)限,permissions表示具體的權(quán)限。實(shí)施計劃與措施HBase使用user_permission命令查看某個表的權(quán)限,語法形式如下:user_permission<table>2.查看權(quán)限3.2.3權(quán)限管理3.回收權(quán)限HBase使用revoke命令回收用戶的權(quán)限,語法形式如下:revoke<useror@group>[,<table>[,<columnfamily>[,<columnqualifier>]]]3.2.4HBase過濾器HBase中的過濾器類似于SQL里的WHERE查詢條件,將其與scan命令結(jié)合使用,可以精確查看表中的數(shù)據(jù)。
使用show_filters語句可以查看當(dāng)前HBase支持的過濾器類型。圖3-12HBase支持的過濾器3.2.4HBase過濾器比較運(yùn)算符作用=等于>大于<小于!=不等于>=大于等于<=小于等于表3-5比較運(yùn)算符3.2.4HBase過濾器比較器作用BinaryComparator完整字節(jié)比較器,用于按字典順序比較指定字節(jié)數(shù)組SubstringComparator子字符串比較器,判斷子串是否出現(xiàn)在value中,并且不區(qū)分大小寫,只可用等于或不等于兩種運(yùn)算符BitComparator比特位比較器,只可用等于或不等于兩種運(yùn)算符RegexStringComparator正則表達(dá)式比較器,支持正則表達(dá)式的值比較NullComparator空值比較器,判斷當(dāng)前值是否為NULLBinaryPrefixComparator前綴字節(jié)比較器,只從左端開始比較前綴是否與指定字節(jié)數(shù)組相同表3-6比較器1.行鍵過濾器3.2.4HBase過濾器行鍵過濾器描述RowFilter結(jié)合比較運(yùn)算符和比較器一起使用,實(shí)現(xiàn)行鍵字符串的比較和過濾PrefixFilter行鍵前綴比較器,比較行鍵前綴KeyOnlyFilter只對單元格的鍵進(jìn)行過濾和顯示,而不顯示值,掃描效率高于RowFilterFirstKeyOnlyFilter只顯示相同鍵的第一個單元格,其鍵值也會顯示InclusiveStopFilter掃描時可以設(shè)置一個開始行鍵和一個終止行鍵2.列族過濾器3.2.4HBase過濾器針對列族進(jìn)行匹配的過濾器為FamilyFilter。圖3-17使用FamilyFilter過濾器3.列過濾器3.2.4HBase過濾器表3-8列過濾器列過濾器描述QualifierFilter列名過濾器,只顯示對應(yīng)列名的數(shù)據(jù)ColumnPrefixFilter列名前綴過濾器,無須結(jié)合比較運(yùn)算符和比較器MultipleColumnPrefixFilter多列名前綴匹配過濾器,指定多個前綴的列名過濾器ColumnRangeFilter列名范圍過濾器,掃描出符合過濾條件的列范圍,起始和終止列名用單引號引用4.值過濾器3.2.4HBase過濾器表3-9值過濾器值過濾器描述ValueFilter值過濾器,按照具體的值篩選單元格中的數(shù)據(jù)SingleColumnValueFilter單列值過濾器,通過指定的列族和列篩選單元格中的數(shù)據(jù)SingleColumnValueExcludeFilter單列排除過濾器,結(jié)果中不包含作為篩選條件的列5.其他過濾器3.2.4HBase過濾器表3-10其他過濾器過濾器描述PageFilter將執(zhí)行結(jié)果按行分頁顯示ColumnCountGetFilter限制每個邏輯行最多返回多少列ColumnPaginationFilter將執(zhí)行結(jié)果按列分頁顯示自定義過濾器用戶可以自定義過濾器3.3實(shí)戰(zhàn)演練——通過Python訪問HBaseThrift是一個跨語言的服務(wù)部署框架,最初由Facebook于2007年開發(fā),目前已成為Apache軟件基金會旗下的開源軟件。Thrift通過接口定義語言,也叫接口描述語言(interfacedescriptionlanguage,IDL)來定義RPC的接口和數(shù)據(jù)類型,通過編譯器生成不同語言的代碼,并由生成的代碼負(fù)責(zé)RPC協(xié)議層和傳輸層的實(shí)現(xiàn)。3.3.1Thrift簡介Thrift支持的語言有C++、Java、Python、PHP、Ruby、Perl、C#、JavaScript和Node.js等。Thrift的體系結(jié)構(gòu)為客戶端/服務(wù)器(client/server,C/S)模式,通過代碼生成工具將接口定義文件生成服務(wù)器端和客戶端代碼,從而實(shí)現(xiàn)服務(wù)器和客戶端跨語言的支持。3.3.1Thrift簡介Thrift的體系結(jié)構(gòu)為客戶端/服務(wù)器(client/server,C/S)模式,通過代碼生成工具將接口定義文件生成服務(wù)器端和客戶端代碼,從而實(shí)現(xiàn)服務(wù)器和客戶端跨語言的支持。HBase軟件包中已經(jīng)包含了Thrift服務(wù)端,且在源代碼中也包含了客戶端調(diào)用所需要的Hbase.thrift文件,因此用戶只需要在客戶端安裝Python和Thrift,就可以正常訪問HBase了。3.3.1Thrift簡介3.3.2配置開發(fā)環(huán)境1.安裝Python0105在線下載Python3.6.3切換到Python3目錄下030402將Python安裝包解壓將Python-3.6.3重命名為Python3切換到/usr/local目錄下3.3.2配置開發(fā)環(huán)境1.安裝Python編譯創(chuàng)建軟鏈接配置,--prefix選項(xiàng)是配置安裝的路徑06070809安裝2.安裝Thrift3.3.2配置開發(fā)環(huán)境
使用wget命令在線下載Thrift軟件,本書使用的Thrift版本為thrift-0.13.0。[root@localhost~]#wget/dist/thrift/0.13.0/thrift-0.13.0.tar.gz
也可在“/dist/thrift/”網(wǎng)站選擇相應(yīng)版本進(jìn)行快速下載2.安裝Thrift下載完成后將安裝包解壓,并編譯安裝3.3.2配置開發(fā)環(huán)境安裝步驟詳見課本p73-743.啟動HBaseThrift服務(wù)1步驟啟動HBase服務(wù)。2啟動Thrift客戶端,然后就可與HBase通信。3啟動完成后,通過ps命令查看HBase和Thrift進(jìn)程是否正常運(yùn)行。步驟步驟3.3.2配置開發(fā)環(huán)境2步驟引入相關(guān)類庫。3建立連接。4操作完成后,須關(guān)閉連接。3.3.3連接的建立和關(guān)閉1步驟步驟步驟啟動Python。在命令行輸入python即可,。
查看HBase中已經(jīng)創(chuàng)建的所有表,client為建立的客戶端實(shí)例,getTableNames()方法的執(zhí)行結(jié)果為list類型,可以用來顯示或遍歷表名。3.3.4表的操作
1.查看所有表
該命令同HBaseShell中的create命令。ColumnDescriptor()方法描述的是一個列族信息,參數(shù)name的值teacher_info為列族名,也可以自行設(shè)置其他屬性。
createTable()方法中的第一個參數(shù)為表名,中括號中的內(nèi)容為列族列表信息。3.3.4表的操作
2.創(chuàng)建表3.查看表結(jié)構(gòu)4.刪除表3.3.4表的操作getColumnDescriptors()方法的執(zhí)行結(jié)果也為list類型,結(jié)果中顯示了teacher表的詳細(xì)信息。該命令同HBaseShell中的disable命令和drop命令。disableTable()方法表示禁用表,deleteTable()方法表示刪除表。mutations列表中包含了多個Mutation類型的元素,每個元素又包含列族名、列名和值。mutateRow()方法用來插入數(shù)據(jù),第一個參數(shù)teacher為表名,第二個參數(shù)20201110為行鍵,第3個參數(shù)mutations表示列值信息,也就是mutations中定義的內(nèi)容。
1.插入數(shù)據(jù)3.3.5數(shù)據(jù)的操作
可以查看表中的一行或多行數(shù)據(jù),查看表中一行數(shù)據(jù)的命令,同HBaseShell中的get命令。
getRow()方法的執(zhí)行結(jié)果也為list類型,TRowResult中包含row和columns元組,其中row為行鍵,columns是一個鍵值對列表,鍵為列名,值為TCell元組。TCell元組中又包含了值value和時間戳timestamp。3.3.5數(shù)據(jù)的操作2.查看數(shù)據(jù)
3.刪除數(shù)據(jù)3.3.5數(shù)據(jù)的操作
(1)根據(jù)行鍵刪除表中數(shù)據(jù)的命令,同HBaseShell中的deleteall命令。
使用deleteAllRow()方法可以根據(jù)行鍵刪除HBase表中的數(shù)據(jù),括號中的第一個參數(shù)teacher為表名,第二個參數(shù)20201110為行鍵。
查看表中數(shù)據(jù)是否被刪除,可以使用getRow()方法。(2)根據(jù)指定的時間戳刪除數(shù)據(jù),可以使用deleteAllRowTs()方法。謝謝NoSQL第4章
HBase原理實(shí)現(xiàn)HBase本期導(dǎo)讀
本章首先介紹HBase的工作原理,包括Region及其定位,數(shù)據(jù)的讀寫機(jī)制及WAL機(jī)制;然后介紹HBaseRegion管理,包括StoreFile合并,Region的拆分與合并,以及Region負(fù)載均衡的相關(guān)內(nèi)容;最后介紹HBase的集群管理,以及基于MapReduce的分布式處理。學(xué)習(xí)目標(biāo)掌握HBase的工作原理。理解StoreFile合并機(jī)制。理解Region的拆分、合并及負(fù)載均衡原理。熟悉HBase集群管理的相關(guān)知識。了解MapReduce的分布式處理方法。目錄HBase工作原理。HBaseRegion管理4.14.2HBase集群管理4.34.4基于MapReduce的分布式處理4.1Hbase工作原理4.1.1表和Region圖4-1一個HBase表的一個Region分裂為多個Region
隨著數(shù)據(jù)的不斷插入,表中的行會越來越多,導(dǎo)致數(shù)據(jù)無法存儲到同一臺機(jī)器上。因此,需要根據(jù)某種拆分規(guī)則對表中的行進(jìn)行水平拆分形成分區(qū)(Region),然后將這些分區(qū)分布存儲到多臺機(jī)器上。
當(dāng)對數(shù)據(jù)進(jìn)行插入、刪除、查詢等操作時,客戶端須知道自己所需要的數(shù)據(jù)存儲在哪個RegionServer上,查找Region的過程稱為Region定位。
每個Region都有一個RegionID標(biāo)識它的唯一性,Region標(biāo)識符可以由“表名+開始行鍵+RegionID”表示。4.1.2Region定位Region標(biāo)識符和RegionServer標(biāo)識符,用來表示Region和RegionServer之間的對應(yīng)關(guān)系,這樣就可以知道每個Region具體分布在哪個RegionServer上。這個映射表稱為“.META.表”。
在HBaseShell中使用scan命令可以查看.META.表的具體內(nèi)容。.META.表中的每一行記錄了一個Region的信息。行鍵包含表名、開始行鍵和時間戳信息,中間用逗號分隔開,如果表中只有一個Region,則開始行鍵為空。4.1.2Region定位META.表中的數(shù)據(jù)也會越來越多,并且會自動分裂為多個Region。為了定位.META.表分裂形成的多個Region,也需要構(gòu)建一個映射表,稱為“-ROOT-表”。-ROOT-表不會再進(jìn)行拆分,且任何時候都只有一個Region用來存放-ROOT-表,Master主服務(wù)器永遠(yuǎn)知道這個Region的位置。
基于上述原因,早期的HBase采用三級尋址方式來定位Region4.1.2Region定位圖4-4Region三級尋址方式表4-1HBase三級尋址結(jié)構(gòu)中各層級的名稱及作用4.1.2Region定位層級名稱作用一級Zookeeper記錄了-ROOT-表的位置信息二級-ROOT-表記錄了.META.表的Region位置信息,-ROOT-表只能有一個Region,通過-ROOT-表訪問.META.表中的Region位置信息三級.META.表記錄了HBase表的Region位置信息,.META.表可以有多個Region,其中保存了HBase中所有表的Region位置信息Store是RegionServer的核心,每個Region對象由多個Store組成,每個Store又包含了一個MemStore和若干個StoreFile,每個Store存儲了表中同一個列族下的數(shù)據(jù)。1.Store4.1.3數(shù)據(jù)的讀寫機(jī)制MemStore是在內(nèi)存中的緩存,保存最近更新的數(shù)據(jù)。當(dāng)MemStore中的數(shù)據(jù)達(dá)到一定條件時,HBase會將其中的數(shù)據(jù)按照行鍵字典序進(jìn)行排序并寫入StoreFile中。StoreFile是HBase中最小的存儲單元,是磁盤上的文件,寫入StoreFile文件中的數(shù)據(jù)將會進(jìn)行持久化存儲。StoreFile底層是以HDFS文件系統(tǒng)的HFile格式保存數(shù)據(jù)的,HFile的數(shù)據(jù)塊通常采用壓縮方式存儲。圖4-6HFile的存儲格式4.1.3數(shù)據(jù)的讀寫機(jī)制HFile文件的長度是不固定的,唯一固定的為FileInfo塊和Trailer塊。FileInfo塊記錄文件的元數(shù)據(jù)信息,Trailer塊中有指向其他數(shù)據(jù)塊起始點(diǎn)的指針,DataIndex和MetaIndex塊記錄Data塊和元數(shù)據(jù)塊的偏移量。HFile中的鍵值對是一個簡單的字節(jié)數(shù)組,其存儲結(jié)構(gòu)如圖圖4-7HFile鍵值對存儲結(jié)構(gòu)4.1.3數(shù)據(jù)的讀寫機(jī)制2.HFileHBase寫入數(shù)據(jù)的流程
(1)客戶端訪問Zookeeper,從.META.表中獲取要寫入數(shù)據(jù)所對應(yīng)的Region所在的RegionServer地址。4.1.3數(shù)據(jù)的讀寫機(jī)制
(2)客戶端訪問獲取到的RegionServer,首先將數(shù)據(jù)寫入到MemStore和HLog中。(3)當(dāng)StoreFile文件的數(shù)量達(dá)到某個閾值時,會觸發(fā)文件的合并操作,將多個StoreFile文件合并為一個StoreFile文件。HBase讀取數(shù)據(jù)的流程4.1.3數(shù)據(jù)的讀寫機(jī)制
(1)客戶端首先訪問Zookeeper,從.META.表中讀取Region所在的RegionServer地址。
(2)客戶端向?qū)?yīng)RegionServer發(fā)送讀取數(shù)據(jù)的請求,RegionServer接收請求后首先會訪問MemStore緩存;如果數(shù)據(jù)不在緩存中,才會到磁盤上的StoreFile文件中讀取,然后將數(shù)據(jù)返回給客戶端。
預(yù)寫日志(write-ahead-log,WAL)是HBase用來記錄數(shù)據(jù)更新操作的一種日志,可以保證系統(tǒng)發(fā)生故障時數(shù)據(jù)能夠及時地恢復(fù)到正常狀態(tài)。HBase為每個RegionServer都配置了一個HLog文件。4.1.4WAL機(jī)制使用HLog文件恢復(fù)數(shù)據(jù)的過程(2)系統(tǒng)根據(jù)HLog文件中每條日志記錄所屬的Region,對其中的數(shù)據(jù)進(jìn)行拆分,并分別放到相應(yīng)Region目錄下。4.1.4WAL機(jī)制(1)Master主服務(wù)器處理發(fā)生故障的RegionServer上的HLog文件。使用HLog文件恢復(fù)數(shù)據(jù)的過程(3)將失效的Region重新分配到正常工作的RegionServer中,并將該Region相關(guān)的HLog文件也發(fā)送到該RegionServer中。4.1.4WAL機(jī)制(4)RegionServer收到分配給自己的Region以及相關(guān)的HLog日志后,將這些日志記錄重新執(zhí)行一遍,然后將其寫入MemStore緩存中,最后刷新到磁盤上的StoreFile文件中,完成數(shù)據(jù)恢復(fù)。4.2HBaseRegion管理
為了減少StoreFile文件的數(shù)量,提高讀寫數(shù)據(jù)的效率,同時清理過期和刪除的數(shù)據(jù),系統(tǒng)會將多個StoreFile文件合并為一個相對較大的StoreFile文件。
只有當(dāng)StoreFile文件數(shù)量達(dá)到事先設(shè)置的值時,才會執(zhí)行合并操作。4.2.1StoreFile合并圖4-8StoreFile文件的合并和分裂StoreFile文件的合并方式有兩種:一種是MinorCompact另外一種是MajorCompact4.2.1StoreFile合并1.MinorCompactMinorCompact是將多個StoreFile小文件合并為一個大文件。在合并的過程中,會對Region加寫鎖,阻塞所有更新操作,直到合并完成或達(dá)到hbase.hstore.blockingWaitTime(默認(rèn)90s)設(shè)置的時間才會釋放鎖。4.2.1StoreFile合并表4-2MinorCompact時StoreFile文件合并滿足的條件4.2.1StoreFile合并參數(shù)默認(rèn)值合并條件paction.min3符合條件的文件數(shù)量(參與合并的文件數(shù)量)須大于等于該值paction.max10每次參與合并的文件數(shù)量須小于等于該值paction.min.sizeMemStore
刷新的大小文件大小小于該值時可加入合并隊列paction.max.sizeLong.MAX_VALUE文件大小大于該值時排除合并paction.ratio1.2f當(dāng)文件大小大于paction.min.size值且小于比其自身更新的所有文件的大小總和*該值時,也可以參與合并2.MajorCompact4.2.1StoreFile合并MajorCompact是將Store中的所有StoreFile文件合并成一個很大的StoreFile文件。MajorCompact較MinorCompact開銷更大且持續(xù)時間較長,整個過程會消耗大量系統(tǒng)資源,影響集群性能。4.2.2Region拆分與合并表4-3Region拆分方式1.Region拆分拆分方式描述自動拆分具有多種不同的拆分策略預(yù)拆分在創(chuàng)建表的時候就創(chuàng)建多個Region手動拆分執(zhí)行HBaseShell的split命令,如split'student','20'表示將student表進(jìn)行手動拆分,拆分點(diǎn)為20實(shí)施計劃與措施4.2.2Region拆分與合并在自動拆分方式下,HBase常用的Region拆分策略TexthereTexthereTexthereTexthereTexthere(1)ConstantSizeRegionSplitPolicy。(2)IncreasingToUpperBoundRegionSplitPolicy。(3)SteppingSplitPolicy。實(shí)施計劃與措施4.2.2Region拆分與合并拆分策略原理示例KeyPrefixRegionSplitPolicy保證前綴相同的行鍵在同一個Region中假設(shè)表中的行鍵都是8位,并且指定前2位是前綴,那么在進(jìn)行拆分時,前2位相同的行鍵會在同一個Region中DelimitedKeyPrefixRegionSplitPolicy保證某個分隔符之前相同的行鍵在同一個Region中例如行鍵的格式為ID_Groupid,指定的分隔符為“_”,則拆分時會保證ID相同的行鍵在同一個Region中表4-4Region其他拆分策略
當(dāng)RegionServer中的Region數(shù)量達(dá)到閾值時,RegionServer就會將Region合并。
當(dāng)有數(shù)量較多的Region需要合并時,可以通過編寫程序的方式實(shí)現(xiàn)批量合并。4.2.2Region拆分與合并2.Region合并1.負(fù)載均衡執(zhí)行條件4.2.3Region負(fù)載均衡
負(fù)載均衡(loadbalance)是將負(fù)載均勻地分?jǐn)偟郊褐械亩鄠€服務(wù)器上,共同完成工作任務(wù),是解決高性能、高可用和擴(kuò)展性的有效手段。(1)開啟自動執(zhí)行負(fù)載均衡開關(guān),命令為:balance_switchtrue。(2)Master完成初始化操作。(3)當(dāng)前沒有Region處于拆分狀態(tài)。(4)集群中的RegionServer狀態(tài)正常。4.2.3Region負(fù)載均衡2.負(fù)載均衡實(shí)現(xiàn)負(fù)
載
均
衡
策
略
(1)RandomRegionPicker:
(2)LoadPicker:
(3)LocalityBasedPicker:4.3Hbase集群管理1.添加RegionServer節(jié)點(diǎn)
4.3.1運(yùn)維管理(1)編輯HBase的conf目錄下的regionservers文件,將新添加節(jié)點(diǎn)的主機(jī)名另起一行添加進(jìn)去。(2)將編輯好的regionservers文件復(fù)制到集群中的所有機(jī)器上。(3)啟動新節(jié)點(diǎn)完成節(jié)點(diǎn)的添加。啟動節(jié)點(diǎn)的方式有以下兩種:
4.3.1運(yùn)維管理(1)在Master主服務(wù)器上執(zhí)行以下命令。(2)在對應(yīng)的節(jié)點(diǎn)上執(zhí)行以下命令。2.刪除RegionServer節(jié)點(diǎn)刪除RegionServer節(jié)點(diǎn)有以下兩種方式:
4.3.1運(yùn)維管理(1)在需要停止運(yùn)行的節(jié)點(diǎn)上執(zhí)行以下命令刪除節(jié)點(diǎn)。(2)在需要停止運(yùn)行的節(jié)點(diǎn)上執(zhí)行g(shù)raceful_stop.shhostname命令刪除節(jié)點(diǎn)。3.添加Master備份節(jié)點(diǎn)(1)在HBase的conf目錄下新增backup-masters文件(編輯方式與regionservers文件一樣)然后執(zhí)行hbase-daemon.shstartmaster命令。(2)在集群中的另外一臺配置一樣的機(jī)器上啟動Master備份節(jié)點(diǎn),
4.3.1運(yùn)維管理1.?dāng)?shù)據(jù)導(dǎo)出
在導(dǎo)出數(shù)據(jù)時必須指定表名和outputdir(文件導(dǎo)出路徑)。另外可以根據(jù)需要指定versions(每個單元格備份的版本數(shù)),starttime(開始時間),endtime(結(jié)束時間)等,還可以使用正則表達(dá)式或行鍵前綴過濾數(shù)據(jù),參數(shù)-D可以指定鍵值類型配置屬性。
4.3.2數(shù)據(jù)管理2.?dāng)?shù)據(jù)導(dǎo)入導(dǎo)入數(shù)據(jù)只須指定表名和文件導(dǎo)入路徑即可。
4.3.2數(shù)據(jù)管理3.?dāng)?shù)據(jù)拷貝CopyTable命令可以設(shè)置需要拷貝的數(shù)據(jù)的時間范圍(時間戳),以及要拷貝的列族和拷貝到的新的表名等。通過參數(shù)--peer.adr可以區(qū)分是集群內(nèi)部還是集群間的拷貝。4.快照備份HBase通過內(nèi)置的ExportSnapshot命令將快照備份到HDFS。
首先切換到HBase安裝目錄的bin目錄下,
然后執(zhí)行以下命令可以查看ExportSnapshot命令的參數(shù)信息。
4.3.2數(shù)據(jù)管理HBase也自帶了很多用于數(shù)據(jù)調(diào)試和分析的工具,如hbck、hfile和wal等。hbck用于修復(fù)HBase中出現(xiàn)的錯誤,是HBase運(yùn)維管理中使用最多的工具。
首先切換到HBase安裝目錄的bin目錄下,然后執(zhí)行以下命令可以查看hbck命令的參數(shù)信息。4.3.3故障處理4.4實(shí)戰(zhàn)演練——基于MapReduce的分布式處理MapReduce是Hadoop生態(tài)系統(tǒng)的核心組件之一。它通過map()函數(shù)和reduce()函數(shù)處理大規(guī)模數(shù)據(jù)并行計算問題,其核心思想是“分而治之”,4.4.1MapReduce簡介使用MapReduce操作海量數(shù)據(jù)需要經(jīng)過兩個階段一Map階段負(fù)責(zé)將待處理的數(shù)據(jù)集拆分。二Reduce階段負(fù)責(zé)將Map階段得到的中間結(jié)果進(jìn)行全局匯總并計算。HBase既可作為MapReduce的數(shù)據(jù)輸入源,也可作為MapReduce的數(shù)據(jù)輸出源。4.4.2使用MapReduce統(tǒng)計HBase表的行數(shù)12方法首先切換到HBase的bin目錄,然后執(zhí)行hbasemapredcp命令,可查看執(zhí)行MapReduce時會使用到的jar包。對Hadoop的配置文件hadoop-env.sh執(zhí)行一些操作。首先執(zhí)行以下命令打開配置文件。4.4.2使用MapReduce統(tǒng)計HBase表的行數(shù)34方法執(zhí)行上述命令打開配置文件hadoop-env.sh后,輸入字母i開始編輯文件,之后在hadoop-env.sh文件中輸入以下配置信息,保存并退出。執(zhí)行完上述操作后重新啟動Hadoop服務(wù),即可使用hbase-server-1.3.2.jar包提供的rowcounter類統(tǒng)計HBase表中的行數(shù)。4.4.3WordCount實(shí)例輸入輸出HelloWorldHadoopMapReduceHelloWorld
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)二年級數(shù)學(xué)上冊口算題
- 2024-2025年高中化學(xué)課時分層作業(yè)5元素的電負(fù)性及其變化規(guī)律含解析魯科版選修3
- 西門子油煙機(jī)指導(dǎo)書
- 2025年年度尊重生命總結(jié)報告
- 二次消防改造工程合同范本
- 海南經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院《建筑構(gòu)造Ⅰ》2023-2024學(xué)年第二學(xué)期期末試卷
- 福州科技職業(yè)技術(shù)學(xué)院《德語口譯》2023-2024學(xué)年第二學(xué)期期末試卷
- 常州信息職業(yè)技術(shù)學(xué)院《中學(xué)語文課程與教學(xué)論》2023-2024學(xué)年第二學(xué)期期末試卷
- 宿遷學(xué)院《編譯原理》2023-2024學(xué)年第二學(xué)期期末試卷
- 烏蘭察布職業(yè)學(xué)院《建筑物理》2023-2024學(xué)年第二學(xué)期期末試卷
- 2024年度碳陶剎車盤分析報告
- 2025年1月 浙江首考英語試卷
- 十首最美的唐詩
- 2024年中考二輪專題復(fù)習(xí)道德與法治主觀題答題技巧(小論文)之演講稿
- 質(zhì)檢工作計劃書2025質(zhì)檢部工作計劃范文
- 《纏論的實(shí)戰(zhàn)技法》課件
- 新版標(biāo)準(zhǔn)化機(jī)電專業(yè)管理體系解讀課件
- 承包魚塘維修施工合同范例
- 耶魯綜合抽動嚴(yán)重程度量表正式版
- 水利水電工程建設(shè)常見事故類型及典型事故分析(標(biāo)準(zhǔn)版)
- 政府采購項(xiàng)目采購需求調(diào)查指引文本
評論
0/150
提交評論