亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

HBase存儲文件格式概述

系統 3974 0

概述

HBase是基于Bigtable論文的面向列的分布式存儲系統,其存儲設計是基于Memtable/SSTable的。 其它如 Cassandra 都是采用的該設計。

整個存儲分為兩部分,一部分為內存中的 MemStore(Memtable) ,另外一部分為磁盤 ( 這里是 HDFS) 上的 HFile(SSTable) 。下面分別講述兩種類型的存儲分別的實現:

MemStore 中最重要的變量是:

    volatile KeyValueSkipListSet kvset;
  

這里的 KeyValueSkipListSet 里面實際是這樣的:

    private final ConcurrentNavigableMap<KeyValue, KeyValue> delegatee;
  

換句話說,其實就是一個放內存的 Map 存放著 kv

?

HFile HBase 實際的文件存儲格式,它是基于 TFile 的文件格式,替換了早期的 MapFile ,改進了性能。

然后 HBase 會進行控制,當 MemStore 寫滿了以后進行刷磁盤操作。

而HLog是HBase的日志格式實現,主要是在寫入的時候進行write-ahead-log,主要為recovery而做。

HFile

HFile HBase 中實際存數據的文件,為 HBase 提供高效快速的數據訪問。它是基于 Hadoop TFile ,模仿 Google Bigtable 架構中的 SSTable 格式。之前的 Hadoop MapFiles 已經被證明性能不能到達我們的期望。文件格式如下:


HBase存儲文件格式概述

?

?

文件是變長的,唯一固定的塊是 File info Trailer ,如圖所示, Trailer 有指向其它塊的指針,這些指針也寫在了文件里, Index 塊記錄了 data meta 塊的偏移量, data meta 塊都是可選的。

塊的大小是由表創建時的 HColumnDescriptor 指定的,如下是 master web interface 上看到的一個例子:

{NAME => 'docs', FAMILIES => [{NAME => 'cache', COMPRESSION => 'NONE', VERSIONS => '3', TTL => '2147483647', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'false'}, {NAME => 'contents', COMPRESSION => 'NONE', VERSIONS => '3', TTL => '2147483647', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'false'}, ...

默認的大小是 64KB ,下面是一段關于 HFile 的解釋:

“最小的塊大小。我們建議通常將其設置為 8KB 1MB 之間,如果經常進行基于 primary key 的順序訪問,可以設置更大的塊大小,但是這樣會帶來低效的隨機訪問效率(更多的數據需要被解壓縮)。更小的塊大小將帶來更好的隨機訪問效率,但是會耗費更多的內存去維持索引,并且在創建的時候會比較慢,因為需要 flush 壓縮流,這將導致一個 FS I/O flush 。由于內部的壓縮 codec 的緩存,最小的塊大小可以為 20-30KB


?

?

?

上圖是 HFile 中每個 KeyValue 的格式,和普通的 key-value 沒有太大的區別。

?

HLog

源碼中的實現類是 HLog 。每個 HRegionServer 會對應一個 HLog HRegion 在初始化的時候 HRegionServer 會將該 HLog 的實例作為構造函數傳入其中。 HLog 的核心函數是其 append() 函數。

HLog 中,會維持一個 Sequence Number ,是一個 AtomicLong 型,當一個 Region 啟動的時候會從 HFile Meta field 里面讀出當前的 Sequence Number


HBase存儲文件格式概述


如圖所示,由于 HLog Region 之間共享的,因此, log 的順序是不定的,這一點后面會提到。當一個 HRegionServer 崩潰掉后, HMaster 會讓 HRegionServer 重啟的時候根據日志進行恢復。

當前的 WAL 使用的是 Hadoop 下的 SequenceFile 格式,其 key HLogKey 實例,它包括以下內容:

    private byte [] encodedRegionName;

private byte [] tablename;

private long logSeqNum;

// Time at which this edit was written.

private long writeTime;

private byte clusterId;

  

?

由于操作系統處理批量的數據要塊過單個單個的處理,因此,需要進行 flush 日志。 LogFlusher 實現了該功能,它調用了 HLog.optionalSync() ,它將檢查是否到了 hbase.regionserver.optionallogflushinterval ,默認是 10 秒。

???????? 日志的大小會有一個限制,這是用 hbase.regionserver.logroll.period 參數控制的,默認是 1 個小時。到點以后 LogRoller 會觸發操作,檢查當前的 Sequence Number ,看小于它的所有日志是否完整。

?

參考文獻

http://www.larsgeorge.com/

主要參考自larsgeorge的hbase系列文章

HBase存儲文件格式概述


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精品久久国产精品99 | 中文字幕在线精品视频万部 | 婷婷免费高清视频在线观看 | 香蕉午夜| 国产成人毛片亚洲精品不卡 | 国产男女在线观看 | 夜夜操天天操 | 欧美xxxxx性另类 | 国产区视频在线 | 婷婷色网站 | 91精品国产免费自在线观看 | 97人人看| 久久国产精品免费一区二区三区 | 天天鲁天天爱天天鲁天天 | 天天色天天干天天射 | 日本一区二区免费视频 | 福利毛片| 美女一区二区三区 | 婷婷综合色伊人阁 | 美女黄色免费在线观看 | 国产精品亚洲精品久久成人 | 国产nv精品你懂得 | 九九99| 三及毛片 | 人人骚 | 四虎在线观看网址 | 成年黄网站免费大全毛片 | 深夜福利在线看 | 国产一区二区免费 | 中文精品久久久久国产网址 | 国产精品香蕉在线观看首页 | 四虎精品成人a在线观看 | 九九精品久久久久久久久 | 桃花视频www | 日韩视频区| 人成午夜视频 | 久久国产精品自在自线 | 国产区视频在线观看 | 国产一国产一级毛片视频在线 | 99视频国产精品 | 久久国产加勒比精品无码 |