HBase存储文件格式概述.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
HBase存储文件格式概述.doc

 HYPERLINK /blog/828549 HBase存储文件格式概述 概述 HBase是基于Bigtable论文的面向列的分布式存储系统,其存储设计是基于Memtable/SSTable的。其它如Cassandra都是采用的该设计。 整个存储分为两部分,一部分为内存中的MemStore(Memtable),另外一部分为磁盘(这里是HDFS)上的HFile(SSTable)。下面分别讲述两种类型的存储分别的实现: MemStore中最重要的变量是: Java代码 volatile?KeyValueSkipListSet?kvset;?? volatile KeyValueSkipListSet kvset; 这里的KeyValueSkipListSet里面实际是这样的: Java代码 private?final?ConcurrentNavigableMapKeyValue,?KeyValue?delegatee;?? private final ConcurrentNavigableMapKeyValue, KeyValue delegatee; 换句话说,其实就是一个放内存的Map存放着kv。 ? HFile是HBase实际的文件存储格式,它是基于 HYPERLINK /jira/browse/HADOOP-3315 TFile的文件格式,替换了??期的MapFile,改进了性能。 然后HBase会进行控制,当MemStore写满了以后进行刷磁盘操作。 而HLog是HBase的日志格式实现,主要是在写入的时候进行write-ahead-log,主要为recovery而做。 HFile HFile是HBase中实际存数据的文件,为HBase提供高效快速的数据访问。它是基于Hadoop的TFile,模仿Google Bigtable 架构中的SSTable格式。之前的Hadoop的MapFiles已经被证明性能不能到达我们的期望。文件格式如下: ? ? 文件是变长的,唯一固定的块是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。 如图所示,由于HLog是Region之间共享的,因此,log的顺序是不定的,这一点后面会提到。当一个HRegionServer崩溃掉后,HMaster会让HRegionServer重启的时候根据日志进行恢复。 当前的WAL使用的是Hadoop下的SequenceFile格式,其key是HLogKey实例,它包括以下内容: Java代码 private?byt

文档评论(0)

thl1006 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档