概述
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已经被证明性能不能到达我们的期望。文件格式如下:
文件是变长的,唯一固定的块是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实例,它包括以下内容:
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
分享到:
相关推荐
这意味着 HBase 文件最终会被存储在 HDFS 上。 - **集成优势**:HBase 和 HDFS 紧密集成,使得 HBase 能够利用 HDFS 的高可用性和容错特性。 - **性能优化**:由于 HBase 和 HDFS 的紧密集成,HBase 可以充分利用 ...
《HBase概述——HBase的存储模型》这篇文章深入解析了HBase的核心存储机制,即LSM树(Log-Structured Merge Tree)。LSM树是一种优化的存储结构,它旨在解决大数据场景下的高性能写入和读取需求。在HBase中,LSM树的...
### HBase权威指南知识点概述 #### 一、HBase简介及背景 - **定义**: HBase是一种分布式、可扩展的大规模列式存储系统,它基于Google的Bigtable论文设计实现,是Apache Hadoop生态系统中的重要组成部分。 - **应用...
**HBase 概述** HBase 是一个分布式的、基于列族的开源数据库,它运行在 Apache Hadoop 文件系统(HDFS)之上。HBase 提供了对大规模数据集的实时读写访问,是大数据领域的重要组件。它设计用于处理PB级别的数据,...
4. **配置 HBase 数据存储路径**:为了确保数据的安全性和持久性,需要修改 `conf/hbase-site.xml` 文件,设置 `hbase.rootdir` 属性值,指向期望的 HBase 数据存储路径。 ```xml <name>hbase.rootdir ...
- **背景层**(Backdrop):HBase运行于Hadoop之上,利用Hadoop提供的分布式文件系统(HDFS)来存储数据。 - **表格、行、列与单元格**(Tables, Rows, Columns, and Cells):HBase的基本存储单位是表,表由多个...
日志文件将存储在HBase的日志目录下,具体的格式和布局也已经定义好。 ##### 3. 打开Security Audit Appender 在`log4j.properties`中还包含了开启Security Audit Appender的配置: - **相关配置**: ```...
- **HFile**:HFile 是 HBase 中的数据文件格式,用于存储已经刷盘的数据。 #### 三、HBase 安装与配置 **3.1 安装前准备** - **安装 Java**:HBase 要求运行在 Java 环境下,因此首先需要安装 Java。 - **安装 ...
#### 一、HBase概述 **HBase**,全称为Hadoop Database,是一款构建在Hadoop之上、面向列的分布式数据库系统。它具备高可靠性、高性能和可扩展性等特点,能够在成本相对低廉的硬件设备上构建大规模的数据存储集群。...
### Hadoop+Hbase搭建云存储的关键知识点 #### 一、Hadoop文件系统特性与应用场景 **1. 容错性与成本效益** - **关键特性:** Hadoop文件系统(HDFS)的设计核心在于其对廉价硬件的兼容性和高度的容错能力。它...
HBase官方中文文档概述了Apache HBase TM的基本概念、配置方法、升级策略、shell使用、数据模型、架构设计、安全机制、API接口、性能调优以及故障排除等多方面的知识。HBase是一个开源的非关系型分布式数据库(NoSQL...
【HBase概述】 HBase,全称为Hadoop Database,是一个基于Hadoop生态系统的分布式数据库,设计目标是为了处理大规模数据集。它提供了低延迟的数据访问,支持海量数据存储,并且是高度可扩展的。HBase的设计灵感来源...
一、HBase数据库概述: HBase是Google BigTable的一种开源实现,与Hadoop生态系统紧密集成。它是一个分布式、可扩展、非关系型的数据库,能够处理大量稀疏数据集。HBase提供了实时查询数据的能力,支持数据的随机...
GISMaster是一款利用HBase存储和处理地理空间数据的应用,它结合了HBase的强大存储能力和GIS的地理位置分析功能,实现了对大规模地理信息的高效管理和查询。 三、GIS数据与HBase的融合 1. 地理坐标转换:GIS数据...
【Hadoop 和 Hbase 搭建云存储概述】 Hadoop 是一个开源的分布式计算框架,主要用于处理和存储大规模数据。Hadoop 文件系统(HDFS)是其核心组件,它是一个分布式文件系统,旨在处理PB级别的数据。HDFS 的设计哲学...
1. 分布式架构:HBase基于Google的Bigtable设计理念,构建于Hadoop之上,充分利用了HDFS(Hadoop分布式文件系统)的存储能力,为大规模数据提供高并发访问。 2. 列族存储:与传统关系型数据库不同,HBase采用列族...
1. **HBase概述** - HBase是一种NoSQL数据库,它基于谷歌的Bigtable模型设计,适用于非结构化和半结构化数据。 - 它是开源的,运行在Hadoop文件系统(HDFS)之上,提供高可靠性和高性能的数据存储。 2. **HBase...