专栏首页魏晓蕾的专栏HBase的物理模型及数据存储

HBase的物理模型及数据存储

1、HBase物理模型

(1)Table中的所有行都按照row key的字典序排列。 (2)Table在行的方向上分割为多个Region。 (3)Region是按大小分割的,每个表开始只有一个region,随着数据增多,region不断增大,当增大到一个阈值的时候,region就会等分成两个新的region,之后会有越来越多的region。 (4)Region是HBase中分布式存储和负载均衡的最小单元。不同Region分布到不同RegionServer上。 (5)Region虽然是分布式存储的最小单元,但并不是存储的最小单元,存储的最小单元是Cell。Region由一个或者多个Store组成,每个store保存一个columns family。每个store又由一个memStore和0至多个StoreFile组成。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)。 (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记录数据的所有变更,一旦数据修改,就可以从log中进行恢复。每个HRegionServer维护一个HLog,而不是每个HRegion一个。这样不同region(来自不同table)的日志会混在一起,这样做的目的是不断追加单个文件相对于同时写多个文件而言,可以减少磁盘寻址次数,因此可以提高对table的写性能。带来的麻烦是,如果一台HRegionServer下线,为了恢复其上的region,需要将HRegionServer上的log进行拆分,然后分发到其它HRegionServer上进行恢复。

4、ZooKeeper中的操作

在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]

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 支持向量机SVM和核函数详述

    作为一种优化算法,拉格朗日乘子法主要用于解决约束优化问题,它的基本思想就是通过引入拉格朗日乘子来将含有n个变量和k个约束条件的约束优化问题转化为含有(n+k)个...

    魏晓蕾
  • Uni-app 中使用 .ttf 字体图标

    我是用的是uni.ttf中自带的字体:“clear”,/src/components/uni-app/uni-icons/icons.js 文件中字体编码为:

    魏晓蕾
  • 【Hadoop】网站基本指标分析及统计

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

    魏晓蕾
  • 私有云架构简述之存虚拟化

    一、在私有云中,常用的存储虚拟化的方式有四种。DAS(直存)、NAS(网络存储)、FCSAN(光纤存储)、ServerSAN(分布式存储)。

    希望的田野
  • 你为什么还在用存储过程?

    存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过...

    Fayson
  • 程序员过关斩将--你为什么还在用存储过程?

    存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过...

    架构师修行之路
  • 三种云部署方式 助企业实现高性能云存储

    用户把他们的基础设施移出数据中心以外,总是会涉及延迟问题,那些寄希望于云供应商能够提供高性能的云存储的用户,就不得不学会妥协,要么部分地放弃对高性能的要求,要么...

    静一
  • 系列 | 高性能存储-MySQL数据库之存储过程揭秘

    墨墨导读:本文介绍什么是存储过程?为什么要使用存储过程?如何使用存储过程?如何去使用存储过程以及怎么执行存储过程。

    数据和云
  • CIO/CTO 必读 | 数字转型时代,企业存储支出知多少

    企业的CIO、CTO们除了关注业务支撑、技术演进之外,还有关心一个永恒的话题:IT成本优化和投入产出比。关于这个话题,我们最近在Gartner上读到一篇很有意思...

    焱融科技
  • MySQL 关于存储过程那点事

    存储例程是存储在数据库服务器中的一组sql语句,通过在查询中调用一个指定的名称来执行这些sql语句命令. 简介 SQL语句需要先编译然后执行,而存储过程(Sto...

    房上的猫

扫码关注云+社区

领取腾讯云代金券