学习
实践
活动
专区
工具
TVP
写文章
专栏首页魏晓蕾的专栏【HBase】HBase的物理模型及数据存储

【HBase】HBase的物理模型及数据存储

1、HBase物理模型

(1)Table在行的方向上分割为多个Region。 (2)Table中的所有行都按照row key的字典序排列,根据rowkey存储在不同的Region上。 (3)Region是按大小分割的,每个表开始只有一个region,随着数据增多,region不断增大,当增大到一个阈值的时候,region就会等分成两个新的region,之后会有越来越多的region。 (4)Region是HBase中分布式存储和负载均衡的最小单元。不同Region分布到不同RegionServer上。移动的时候是移动一个Region,进行不同RegionServer之间的负载均衡。 (5)Region虽然是分布式存储的最小单元,但并不是存储的最小单元,存储的最小单元是Cell。Region由一个或者多个Store组成,每个store保存一个columns family列簇。每个store又由一个memStore和0至多个StoreFile组成。memStore存储在内存中,StoreFile存储在HDFS上。memStore是内存中划分的一个区间,StoreFile是底层存储在HDFS上的文件。 (6)每个column family存储在HDFS上的一个单独文件中。Key和Version number在每个column family中均有一份。空值不会被保存。

2、HBase体系架构

3、HBase数据存储

(1)HBase中的所有数据文件都存储在Hadoop HDFS文件系统上,主要包括上述提出的两种文件类型: 1)HFile:HBase中KeyValue数据的存储格式,HFile是Hadoop的二进制格式文件,实际上StoreFile就是对HFile做了轻量级包装,进行数据的存储。 2)HLog File,HBase中WAL(Write Ahead Log) 的存储格式,物理上是Hadoop的Sequence File。 (2)HRegionServer内部管理了一系列HRegion对象,每个HRegion对应了table中的一个region,HRegion中由多 个HStore组成。每个HStore对应了Table中的一个column family的存储,可以看出每个columnfamily其实就是一个集中的存储单元,因此最好将具备共同IO特性的column放在一个column family中,这样最高效。 (3)HStore存储是HBase存储的核心,由两部分组成,一部分是MemStore,一部分是StoreFile。MemStore是 Sorted Memory Buffer,用户写入的数据首先会放入MemStore,当MemStore满了以后会Flush成一个StoreFile(底层实现是HFile)。用户可以手动flush,将内存中的数据直接溢写到磁盘上,进行手动干预。 (4)Client写入 -> 存入MemStore,一直到MemStore满 -> Flush成一个StoreFile,直至增长到一定阈值 -> 出发Compact合并操作 -> 多个StoreFile合并成一个StoreFile,同时进行版本合并和数据删除 -> 当StoreFiles Compact后,逐步形成越来越大的StoreFile -> 单个StoreFile大小超过一定阈值后,触发Split操作,把当前Region Split成2个Region,Region会下线,新Split出的2个孩子Region会被HMaster分配到相应的HRegionServer上,使得原先1个Region的压力得以分流到2个Region上。 (5)HBase只是增加数据,有所得更新和删除操作,都是在Compact阶段做的,所以,用户写操作只需要进入到内存即可立即返回,从而保证I/O高性能。 (6)WAL意为Write ahead log,类似Mysql中的binlog,用来做灾难恢复。在写数据时会先往Hlog写一份,然后往内存写,以避免内存丢失数据。可以从日志文件中恢复Hlog记录数据的所有变更,一旦数据修改,就可以从log中进行恢复。每个HRegionServer维护一个HLog,而不是每个HRegion一个。这样不同region(来自不同table)的日志会混在一起,这样做的目的是不断追加单个文件相对于同时写多个文件而言,可以减少磁盘寻址次数,因此可以提高对table的写性能。带来的麻烦是,如果一台HRegionServer下线,为了恢复其上的region,需要将HRegionServer上的log进行拆分,然后分发到其它HRegionServer上进行恢复。

4、ZooKeeper中的操作

hbase:namespace表存储hbase中所有namespace的信息,hbase:meta表记录元数据,它的rowkey存储的是hbase中所有表的region名称。

HBase的读数据流程: (1)Zookeeper中存储meta对应的regionserver和region信息,用户的发送的请求都会先去找到ZooKeeper; (2)在ZooKeeper上获取meta的元数据信息; (3)根据元数据记录找到meta表的region被哪个regionserver所管理; (4)找到meta表所在的region; (5)找到meta中记录的各个表所在的regionserver; (6)找到所要查找的表的rowkey在哪个region上; (7)读取rowkey,找到所要查找的记录。 HBase的写数据流程: (1)写HLog日志; (2)写MemStore; (3)MemStore满后溢写到storefile。

在zookeeper上查看保存region元数据的regionserver:

zookeeper-3.4.5]$ bin/zkServer.sh start

zookeeper-3.4.5]$ bin/zkCli.sh

[zk: localhost:2181(CONNECTED) 0] ls /
[hbase, zookeeper]
[zk: localhost:2181(CONNECTED) 4] get /hbase/meta-region-server
cZxid = 0x60
ctime = Mon Jul 23 17:30:05 CST 2018
mZxid = 0x60
mtime = Mon Jul 23 17:30:05 CST 2018
pZxid = 0x60
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 78
numChildren = 0

5、HBase Shell中的操作

hbase-0.98.6-hadoop2]$ bin/hbase shell (1)查看hbase中的命名空间。hbase默认有两个命名空间:用户自定义的表默认情况下的命名空间是default,系统自带的元数据表的命名空间为hbase。

hbase(main):001:0> list_namespace
NAMESPACE                                                                                                                             
2018-07-23 17:54:56,778 WARN  [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
default                                                                                                                               
hbase                                                                                                                                 
2 row(s) in 2.5020 seconds

(2)列出命名空间hbase中的表:

hbase(main):002:0> list_namespace_tables 'hbase'
TABLE                                                                                                                                 
meta                                                                                                                                  
namespace                                                                                                                             
2 row(s) in 0.2680 seconds

(3)查看hbase命名空间中的meta表:

hbase(main):003:0> scan 'hbase:meta'

[zk: localhost:2181(CONNECTED) 2] ls /hbase/rs 
[hadoop-senior.ibeifeng.com,60020,1533075373902]
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:http://blog.csdn.net/gongxifacai_believe复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • HBase的物理模型及数据存储

    (1)Table中的所有行都按照row key的字典序排列。 (2)Table在行的方向上分割为多个Region。 (3)Region是按大小分割的,每个表...

    魏晓蕾
  • HBase 数据存储结构

    这看着感觉也没有那么太大的区别呀, 它解决了 MySQL 的那些问题呢? 每一个新事物的出现, 都是为了解决原本存在的问题.

    烟草的香味
  • Hbase-2.0.0_03_Hbase数据模型

    HBase中的一行由一个行键和一个或多个列组成,列的值与这些列相关联。存储行时,按行键按字母顺序排列。因此,行键的设计非常重要。目标是以这样一种方...

    踏歌行
  • HBase 的存储结构

    HBase 中的表常常是超级大表,这么大的表,在 HBase 中是如何存储的呢? HBase 会对表按行进行切分,划分为多个区域块儿,每个块儿名为 HRegi...

    dys
  • HBase数据模型(1)

    HBase数据模型(1) HBase数据模型(2) 1.0 HBase的特性 Table HBase以表(Table)的方式组织数据,数据存储在表中。...

    王小雷
  • HBase数据模型(2)

    HBase数据模型(1) HBase数据模型(2) 1.0 HBase的版本version,是一个用长整型表示的。由Rowkey、Column(列族和列...

    王小雷
  • 2021年大数据HBase(十三):HBase读取和存储数据的流程

    1、由客户端发起读取数据的请求, 首先先连接 zookeeper , 从zookeeper获取hbase:meta表被哪个regionServer所管理meta...

    Lansonli
  • 【HBase】HBase的环境搭建及基本使用

    版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/...

    魏晓蕾
  • 【HBase】HBase各功能组件、集成MapReduce的方式及数据迁移

    (1)在/opt/modules/hadoop-2.5.0/etc/hadoop/hadoop-env.sh文件中添加环境变量

    魏晓蕾
  • Hbase入门(三)——数据模型

    Hbase最核心但也是最难理解的就是数据模型,由于与传统的关系型数据库不同,虽然Hbase也有表(Table),也有行(Row)和列(Column),但是与关系...

    大数据流动
  • 2021年大数据HBase(三):HBase数据模型!!!【建议收藏】

    在HBASE中,数据存储在具有行和列的表中。这是看起来关系数据库(RDBMS)一样,但将HBASE表看成是多个维 度的Map结构更容易理解

    Lansonli
  • Hadoop Hbase适合存储哪类数据?

            最适合使用Hbase存储的数据是非常稀疏的数据(非结构化或者半结构化的数据)。Hbase之所以擅长存储这类数据,是因为Hbase是col...

    田春峰-JCJC错别字检测
  • 分布式NoSQL列存储数据库Hbase_MR集成Hbase:读写Hbase规则(九)

    ChinaManor
  • 大数据入门:Hbase存储原理解析

    在大数据储存任务当中,针对于具备“5V”特征的大规模数据集,数据存储从传统的关系型数据库开始转向非关系型数据库(NOSQL),而NOSQL数据库当中,Hbase...

    成都加米谷大数据
  • Hbase系统架构及数据结构

    Row Key 是用来检索记录的主键。想要访问 HBase Table 中的数据,只有以下三种方式:

    每天进步一点点
  • 轻松理解Hbase面向列的存储

    说明:从严格的列式存储的定义来看,Hbase并不属于列式存储,有人称它为面向列的存储,请各位看官注意这一点。

    神秘的寇先森
  • hbase数据原理及基本架构

    hbase是apache hadoop生态系统中的重要一员,主要用于海量结构化数据存储

    用户1217611
  • SpringBoot整合HBase将数据写入Docker中的HBase

    在之前的项目里,docker容器中已经运行了HBase,现将API操作HBase实现数据的增删改查 通过SpringBoot整合Hbase是一个很好的选择 ...

    gzq大数据
  • 优化 HBase - HBase 的预分区及 rowkey 设计原则与方法

    之前在《初识 HBase - HBase 基础知识》中提到过,HBase 的数据物理存储格式为多维稀疏排序 Map, 由 key 及 value 组成:

    数人之道

扫码关注腾讯云开发者

领取腾讯云代金券