<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ivaneeo's blog

    自由的力量,自由的生活。

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

    HBase – Hadoop Database,是一個(gè)高可靠性、高性能、面向列、可伸縮的分布式存儲(chǔ)系統(tǒng),利用HBase技術(shù)可在廉價(jià)PC Server上搭建起大規(guī)模結(jié)構(gòu)化存儲(chǔ)集群。

    HBase是Google Bigtable的開(kāi)源實(shí)現(xiàn),類(lèi)似Google Bigtable利用GFS作為其文件存儲(chǔ)系統(tǒng),HBase利用Hadoop HDFS作為其文件存儲(chǔ)系統(tǒng);Google運(yùn)行MapReduce來(lái)處理Bigtable中的海量數(shù)據(jù),HBase同樣利用Hadoop MapReduce來(lái)處理HBase中的海量數(shù)據(jù);Google Bigtable利用 Chubby作為協(xié)同服務(wù),HBase利用Zookeeper作為對(duì)應(yīng)。

    上圖描述了Hadoop EcoSystem中的各層系統(tǒng),其中HBase位于結(jié)構(gòu)化存儲(chǔ)層,Hadoop HDFS為HBase提供了高可靠性的底層存儲(chǔ)支持,Hadoop MapReduce為HBase提供了高性能的計(jì)算能力,Zookeeper為HBase提供了穩(wěn)定服務(wù)和failover機(jī)制。

    此外,Pig和Hive還為HBase提供了高層語(yǔ)言支持,使得在HBase上進(jìn)行數(shù)據(jù)統(tǒng)計(jì)處理變的非常簡(jiǎn)單。 Sqoop則為HBase提供了方便的RDBMS數(shù)據(jù)導(dǎo)入功能,使得傳統(tǒng)數(shù)據(jù)庫(kù)數(shù)據(jù)向HBase中遷移變的非常方便。

    HBase訪問(wèn)接口

    1.       Native Java API,最常規(guī)和高效的訪問(wèn)方式,適合Hadoop MapReduce Job并行批處理HBase表數(shù)據(jù)

    2.       HBase Shell,HBase的命令行工具,最簡(jiǎn)單的接口,適合HBase管理使用

    3.       Thrift Gateway,利用Thrift序列化技術(shù),支持C++,PHP,Python等多種語(yǔ)言,適合其他異構(gòu)系統(tǒng)在線訪問(wèn)HBase表數(shù)據(jù)

    4.       REST Gateway,支持REST 風(fēng)格的Http API訪問(wèn)HBase, 解除了語(yǔ)言限制

    5.       Pig,可以使用Pig Latin流式編程語(yǔ)言來(lái)操作HBase中的數(shù)據(jù),和Hive類(lèi)似,本質(zhì)最終也是編譯成MapReduce Job來(lái)處理HBase表數(shù)據(jù),適合做數(shù)據(jù)統(tǒng)計(jì)

    6.       Hive,當(dāng)前Hive的Release版本尚沒(méi)有加入對(duì)HBase的支持,但在下一個(gè)版本Hive 0.7.0中將會(huì)支持HBase,可以使用類(lèi)似SQL語(yǔ)言來(lái)訪問(wèn)HBase

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

    Table & Column Family

    Row Key Timestamp Column Family
    URI Parser
    r1 t3 url=http://www.taobao.com title=天天特價(jià)
    t2 host=taobao.com
    t1
    r2 t5 url=http://www.alibaba.com content=每天…
    t4 host=alibaba.com

    Ø  Row Key: 行鍵,Table的主鍵,Table中的記錄按照Row Key排序

    Ø  Timestamp: 時(shí)間戳,每次數(shù)據(jù)操作對(duì)應(yīng)的時(shí)間戳,可以看作是數(shù)據(jù)的version number

    Ø  Column Family:列簇,Table在水平方向有一個(gè)或者多個(gè)Column Family組成,一個(gè)Column Family中可以由任意多個(gè)Column組成,即Column Family支持動(dòng)態(tài)擴(kuò)展,無(wú)需預(yù)先定義Column的數(shù)量以及類(lèi)型,所有Column均以二進(jìn)制格式存儲(chǔ),用戶需要自行進(jìn)行類(lèi)型轉(zhuǎn)換。

    Table & Region

    當(dāng)Table隨著記錄數(shù)不斷增加而變大后,會(huì)逐漸分裂成多份splits,成為regions,一個(gè)region由[startkey,endkey)表示,不同的region會(huì)被Master分配給相應(yīng)的RegionServer進(jìn)行管理:

    -ROOT- && .META. Table

    HBase中有兩張?zhí)厥獾腡able,-ROOT-和.META.

    Ø  .META.:記錄了用戶表的Region信息,.META.可以有多個(gè)regoin

    Ø  -ROOT-:記錄了.META.表的Region信息,-ROOT-只有一個(gè)region

    Ø  Zookeeper中記錄了-ROOT-表的location

    Client訪問(wèn)用戶數(shù)據(jù)之前需要首先訪問(wèn)zookeeper,然后訪問(wèn)-ROOT-表,接著訪問(wèn).META.表,最后才能找到用戶數(shù)據(jù)的位置去訪問(wèn),中間需要多次網(wǎng)絡(luò)操作,不過(guò)client端會(huì)做cache緩存。

    MapReduce on HBase

    在HBase系統(tǒng)上運(yùn)行批處理運(yùn)算,最方便和實(shí)用的模型依然是MapReduce,如下圖:

    HBase Table和Region的關(guān)系,比較類(lèi)似HDFS File和Block的關(guān)系,HBase提供了配套的TableInputFormat和TableOutputFormat API,可以方便的將HBase Table作為Hadoop MapReduce的Source和Sink,對(duì)于MapReduce Job應(yīng)用開(kāi)發(fā)人員來(lái)說(shuō),基本不需要關(guān)注HBase系統(tǒng)自身的細(xì)節(jié)。

    HBase系統(tǒng)架構(gòu)

    Client

    HBase Client使用HBase的RPC機(jī)制與HMaster和HRegionServer進(jìn)行通信,對(duì)于管理類(lèi)操作,Client與HMaster進(jìn)行RPC;對(duì)于數(shù)據(jù)讀寫(xiě)類(lèi)操作,Client與HRegionServer進(jìn)行RPC

    Zookeeper

    Zookeeper Quorum中除了存儲(chǔ)了-ROOT-表的地址和HMaster的地址,HRegionServer也會(huì)把自己以Ephemeral方式注冊(cè)到Zookeeper中,使得HMaster可以隨時(shí)感知到各個(gè)HRegionServer的健康狀態(tài)。此外,Zookeeper也避免了HMaster的單點(diǎn)問(wèn)題,見(jiàn)下文描述

    HMaster

    HMaster沒(méi)有單點(diǎn)問(wèn)題,HBase中可以啟動(dòng)多個(gè)HMaster,通過(guò)Zookeeper的Master Election機(jī)制保證總有一個(gè)Master運(yùn)行,HMaster在功能上主要負(fù)責(zé)Table和Region的管理工作:

    1.       管理用戶對(duì)Table的增、刪、改、查操作

    2.       管理HRegionServer的負(fù)載均衡,調(diào)整Region分布

    3.       在Region Split后,負(fù)責(zé)新Region的分配

    4.       在HRegionServer停機(jī)后,負(fù)責(zé)失效HRegionServer 上的Regions遷移

    HRegionServer

    HRegionServer主要負(fù)責(zé)響應(yīng)用戶I/O請(qǐng)求,向HDFS文件系統(tǒng)中讀寫(xiě)數(shù)據(jù),是HBase中最核心的模塊。

    HRegionServer內(nèi)部管理了一系列HRegion對(duì)象,每個(gè)HRegion對(duì)應(yīng)了Table中的一個(gè)Region,HRegion中由多個(gè)HStore組成。每個(gè)HStore對(duì)應(yīng)了Table中的一個(gè)Column Family的存儲(chǔ),可以看出每個(gè)Column Family其實(shí)就是一個(gè)集中的存儲(chǔ)單元,因此最好將具備共同IO特性的column放在一個(gè)Column Family中,這樣最高效。

    HStore存儲(chǔ)是HBase存儲(chǔ)的核心了,其中由兩部分組成,一部分是MemStore,一部分是StoreFiles。MemStore是Sorted Memory Buffer,用戶寫(xiě)入的數(shù)據(jù)首先會(huì)放入MemStore,當(dāng)MemStore滿了以后會(huì)Flush成一個(gè)StoreFile(底層實(shí)現(xiàn)是HFile),當(dāng)StoreFile文件數(shù)量增長(zhǎng)到一定閾值,會(huì)觸發(fā)Compact合并操作,將多個(gè)StoreFiles合并成一個(gè)StoreFile,合并過(guò)程中會(huì)進(jìn)行版本合并和數(shù)據(jù)刪除,因此可以看出HBase其實(shí)只有增加數(shù)據(jù),所有的更新和刪除操作都是在后續(xù)的compact過(guò)程中進(jìn)行的,這使得用戶的寫(xiě)操作只要進(jìn)入內(nèi)存中就可以立即返回,保證了HBase I/O的高性能。當(dāng)StoreFiles Compact后,會(huì)逐步形成越來(lái)越大的StoreFile,當(dāng)單個(gè)StoreFile大小超過(guò)一定閾值后,會(huì)觸發(fā)Split操作,同時(shí)把當(dāng)前Region Split成2個(gè)Region,父Region會(huì)下線,新Split出的2個(gè)孩子Region會(huì)被HMaster分配到相應(yīng)的HRegionServer上,使得原先1個(gè)Region的壓力得以分流到2個(gè)Region上。下圖描述了Compaction和Split的過(guò)程:

    在理解了上述HStore的基本原理后,還必須了解一下HLog的功能,因?yàn)樯鲜龅腍Store在系統(tǒng)正常工作的前提下是沒(méi)有問(wèn)題的,但是在分布式系統(tǒng)環(huán)境中,無(wú)法避免系統(tǒng)出錯(cuò)或者宕機(jī),因此一旦HRegionServer意外退出,MemStore中的內(nèi)存數(shù)據(jù)將會(huì)丟失,這就需要引入HLog了。每個(gè)HRegionServer中都有一個(gè)HLog對(duì)象,HLog是一個(gè)實(shí)現(xiàn)Write Ahead Log的類(lèi),在每次用戶操作寫(xiě)入MemStore的同時(shí),也會(huì)寫(xiě)一份數(shù)據(jù)到HLog文件中(HLog文件格式見(jiàn)后續(xù)),HLog文件定期會(huì)滾動(dòng)出新的,并刪除舊的文件(已持久化到StoreFile中的數(shù)據(jù))。當(dāng)HRegionServer意外終止后,HMaster會(huì)通過(guò)Zookeeper感知到,HMaster首先會(huì)處理遺留的 HLog文件,將其中不同Region的Log數(shù)據(jù)進(jìn)行拆分,分別放到相應(yīng)region的目錄下,然后再將失效的region重新分配,領(lǐng)取 到這些region的HRegionServer在Load Region的過(guò)程中,會(huì)發(fā)現(xiàn)有歷史HLog需要處理,因此會(huì)Replay HLog中的數(shù)據(jù)到MemStore中,然后flush到StoreFiles,完成數(shù)據(jù)恢復(fù)。

    HBase存儲(chǔ)格式

    HBase中的所有數(shù)據(jù)文件都存儲(chǔ)在Hadoop HDFS文件系統(tǒng)上,主要包括上述提出的兩種文件類(lèi)型:

    1.       HFile, HBase中KeyValue數(shù)據(jù)的存儲(chǔ)格式,HFile是Hadoop的二進(jìn)制格式文件,實(shí)際上StoreFile就是對(duì)HFile做了輕量級(jí)包裝,即StoreFile底層就是HFile

    2.       HLog File,HBase中WAL(Write Ahead Log) 的存儲(chǔ)格式,物理上是Hadoop的Sequence File

    HFile

    下圖是HFile的存儲(chǔ)格式:

    首先HFile文件是不定長(zhǎng)的,長(zhǎng)度固定的只有其中的兩塊:Trailer和FileInfo。正如圖中所示的,Trailer中有指針指向其他數(shù)據(jù)塊的起始點(diǎn)。File Info中記錄了文件的一些Meta信息,例如:AVG_KEY_LEN, AVG_VALUE_LEN, LAST_KEY, COMPARATOR, MAX_SEQ_ID_KEY等。Data Index和Meta Index塊記錄了每個(gè)Data塊和Meta塊的起始點(diǎn)。

    Data Block是HBase I/O的基本單元,為了提高效率,HRegionServer中有基于LRU的Block Cache機(jī)制。每個(gè)Data塊的大小可以在創(chuàng)建一個(gè)Table的時(shí)候通過(guò)參數(shù)指定,大號(hào)的Block有利于順序Scan,小號(hào)Block利于隨機(jī)查詢(xún)。每個(gè)Data塊除了開(kāi)頭的Magic以外就是一個(gè)個(gè)KeyValue對(duì)拼接而成, Magic內(nèi)容就是一些隨機(jī)數(shù)字,目的是防止數(shù)據(jù)損壞。后面會(huì)詳細(xì)介紹每個(gè)KeyValue對(duì)的內(nèi)部構(gòu)造。

    HFile里面的每個(gè)KeyValue對(duì)就是一個(gè)簡(jiǎn)單的byte數(shù)組。但是這個(gè)byte數(shù)組里面包含了很多項(xiàng),并且有固定的結(jié)構(gòu)。我們來(lái)看看里面的具體結(jié)構(gòu):

    開(kāi)始是兩個(gè)固定長(zhǎng)度的數(shù)值,分別表示Key的長(zhǎng)度和Value的長(zhǎng)度。緊接著是Key,開(kāi)始是固定長(zhǎng)度的數(shù)值,表示RowKey的長(zhǎng)度,緊接著是RowKey,然后是固定長(zhǎng)度的數(shù)值,表示Family的長(zhǎng)度,然后是Family,接著是Qualifier,然后是兩個(gè)固定長(zhǎng)度的數(shù)值,表示Time Stamp和Key Type(Put/Delete)。Value部分沒(méi)有這么復(fù)雜的結(jié)構(gòu),就是純粹的二進(jìn)制數(shù)據(jù)了。

    HLogFile

    上圖中示意了HLog文件的結(jié)構(gòu),其實(shí)HLog文件就是一個(gè)普通的Hadoop Sequence File,Sequence File 的Key是HLogKey對(duì)象,HLogKey中記錄了寫(xiě)入數(shù)據(jù)的歸屬信息,除了table和region名字外,同時(shí)還包括 sequence number和timestamp,timestamp是“寫(xiě)入時(shí)間”,sequence number的起始值為0,或者是最近一次存入文件系統(tǒng)中sequence number。

    HLog Sequece File的Value是HBase的KeyValue對(duì)象,即對(duì)應(yīng)HFile中的KeyValue,可參見(jiàn)上文描述。

    結(jié)束

    本文對(duì)HBase技術(shù)在功能和設(shè)計(jì)上進(jìn)行了大致的介紹,由于篇幅有限,本文沒(méi)有過(guò)多深入地描述HBase的一些細(xì)節(jié)技術(shù)。目前一淘的存儲(chǔ)系統(tǒng)就是基于HBase技術(shù)搭建的,后續(xù)將介紹“一淘分布式存儲(chǔ)系統(tǒng)”,通過(guò)實(shí)際案例來(lái)更多的介紹HBase應(yīng)用。

    posted on 2011-01-21 19:04 ivaneeo 閱讀(931) 評(píng)論(0)  編輯  收藏 所屬分類(lèi):
    主站蜘蛛池模板: 免费国产精品视频| 中文在线免费观看| 亚洲精品免费在线观看| 国产免费人人看大香伊| 亚洲欧洲日韩国产一区二区三区| 亚洲AV网一区二区三区| 真实国产乱子伦精品免费| 亚洲精品制服丝袜四区| 中文字幕久精品免费视频| 亚洲av无码一区二区乱子伦as| 免费永久看黄在线观看app| 男人的天堂网免费网站| 又粗又大又猛又爽免费视频| 中文在线免费视频| 久久国产色AV免费观看| 亚洲色大成网站WWW久久九九| 风间由美在线亚洲一区| 大陆一级毛片免费视频观看| 亚洲国产日韩在线一区| 中文字幕免费在线观看| 亚洲精品人成电影网| 久久久免费精品re6| 久久精品亚洲综合专区| 中文字幕日本人妻久久久免费| 亚洲日韩一页精品发布| 久久国产一片免费观看| 亚洲国产精品激情在线观看| 亚洲AV无码国产精品色| 国产免费AV片在线观看| 爱情岛论坛网亚洲品质自拍| 亚洲爆乳AAA无码专区| 最近免费中文字幕大全免费版视频| 亚洲日韩在线第一页| 亚洲国产综合自在线另类| 91精品免费国产高清在线| 日韩国产欧美亚洲v片| 亚洲高清国产AV拍精品青青草原| 美女视频黄是免费的网址| 曰批免费视频播放免费| 久久久无码精品亚洲日韩京东传媒| 在线免费不卡视频|