`
forchenyun
  • 浏览: 312650 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

HBase存储文件格式概述

阅读更多

概述

HBase是基于Bigtable论文的面向列的分布式存储系统,其存储设计是基于Memtable/SSTable的。其它如Cassandra都是采用的该设计。

整个存储分为两部分,一部分为内存中的MemStore(Memtable),另外一部分为磁盘(这里是HDFS)上的HFile(SSTable)。下面分别讲述两种类型的存储分别的实现:

MemStore中最重要的变量是:

volatile KeyValueSkipListSet kvset;

这里的KeyValueSkipListSet里面实际是这样的:

private final ConcurrentNavigableMap<KeyValue, KeyValue> delegatee;

换句话说,其实就是一个放内存的Map存放着kv

 

HFileHBase实际的文件存储格式,它是基于TFile的文件格式,替换了早期的MapFile,改进了性能。

然后HBase会进行控制,当MemStore写满了以后进行刷磁盘操作。

而HLog是HBase的日志格式实现,主要是在写入的时候进行write-ahead-log,主要为recovery而做。

HFile

HFileHBase中实际存数据的文件,为HBase提供高效快速的数据访问。它是基于HadoopTFile,模仿Google Bigtable 架构中的SSTable格式。之前的HadoopMapFiles已经被证明性能不能到达我们的期望。文件格式如下:


 

 

文件是变长的,唯一固定的块是File infoTrailer,如图所示,Trailer有指向其它块的指针,这些指针也写在了文件里,Index块记录了datameta块的偏移量,datameta块都是可选的。

块的大小是由表创建时的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的解释:

“最小的块大小。我们建议通常将其设置为8KB1MB之间,如果经常进行基于primary key的顺序访问,可以设置更大的块大小,但是这样会带来低效的随机访问效率(更多的数据需要被解压缩)。更小的块大小将带来更好的随机访问效率,但是会耗费更多的内存去维持索引,并且在创建的时候会比较慢,因为需要flush压缩流,这将导致一个FS I/O flush。由于内部的压缩codec的缓存,最小的块大小可以为20-30KB


 

 

 

上图是HFile中每个KeyValue的格式,和普通的key-value没有太大的区别。

 

HLog

源码中的实现类是HLog。每个HRegionServer会对应一个HLogHRegion在初始化的时候HRegionServer会将该HLog的实例作为构造函数传入其中。HLog的核心函数是其append()函数。

HLog中,会维持一个Sequence Number,是一个AtomicLong型,当一个Region启动的时候会从HFileMeta field里面读出当前的Sequence Number





如图所示,由于HLogRegion之间共享的,因此,log的顺序是不定的,这一点后面会提到。当一个HRegionServer崩溃掉后,HMaster会让HRegionServer重启的时候根据日志进行恢复。

当前的WAL使用的是Hadoop下的SequenceFile格式,其keyHLogKey实例,它包括以下内容:

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系列文章

  • 大小: 32.9 KB
  • 大小: 29.1 KB
  • 大小: 52.8 KB
23
0
分享到:
评论
4 楼 FiSheYe_fOru 2011-08-20  
虽然不知道楼主在说什么,但是隐隐的感觉楼主好厉害哦
3 楼 clarkht 2010-12-06  
画图很受用  其他的额看不懂 这个差据阿
2 楼 forchenyun 2010-11-29  
wujiazhao88 写道
顶沉架构, 写得很不错! 图片用神马画的说?

图片可以用visio画,关键是配色,可以关注一下larsgeorge,hbase欧洲布道者
1 楼 wujiazhao88 2010-11-29  
顶沉架构, 写得很不错! 图片用神马画的说?

相关推荐

    hdfs,hbase命令原理介绍

    这意味着 HBase 文件最终会被存储在 HDFS 上。 - **集成优势**:HBase 和 HDFS 紧密集成,使得 HBase 能够利用 HDFS 的高可用性和容错特性。 - **性能优化**:由于 HBase 和 HDFS 的紧密集成,HBase 可以充分利用 ...

    HBase概述——HBase的存储模型.pdf

    《HBase概述——HBase的存储模型》这篇文章深入解析了HBase的核心存储机制,即LSM树(Log-Structured Merge Tree)。LSM树是一种优化的存储结构,它旨在解决大数据场景下的高性能写入和读取需求。在HBase中,LSM树的...

    HBASE编程指南word版

    ### HBase权威指南知识点概述 #### 一、HBase简介及背景 - **定义**: HBase是一种分布式、可扩展的大规模列式存储系统,它基于Google的Bigtable论文设计实现,是Apache Hadoop生态系统中的重要组成部分。 - **应用...

    Hbase

    **HBase 概述** HBase 是一个分布式的、基于列族的开源数据库,它运行在 Apache Hadoop 文件系统(HDFS)之上。HBase 提供了对大规模数据集的实时读写访问,是大数据领域的重要组件。它设计用于处理PB级别的数据,...

    hbase安装与使用

    4. **配置 HBase 数据存储路径**:为了确保数据的安全性和持久性,需要修改 `conf/hbase-site.xml` 文件,设置 `hbase.rootdir` 属性值,指向期望的 HBase 数据存储路径。 ```xml &lt;name&gt;hbase.rootdir ...

    Hbase权威指南(HBase: The Definitive Guide)

    - **背景层**(Backdrop):HBase运行于Hadoop之上,利用Hadoop提供的分布式文件系统(HDFS)来存储数据。 - **表格、行、列与单元格**(Tables, Rows, Columns, and Cells):HBase的基本存储单位是表,表由多个...

    HBase开启审计日志

    日志文件将存储在HBase的日志目录下,具体的格式和布局也已经定义好。 ##### 3. 打开Security Audit Appender 在`log4j.properties`中还包含了开启Security Audit Appender的配置: - **相关配置**: ```...

    hbase指南 英文

    - **HFile**:HFile 是 HBase 中的数据文件格式,用于存储已经刷盘的数据。 #### 三、HBase 安装与配置 **3.1 安装前准备** - **安装 Java**:HBase 要求运行在 Java 环境下,因此首先需要安装 Java。 - **安装 ...

    HBase技术介绍.docx

    #### 一、HBase概述 **HBase**,全称为Hadoop Database,是一款构建在Hadoop之上、面向列的分布式数据库系统。它具备高可靠性、高性能和可扩展性等特点,能够在成本相对低廉的硬件设备上构建大规模的数据存储集群。...

    Hadoop+Hbase搭建云存储总结

    ### Hadoop+Hbase搭建云存储的关键知识点 #### 一、Hadoop文件系统特性与应用场景 **1. 容错性与成本效益** - **关键特性:** Hadoop文件系统(HDFS)的设计核心在于其对廉价硬件的兼容性和高度的容错能力。它...

    Hbase 官方中文文档

    HBase官方中文文档概述了Apache HBase TM的基本概念、配置方法、升级策略、shell使用、数据模型、架构设计、安全机制、API接口、性能调优以及故障排除等多方面的知识。HBase是一个开源的非关系型分布式数据库(NoSQL...

    Hbase与zookeeper文档

    【HBase概述】 HBase,全称为Hadoop Database,是一个基于Hadoop生态系统的分布式数据库,设计目标是为了处理大规模数据集。它提供了低延迟的数据访问,支持海量数据存储,并且是高度可扩展的。HBase的设计灵感来源...

    搭建HBase完全分布式数据库

    一、HBase数据库概述: HBase是Google BigTable的一种开源实现,与Hadoop生态系统紧密集成。它是一个分布式、可扩展、非关系型的数据库,能够处理大量稀疏数据集。HBase提供了实时查询数据的能力,支持数据的随机...

    HBase实战实例

    GISMaster是一款利用HBase存储和处理地理空间数据的应用,它结合了HBase的强大存储能力和GIS的地理位置分析功能,实现了对大规模地理信息的高效管理和查询。 三、GIS数据与HBase的融合 1. 地理坐标转换:GIS数据...

    Hadoop_and_Hbase_搭建_云存储

    【Hadoop 和 Hbase 搭建云存储概述】 Hadoop 是一个开源的分布式计算框架,主要用于处理和存储大规模数据。Hadoop 文件系统(HDFS)是其核心组件,它是一个分布式文件系统,旨在处理PB级别的数据。HDFS 的设计哲学...

    hbase2.5.6最新版本下载

    1. 分布式架构:HBase基于Google的Bigtable设计理念,构建于Hadoop之上,充分利用了HDFS(Hadoop分布式文件系统)的存储能力,为大规模数据提供高并发访问。 2. 列族存储:与传统关系型数据库不同,HBase采用列族...

    hbase-1.3.1-bin.zip

    1. **HBase概述** - HBase是一种NoSQL数据库,它基于谷歌的Bigtable模型设计,适用于非结构化和半结构化数据。 - 它是开源的,运行在Hadoop文件系统(HDFS)之上,提供高可靠性和高性能的数据存储。 2. **HBase...

Global site tag (gtag.js) - Google Analytics