`
forchenyun
  • 浏览: 310034 次
  • 性别: 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  
顶沉架构, 写得很不错! 图片用神马画的说?

相关推荐

    HBase.docx

    一、HBase的概述 5 1.hbase的特点 6 2.特殊概念 6 3.确定值 6 4.HBASE的架构 6 5.apache的下载地址 7 二、HBase安装部署与简单应用 7 一:下载安装 7 1.下载安装 7 2.开启hadoop与zookeeper 7 3.修改配置文件hbase-...

    Hbase入门详解

    1、hbase概述 1.1 hbase是什么 hbase是基于hdfs进行数据的分布式... hbase表中的数据可以有很多个列,后期它就是按照不同的列去存储数据,写入到不同的文件中。 面向列族进行存储数据。 4、稀疏 在hbase表中为null

    Hbase的应用场景、原理及架构分析

    本文来自于csdn,文章主要从HBase概述以及数据模型基本架构,简单的介绍Hbase了,希望对大家有帮助。HBase是一个构建在HDFS上的分布式列存储系统。HBase是ApacheHadoop生态系统中的重要一员,主要用于海量结构化数据...

    hive-hbase-generatehfiles

    这种模式提供了一种方法,用于获取已存储在Hive中的数据,将其导出为HFile,并从这些HFile批量加载HBase表。概述HFile生成功能已添加到。 它添加了以下属性,然后Hive HBaseStorageHandler可以利用这些属性。 hive....

    usps-ais-data-loader:USPS AIS 数据通过 Hadoop 加载到 MySql 或 HBase

    创建此框架是为了处理将此数据批量加载/更新为地址数据的结构化/半结构化数据存储(即 MySql 或 HBase)。 它使用 Spring 连接在一起并使用 Maven 构建。 一个关键包是“org.bitsofinfo.util.address.usps.ais”包...

    java8看不到源码-geowave:GeoWave在Accumulo、HBase、BigTable、Cassandra、Kudu、Redis

    ,以及直接文件系统支持) 向这些商店添加对地理对象和地理空间运算符的支持 为地理空间数据的分布式处理和分析提供 Map-Reduce 输入和输出格式 地理空间软件插件允许通过 OGC 标准服务共享和可视化各种键/值存储中...

    smarttherm-aws-hbase-spark:云部分

    智能恒温器-AWS-HBase-Spark 该存储库与博客文章一起。 这篇博客文章介绍了如何构建和编程您自己的智能恒温器。 该智能恒温器基于三个反馈回路。...包含的自述文件的“安装和设置”段落中介绍了运行HBase和创建所需

    某大数据平台开发及环境配置手册(知识研究或个人学习)

    2. 数据存储:将采集到的数据存储在分布式文件系统或数据库中,如HDFS、HBase、MySQL等。 3. 数据处理:对存储在大数据平台上的数据进行清洗、转换、聚合等操作,生成可供分析的数据。 4. 数据分析:通过各种算法和...

    对象存储 V1.0 设计1

    对象存储服务V1.0版本设计目录 第一章 概述 1 1.1 需求 1 1.2 指标 2 1.3 功能描述 2 1.3.1 文件管理 2 1.3.2

    2017最新大数据架构师精英课程

    110_hbase概述 111_zk架构-集群搭建-容灾演练avi 112_zk API-观察者-临时节点-序列节点-leader选举 113_hadoop namenode HA自动容灾" X3 `' ^/ U+ u+ U" F: } b 114_hadoop RM HA自动容灾 115_hbase集群搭建 116_...

    Spark分布式内存计算框架视频教程

    手把手视频详细讲解项目开发全过程,需要的小...5.实时增量存储(存储HBase和Elasticsearch) 6.实时订单报表(Kafka-StructuredStreaming-Redis) 7.实时应用性能调优(数据本地性、反压机制、动态资源和日志管理)

    word源码java-hadoop-v1:hadoop入门

    存储:文件存储 ==&gt; 分布式存储 计算:单机 ==&gt; 分布式计算 网络:万兆 DB :RDBMS ==&gt; NoSQL(HBase/Redis。。。) 2、商业驱动 大数据现存的模式 手握大数据,没有大数据思维 没有大数据、有大数据思维 既有大数据...

    AWS 白皮书 — 产品.zip

    Amazon DynamoDB与 Apache HBase for NOSQL的使用对比pdf Amazon Elastic File System:在不同吞吐量和性能模式之间选择pdf Amazon Virtual Private Cloud网络连接选项pdf 云迁移实践指南:将服务迁移至 AWS. pdf 从...

    云计算第二版

    2.1 Google文件系统GFS 17 2.1.1 系统架构 18 2.1.2 容错机制 20 2.1.3 系统管理技术 20 2.2 分布式数据处理MapReduce 21 2.2.1 产生背景 21 2.2.2 编程模型 22 2.2.3 实现机制 22 2.2.4 案例分析 24 2.3 分布式锁...

Global site tag (gtag.js) - Google Analytics