日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hbase物理存储

發(fā)布時(shí)間:2024/1/17 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hbase物理存储 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

1、整體結(jié)構(gòu)

  • Table中的所有行都按照row key的字典序排列。

  • Table 在行的方向上分割為多個(gè)Hregion。

  • region按大小分割的(默認(rèn)10G),每個(gè)表一開始只有一個(gè)region,隨著數(shù)據(jù)不斷插入表,region不斷增大,當(dāng)增大到一個(gè)閥值的時(shí)候,Hregion就會(huì)等分會(huì)兩個(gè)新的Hregion。當(dāng)table中的行不斷增多,就會(huì)有越來越多的Hregion。

  • Hregion是Hbase中分布式存儲(chǔ)和負(fù)載均衡的最小單元。最小單元就表示不同的Hregion可以分布在不同的HRegion server上。但一個(gè)Hregion是不會(huì)拆分到多個(gè)regionserver上的。

  • HRegion雖然是負(fù)載均衡的最小單元,但并不是物理存儲(chǔ)的最小單元。?
    事實(shí)上,HRegion由一個(gè)或者多個(gè)Store組成,每個(gè)store保存一個(gè)column family。?
    每個(gè)Strore又由一個(gè)memStore和0至多個(gè)StoreFile組成。如上圖

  • 2、STORE FILE & HFILE結(jié)構(gòu)

    StoreFile以HFile格式保存在HDFS上。

    附:HFile的格式為:?

    首先HFile文件是不定長的,長度固定的只有其中的兩塊: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í)候通過參數(shù)指定,大號的Block有利于順序Scan,小號Block利于隨機(jī)查詢。 每個(gè)Data塊除了開頭的Magic以外就是一個(gè)個(gè)KeyValue對拼接而成, Magic內(nèi)容就是一些隨機(jī)數(shù)字,目的是防止數(shù)據(jù)損壞。

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

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

    HFile分為六個(gè)部分:

    • Data Block 段–保存表中的數(shù)據(jù),這部分可以被壓縮
    • Meta Block 段 (可選的)–保存用戶自定義的kv對,可以被壓縮。
    • File Info 段–Hfile的元信息,不被壓縮,用戶也可以在這一部分添加自己的元信息。
    • Data Block Index 段–Data Block的索引。每條索引的key是被索引的block的第一條記錄的key。
    • Meta Block Index段 (可選的)–Meta Block的索引。
    • Trailer–這一段是定長的。保存了每一段的偏移量,讀取一個(gè)HFile時(shí),會(huì)首先 讀取Trailer,Trailer保存了每個(gè)段的起始位置(段的Magic Number用來做安全check),然后,DataBlock Index會(huì)被讀取到內(nèi)存中,這樣,當(dāng)檢索某個(gè)key時(shí),不需要掃描整個(gè)HFile,而只需從內(nèi)存中找到key所在的block,通過一次磁盤io將整個(gè) block讀取到內(nèi)存中,再找到需要的key。DataBlock Index采用LRU機(jī)制淘汰。

    HFile的Data Block,Meta Block通常采用壓縮方式存儲(chǔ),壓縮之后可以大大減少網(wǎng)絡(luò)IO和磁盤IO,隨之而來的開銷當(dāng)然是需要花費(fèi)cpu進(jìn)行壓縮和解壓縮。?
    目標(biāo)Hfile的壓縮支持兩種方式:Gzip,Lzo。

    3、Memstore與storefile

    一個(gè)region由多個(gè)store組成,每個(gè)store包含一個(gè)列族的所有數(shù)據(jù)。?
    Store包括位于內(nèi)存的memstore和位于硬盤的storefile。?
    寫操作先寫入memstore,當(dāng)memstore中的數(shù)據(jù)量達(dá)到某個(gè)閾值,Hregionserver啟動(dòng)flashcache進(jìn)程寫入storefile,每次寫入形成單獨(dú)一個(gè)storefile。?
    當(dāng)storefile大小超過一定閾值后,會(huì)把當(dāng)前的region分割成兩個(gè),并由Hmaster分配給相應(yīng)的region服務(wù)器,實(shí)現(xiàn)負(fù)載均衡。?
    客戶端檢索數(shù)據(jù)時(shí),先在memstore找,找不到再找storefile。

    4、HLog(WAL log)

    WAL 意為Write ahead log(http://en.wikipedia.org/wiki/Write-ahead_logging),該機(jī)制用于數(shù)據(jù)的容錯(cuò)和恢復(fù),Hlog記錄數(shù)據(jù)的所有變更,一旦數(shù)據(jù)修改,就可以從log中進(jìn)行恢復(fù)。

    每個(gè)HRegionServer中都有一個(gè)HLog對象,HLog是一個(gè)實(shí)現(xiàn)Write Ahead Log的類,在每次用戶操作寫入MemStore的同時(shí),也會(huì)寫一份數(shù)據(jù)到HLog文件中(HLog文件格式見后續(xù)),HLog文件定期會(huì)滾動(dòng)出新的,并刪除舊的文件(已持久化到StoreFile中的數(shù)據(jù))。當(dāng)HRegionServer意外終止后,HMaster會(huì)通過Zookeeper感知到,HMaster首先會(huì)處理遺留的 HLog文件,將其中不同Region的Log數(shù)據(jù)進(jìn)行拆分,分別放到相應(yīng)region的目錄下,然后再將失效的region重新分配,領(lǐng)取到這些region的HRegionServer在Load Region的過程中,會(huì)發(fā)現(xiàn)有歷史HLog需要處理,因此會(huì)Replay HLog中的數(shù)據(jù)到MemStore中,然后flush到StoreFiles,完成數(shù)據(jù)恢復(fù)。

    HLog文件就是一個(gè)普通的Hadoop Sequence File:

    • HLog Sequence File 的Key是HLogKey對象,HLogKey中記錄了寫入數(shù)據(jù)的歸屬信息,除了table和region名字外,同時(shí)還包括 sequence number和timestamp,timestamp是”寫入時(shí)間”,sequence number的起始值為0,或者是最近一次存入文件系統(tǒng)中sequence number。

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

    總結(jié)

    以上是生活随笔為你收集整理的Hbase物理存储的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。