HBase权威指南【中文版】
一、下載地址(永久有效)
?
?
?
百度云盤下載(公開永久):HBase權(quán)威指南【中文版】.pdf
?
?
?
二、HBase產(chǎn)生的背景
?
?
?
????????2003年,Google發(fā)表了一篇論文,叫"The Google File System"。這個(gè)分布式文件系統(tǒng)簡稱GFS,它使商用硬件集群存儲海量數(shù)據(jù)。文件系統(tǒng)將數(shù)據(jù)在節(jié)點(diǎn)之間進(jìn)行冗余復(fù)制,這樣的話,即使一臺存儲服務(wù)器發(fā)生故障,也不會(huì)影響數(shù)據(jù)的可用性。它對數(shù)據(jù)的流式讀取也做了優(yōu)化,可以邊處理邊讀取。
????????????????? ? (Hadoop的HDFS ? 參考 ?Google的 GFS)
????????不久,Google又發(fā)表了另一篇論文,叫"MapReduce: Simpliied Data Processing on Large Clusters"。MapReduce是GFS架構(gòu)的一個(gè)補(bǔ)充,因?yàn)樗軌虺浞掷肎FS集群中的每個(gè)商用服務(wù)器提供的大量CPU。MapReduce加上GFS形成了處理海量數(shù)據(jù)的核心力量,包括構(gòu)建Google的搜索索引。
????????????????????(Hadoop的MapReduce參考 ?Google的MapReduce)
????????不過以上描述的兩個(gè)系統(tǒng)都缺乏實(shí)時(shí)隨機(jī)存儲數(shù)據(jù)的能力(意味著尚不足以處理Web服務(wù))。GFS的另一個(gè)缺陷就是,它適合存儲少許非常非常大的文件,而不適合存儲成千上千萬的小文件,因?yàn)槲募脑獢?shù)據(jù)信息最終要存儲在主節(jié)點(diǎn)(NameNode)的內(nèi)存中,文件越多主節(jié)點(diǎn)的壓力越大。
????????因此,Google嘗試去找到一個(gè)能夠驅(qū)動(dòng)交互應(yīng)用的解決方案,例如,Google郵件或者Google分析,能夠同時(shí)利用這種基礎(chǔ)結(jié)構(gòu)、依靠GFS存儲的數(shù)據(jù)冗余和數(shù)據(jù)可用性較強(qiáng)的特點(diǎn)。存儲的數(shù)據(jù)應(yīng)該拆分成特別小的條目,然后由系統(tǒng)將這些小記錄聚合到非常大的存儲文件中,并提供一些索引排序,讓用戶可以查找最少的磁盤(磁盤尋址)就能夠獲取數(shù)據(jù)。最終,它應(yīng)該能夠及時(shí)存儲爬蟲的結(jié)果,并跟MapReduce協(xié)作構(gòu)建搜索索引。
?
????????意識到RDBMS(關(guān)系型數(shù)據(jù)庫)在大規(guī)模處理中的缺點(diǎn),工程師們開始考慮問題的其他切入點(diǎn):摒棄關(guān)系型的特點(diǎn),采用簡單的API來進(jìn)行增、查、改、刪(CRUD == Create、Read、Update and Delete)操作,再加一個(gè)掃描函數(shù)(scan),在較大的鍵范圍或全表上進(jìn)行迭代掃描。這些努力的成果最終在2006年的論文"BigTable: A Distributed Storeage System for Structured Data" 中發(fā)表了。
????????"BigTable" 是一個(gè)管理結(jié)構(gòu)化數(shù)據(jù)的分布式存儲系統(tǒng),它可以擴(kuò)展到非常大:如在成千上萬的商用服務(wù)器上存儲PB級的數(shù)據(jù)。......一個(gè)稀疏的、分布式的、持久化的多維排序映射"。
????????? ????(Hadoop的HBase參考 ?Google的BigTable)
?
?
?
?
三、HBase的主要主件
?
????????HBase中有三個(gè)主要組件:客戶端庫、一臺主服務(wù)器、多臺region服務(wù)器。可以動(dòng)態(tài)地增加和移動(dòng)region服務(wù)器,以適應(yīng)不斷變化的負(fù)載。主服務(wù)器主要負(fù)責(zé)利用Apache Zookeeper為region服務(wù)器分配region,Apache Zookeeper是一個(gè)高可靠的、高可用的持久化的分布式協(xié)調(diào)系統(tǒng)。
?
?
?
?
????????Zookeeper是Apache 軟件基金會(huì)旗下的一個(gè)獨(dú)立的開源系統(tǒng),它是Google公司為解決BigTable中問題而提出的Chubby算法的一種開源實(shí)現(xiàn)。它提供了類似文件系統(tǒng)一樣的訪問目錄和文件(稱為znode)的功能,通常分布式系統(tǒng)利用它協(xié)調(diào)所有權(quán)、注冊服務(wù)、監(jiān)聽更新。
????????每臺region服務(wù)器在Zookeeper中注冊一個(gè)自己的臨時(shí)節(jié)點(diǎn)(客戶端開啟一個(gè)Session,一旦客戶端關(guān)閉,節(jié)點(diǎn)將會(huì)在ZK服務(wù)端被刪除),主服務(wù)器會(huì)利用這些臨時(shí)節(jié)點(diǎn)來發(fā)現(xiàn)可用的服務(wù)器,還可以利用臨時(shí)節(jié)點(diǎn)來跟蹤機(jī)器故障和網(wǎng)絡(luò)分區(qū)。
?
????????在Zookeeper服務(wù)器中,每個(gè)臨時(shí)節(jié)點(diǎn)都屬于某一個(gè)會(huì)話,這個(gè)會(huì)話是客戶端連接上Zookeeper服務(wù)器之后自動(dòng)生成的。每個(gè)會(huì)話在服務(wù)器中有一個(gè)唯一的id,并且客戶端會(huì)以此id不斷地向Zookeeper服務(wù)器發(fā)生"心跳",一旦發(fā)生故障Zookeeper客戶端進(jìn)程死掉,Zookeeper服務(wù)器會(huì)判定該會(huì)話超時(shí),并自動(dòng)刪除屬于它的臨時(shí)節(jié)點(diǎn)(節(jié)點(diǎn)類似于文件系統(tǒng)中的文件夾)。
?
?
?
?
(1)zkServer.sh start ??開啟ZK服務(wù)(ZK集群中的每臺ZK服務(wù)都要開啟)
?
?
?
?
(2)zkCli.sh -server localhost:2181? ZK服務(wù)端開啟后,啟動(dòng)ZK客戶端進(jìn)行連接
?
?
?
?
最后定格在
?
?
?
?
?
?
(3)create -e /app1/ data-0?客戶端連接ZK服務(wù)后,在根目錄下創(chuàng)建一個(gè)臨時(shí)Znode節(jié)點(diǎn)叫"app1",其value值我們設(shè)置為"data-0"
?
?
?
?
創(chuàng)建之后,我們會(huì)發(fā)現(xiàn)集群中其余ZK服務(wù)會(huì)同步更新這個(gè)Znode節(jié)點(diǎn)(app1文件夾)
?
?
?
比如,我們在144的Zookeeper服務(wù)器上進(jìn)行"ls /" (列出ZK根目錄下面的文件)如下
?
?
?
?
146的亦如此:
?
?
?
?
?
除了我們剛才創(chuàng)建的app1節(jié)點(diǎn)外,ZK集群中還有Zk自己的節(jié)點(diǎn)zookeeper和kafka的brokers節(jié)點(diǎn)以及hbase節(jié)點(diǎn)(永久)等
?
?
我們可以利用get命令,來查看節(jié)點(diǎn)(文件夾)app1的信息如下(在144服務(wù)器上進(jìn)程操作):
?
?
?
?
?
?
由于我們創(chuàng)建的znode是臨時(shí)節(jié)點(diǎn),因此,當(dāng)我們退出(quit)當(dāng)前客戶端連接會(huì)話時(shí),節(jié)點(diǎn)app1會(huì)被刪除,退出后,我們再次連接ZK服務(wù)進(jìn)行查詢,發(fā)現(xiàn)已經(jīng)沒有該節(jié)點(diǎn)了,效果如下:
?
?
?
?
?
?
?
?
?
?
????????HBase還可以利用Zookeeper確保只有一個(gè)主服務(wù)在運(yùn)行(HBaseMaster),存儲用于發(fā)現(xiàn)region的引導(dǎo)位置,作為一個(gè)region服務(wù)器的注冊表,以及實(shí)現(xiàn)其他目的。Zookeeper是一個(gè)關(guān)鍵組成部分,沒有它HBase就無法運(yùn)作。Zookeeper使用分布式的一系列服務(wù)器和Zap協(xié)議(確保其狀態(tài)保存一致)減輕了應(yīng)用上的負(fù)擔(dān)。
?
????????master服務(wù)器負(fù)責(zé)跨region服務(wù)器的全局region的負(fù)載均衡,將繁忙的服務(wù)器中的region移動(dòng)到負(fù)載較輕的服務(wù)器中。主服務(wù)器(HBaseMaster)不是實(shí)際數(shù)據(jù)存儲或者檢索路徑的組成部分,它僅提供了負(fù)載均衡和集群管理,不為region服務(wù)器或者客戶端提供任何的數(shù)據(jù)服務(wù),因此是輕量級服務(wù)器。此外,主服務(wù)器還提供了元數(shù)據(jù)的管理操作,例如,建表和創(chuàng)建列族(column family)。
?
????????region服務(wù)器負(fù)責(zé)為它們的服務(wù)的region提供讀和寫請求,也提供了拆分超過配置大小的region的接口。客戶端則直接與region服務(wù)器通信,處理所有數(shù)據(jù)相關(guān)的操作。
?
????????"數(shù)十億行 X 數(shù)百萬列 X 數(shù)千個(gè)版本 = TB級 或 PB級的存儲"
?
?
?
其余內(nèi)容,請自行學(xué)習(xí),學(xué)習(xí)使人快樂!
?
總結(jié)
以上是生活随笔為你收集整理的HBase权威指南【中文版】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 配置mysql环境变量
- 下一篇: 友盟分享