一、 Hbase存储框架
图1 Hbase存储架构图
1、 结构
HBase中的每张表都通过行键按照一定的范围被分割成多个子表(HRegion),默认一个HRegion超过256M就要被分割成两个,由HRegionServer管理,管理哪些HRegion由HMaster分配。
HRegionServer存取一个子表时,会创建一个HRegion对象,然后对表的每个列族(Column Family)创建一个Store实例,每个Store都会有0个或多个StoreFile与之对应,每个StoreFile都会对应一个HFile, HFile就是实际的存储文件。因此,一个HRegion有多少个列族就有多少个Store。
另外,每个HRegion还拥有一个MemStore实例。
(发现上图中一个错误,一个HRegionServer只对应一个HLog,也就是说同个HRegionServer中的HRegion共享一个HLog)
2、 流程
a) Client发起了一个HTable.put(Put)请求给HRegionServer
b) HRegionServer会将请求匹配到某个具体的HRegion上面
c) 决定是否写WAL log。WAL log文件是一个标准的Hadoop SequenceFile,文件中存储了HLogKey,这些Keys包含了和实际数据对应的序列号,主要用于崩溃恢复。
d) Put数据保存到MemStore中,同时检查MemStore状态,如果满了,则触发Flush to Disk请求。
e) HRegionServer处理Flush to Disk的请求,将数据写成HFile文件并存到HDFS上,并且存储最后写入的数据序列号,这样就可以知道哪些数据已经存入了永久存储的HDFS中。
二、 Hbase存储格式
HBase是基于BigTable的面向列的分布式存储系统,其存储设计是基于Memtable / SSTable设计的,主要分为两部分,一部分为内存中的MemStore (Memtable),另外一部分为磁盘(这里是HDFS)上的HFile (SSTable)。还有就是存储WAL的log,主要实现类为HLog.
MemStore
MemStore源码:private final ConcurrentNavigableMap<KeyValue, KeyValue> delegatee;
本质上MemStore就是一个内存里放着一个保存KEY/VALUE的MAP,当MemStore(默认64MB)写满之后,会开始刷磁盘操作。
HFile结构
图2 HFile结构图
HFile是基于HADOOP TFile的,如图2,文件长度为变长,仅FILE INFO/Trailer定长,Trailer中有指针指向其他数据块的起始点。Index数据块记录了每个Data块和Meta块的起始点。Data块和Meta块都是可有可无的,但对于大多数HFile,你都可以看到Data块。
Data块中,除了头部的MAGIC之外,就是一对对KEY/VALUE对,结构如下:
图3 Data块 KEY/VALUE对结构
关于文件块的大小:
默认块大小64KB,在创建表时可以通过HColumnDescriptor设定每个Family的块大小。
大数据块:适合顺序查找,不适合随机查找。
小数据块,适合随机查找,需要更多内存保存Data Index,创建文件慢,更多的flush操作
图4 HFile总体结构图
当key的value大小超过BLOCK SIZE时,那么查找这些value就无法通过索引去快速查找,而是需要通过遍历进行。
另外,针对目前针对现有HFile的两个主要缺陷:
a) 暂用过多内存
b) 启动加载时间缓慢
提出了HFile Version2设计:
https://issues.apache.org/jira/secure/attachment/12478329/hfile_format_v2_design_draft_0.1.pdf
HLog
HLog是HBase的日志类,在写入时进行write-ahead-log(WAL),主要为数据恢复。每个HRegionServer会对应一个HLog实例,HRegion在初始化的时候HRegionServer会将该HLog的实例作为构造函数传入其中。HLog的核心函数是其append()函数。
HLog File 是一个Sequence File,只能在文件的末尾添加内容。除了文件头以外,HLog File 由一条条HLog.Entry构成。Entry是HLog的基本组成部分,也是Read /Write的基本单位。
Entry由两个部分组成:HLogKey和WALEdit。
HLogKey主要包含以下几个变量:
private byte [] encodedRegionName;
private byte [] tablename;
private long logSeqNum; // Time at which this edit was written.
private long writeTime;
private byte clusterId;
logSeqNum是HLog 类的一个属性,AtomicLong类型。每写一个Entry就自动加1. 由于RS和HLog是一一对应的,所以logSeqNum是在RegionServer范围内的自增量。
WALEdit的主体是一个KeyValue的List。在旧的版本中WALEdit只包含一个KeyValue,然而新的版本可以包含多个KeyValue,而且这些KeyValue可以拥有不同的RowKey。
图5 HLog文件结构图
三、 HBase 预写日志 (WAL)
(见下一篇blog)
四、 HBase 索引
目前的HBase新版本没有实现二级索引,以前hbase的版本有过二级索引,实现时也是写写数据再写索引,索引放到后台队列中异步地写。实现最终一致。
HBase移走这块代码的一个原因就是索引到底落后数据多少时间是不确定的,特别是在异常的情况下。这样就导致在清理HLog时无法确定一个HLog是否真正全部写入数据了。
关于HBase二级索引的一篇讨论文章,参考:http://rdc.taobao.com/team/jm/archives/951
问题:为什么一个RegionServer 对应一个HLog,而不是一个region对应于一个log file?
BigTable论文答:如果每一个”tablet”(对应于HBase的region)都提交一个日志文件,会需要并发写入大量的文件到GFS(对应HDFS),这样,根据每个GFS server所依赖的文件系统,写入不同的日志文件会造成大量的磁盘操作。
HBase依照这样的原则。在日志被回滚和安全删除之前,将会有大量的文件。如果改成一个region对应于一个文件,将会不好扩展,会引发问题。
转载请注明源:
分享到:
相关推荐
深入学习HBase原理的资料整理通常会涵盖以下主题: - HBase的数据模型和数据模型与Bigtable的对比 - HBase的读写流程,包括Get和Put操作的实现细节 - Region的分裂与合并机制 - HBase的索引和查询优化策略 - HBase...
在HBase的架构中,HLog(Write-Ahead Log)扮演着至关重要的角色。HLog是一个持久化的日志,用于确保数据的一致性和可靠性。当客户端向RegionServer提交更新操作时,HLog会记录这些操作,确保即使在RegionServer故障...
【HBase基本概念】 HBase,全称为Hadoop Database,是一种分布式的、可扩展的、版本化的、面向列的Java实现的开源键值数据库。它建立在Apache Hadoop...理解和熟练运用HBase,对于大数据开发者和架构师来说至关重要。
HBase官方中文文档概述了Apache HBase TM的基本概念、配置方法、升级策略、shell使用、数据模型、架构设计、安全机制、API接口、性能调优以及故障排除等多方面的知识。HBase是一个开源的非关系型分布式数据库(NoSQL...
从描述中可以得知,这份文档是由某开发人员在其从事开发工作期间整理的所有关于HBase的开发知识,内容全面,适合阅读,目的是为了向他人提供学习HBase的资料。并且文档还提到了标签“学习HBase”,进一步明确了文档...
以上是基于HBase官方文档0.97版的综合整理,涵盖了HBase的核心概念、架构、数据模型、配置管理、性能优化以及安全性等多个方面。通过深入理解这些知识点,可以帮助开发者更好地掌握HBase的应用场景和技术细节。
- **物理视图**:详细介绍 HBase 表在物理存储上的组织方式。 - **表**:解释 HBase 中“表”的概念及其特点。 - **行**:介绍 HBase 中行键(row key)的概念及其设计原则。 - **列族**:说明 HBase 中列族(column ...
- **HBase**:HBase是一种分布式、版本化的列式存储系统,基于Google Bigtable论文中的概念开发,作为Apache Hadoop生态系统的一部分。它利用Hadoop HDFS作为其文件系统,并依赖于ZooKeeper进行管理和协调。 - **...
- **介绍**:HBase是建立在Apache Hadoop之上的分布式、版本化的列存储数据库,支持高并发读写操作。 - **快速开始**:指导用户如何快速搭建HBase环境。 - **配置**: - **Java环境配置**:确保Java版本兼容HBase的...
- **HBase架构**:深入理解HBase的架构组成,包括Master节点和RegionServer节点的功能和交互机制。 - **HBase数据模型**:学习HBase的数据模型,了解表、行键、列族等基本概念以及它们之间的关系。 - **HBase读写...
《HBase权威指南》是一本深入探讨HBase数据库系统的核心概念、架构原理及实践操作的专著,旨在为读者提供全面而深入的理解和应用指导。本书由王振飞整理,内容丰富,覆盖了从HBase的基本概念到高级配置的各个层面。 ...
文档中提到的背景是在每天大约40万个应用的压力下,需要将大约2亿的日志文件上传到HDFS,对NameNode(NN)造成极大压力,因此考虑将日志文件转移到HBase存储。 #### 3. 大查询隔离(Large Query Isolation) 在...
- **中文版文档**: 这份文档是针对Apache HBase的官方文档进行中文翻译整理的版本,旨在为中文用户提供更方便的学习资料。 - **版权信息**: 版权归2012年Apache Software Foundation所有,该版本为中文翻译版。 - **...
文档提及这些技术,表示架构师面试中可能会涉及到分布式系统架构、高性能网络编程、分布式协调、消息队列、分布式存储和NoSQL数据库等高级主题。 7. 设计模式和负载均衡。设计模式是解决软件设计中常见问题的一套被...
360的HBase集群中存储了大量数据,包含20万亿条记录,分布在超过3000台机器上,集群中包含67万个Region,存储的数据总量达到45PB,日增量和日读量分别为350TB和4PB+,而单机群最大记录数更是高达1000亿,Region数40...
同时,数据分层存储是大数据管理的核心,通常采用混合存储架构,结合高速缓存、关系型数据库(如MySQL)和非关系型数据库(如HBase、MongoDB)以及云存储服务(如AWS S3、阿里云OSS)来满足不同场景的需求。...
这份技能整理涵盖了大数据架构师所需掌握的核心技术和工具,包括但不限于大数据处理平台、分布式存储、资源调度、机器学习、数据分析与数据仓库、消息队列、流式计算、编程语言、算法以及云计算服务。 1. 大数据...
"架构面试专题汇总.zip"这个压缩包文件,正如其名,是针对Java架构面试精心整理的一系列资源,旨在帮助求职者全面了解并掌握Java体系中的主流框架及面试热点。下面,我们将深入探讨其中的关键知识点。 首先,Java...
4. **系统架构** - 该项目采用了分层的架构设计,包括数据获取层(负责爬取URL)、数据处理层(使用HBase进行存储)和协调控制层(由Redis和ZooKeeper组成)。这种设计使得系统可扩展性强,易于维护和升级。 5. **...