hadoop学习笔记之hbase原理

基础

hbase是面向列存储的NoSQL数据库。行的每一列被划分到某一列族,调优和存储都是基于列族完成的。在数据库中,行的每一列作为存储的基本单位,其结构关系为,每一行包含一个或多个列族,一个列族包含多个列,这样可通过行键确定行,列族名确定列族,列名确定列,从而定位到某一行的某一列。例如,行键为1,列族为a,列为a1,那么在hbase中存放形式为rowkey=1,col=a:a1,value=…,timestamp=… 这作为一条记录存储。一行可有任意列构成,很容易增加列。列族需要预先定义,不能在插入内容时添加或删除。在hbase中默认是按照行键字典升序存储。

存储原理

1.region

hbase数据库是为了处理大规模数据而产生的。对于大规模数据实现分布式存储。当数据量达到一定规模时,hbase会将表中数据进行分区。分区是按照行键来分区,将开始第一个分区按照行键中间值一分为二,比如原分区的行键范围为(0,50),那么分成(0,25)和(25,50)两个分区,这样做的原因是插入数据的行键是由外部用户指定,你不能确定插入数据的键是属于那一个范围,所以将一分为二,让行键范围内能够有插入数据的空间。

同一个表中的所有分区可以存放在多个节点上,以实现负载均衡。存放分区的节点称为regionServer,它会管理当前节点上的所有分区和对分区数据进行读写操作。与HDFS类似,habse是主从结构,HMaster是主节点,它负责将分区分配给regionServer、恢复regionServer故障。

2.分区访问

hbase内部存储着-root-表、.meta表,.meta表用来存放分区名、分区所在位置等信息。当数据量非常大的时候,.meta表数据量也会相当庞大,所以.Meta表也做分布式存储处理,定义-root-表中存储.Meta表分区列表信息、分区中行键范围。客户端访问分区时,先从-root表中获取存储所请求行所在分区信息的.meta表分区位置,锁定.meta分区位置,从中获取所请求行所在分区信息,而后锁定分区位置。

总的来说,就是表数据量大,为了实现分布式存储,将其分区,分区信息存放在.meta表中,当分区信息数据达到一定规模后,.meta表数据量大,也难以处理,于是将.meta表也进行分区处理,-root-表存放.meta表分区信息,这样一来如果-root-表数据量过大时,又需要对其进行分区。不过就目前而言默认两级分区已经足够。

分区时,分区表的行键由表名、起始行键、随机hash串构成,列就是regionServer对应主机名,分区表按行键字典升序排列。

3.读写操作

当regionServer接收到写请求之后,先将写操作写入到”提交日志”,而后将数据存到memstore中,等到memstore缓冲区满,执行写数据操作到hdfs文件系统。当regionServer崩溃之后,将提交日志按区域进行分割,每个区域重启之前先找到对应提交日志,重做其中未来得及做的操作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值