欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

HBase存儲文件格式概述

系統 4169 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條評論
主站蜘蛛池模板: 亚洲一区国产二区 | 国产精品1区2区 | 青草国产超碰人人添人人碱 | 免费的黄网站男人的天堂 | 香蕉久久夜色精品国产小优 | 国产欧美精品午夜在线播放 | 久久久久国产一区二区三区 | 日韩精品在线一区 | 99久久精品费精品国产一区二区 | 一级毛片一级毛片一级毛片一级毛片 | 久草视频精品 | A片扒开双腿猛进入免费 | 一区二区三区四区精品 | 久久综合视频网站 | 日韩字幕无线乱码 | 国产精品免费观看 | 中国一级毛片视频 | writeas桌下口| 91在线中文| 欧美日韩一区二区三区在线观看 | 那一个欧美一级毛片 | 色综合天天综合网国产成人网 | 999精品嫩草久久久久久99 | 九九热在线免费观看 | 国产色| 啪啪小视频网站 | bt日韩| 91视频精选 | 成年在线视频免费视频观看 | 黄色精品 | 91免费版在线观看 | 国产精品亚洲精品青青青 | 亚洲一区二区三区在线 | 日韩精品久久久久久 | 久久久一区二区 | a毛片毛片av永久免费 | 国产在线观 | 一区二区三区高清在线观看 | 国产馆精品推荐在线观看 | 亚洲国产日韩欧美综合久久 | 成人黄色免费在线观看 |