为了账号安全,请及时绑定邮箱和手机立即绑定

Hbase问题汇总1

标签:
Hbase

1 HBase特点有那些?

总:存储规模大、面向列、无模式、多版本、建立在HDFS上的分布式、非关系型数据库

高可靠、面向列、高性能、可伸缩(自动切分、迁移)、可扩展,增加计算和存储能力

存储规模大:单表可达数十亿行,数百万列
面向列:存储和检索均面向列
无模式:同一表中的不同行可以由截然不同的列
存储稀疏:空列并不占用存储空间,表可以设计的非常稀疏
多版本:每个单元(cell)中的数据可以由多个版本,默认情况下版本号是单元格插入的时间戳
数据类型单一:数据都是字符串,没有类型(所有数据都被转换为字节数组)

2 HBase VS HDFS VS Hive

1)HBase VS HDFS
两者都有很好的容错性和扩展性
HDFS适合离线批处理场景、不支持随机查找、不支持数据更新
HBase是对HDFS很好的补充

2) HBase VS  Hive
两者都依赖于HDFS作为数据存储支持,都有表、数据库的概念
Hive面向计算层面的,为统计分析而生的
HBase面向存储,要满足实时查询需求

3 HBase的缺点?

1 不能支持条件查询,仅能通过行键和行键序列来检索数据

要进行条件查询只有两种方式:
(1).设计合适的行键(通过行键直接定位到数据所在的位置);
(2).通过Scan方式进行查询,Scan可设置起始行和结束行,把这个搜索限定
在一个区域中进行;

2 仅支持行级(单行)事务(HBase的事务是行级事务,可以保证行级数据的原子性、一致性、隔离性以及持久性)

HBase分别提供了行锁和读写锁来实现行级数据、Store级别以及Region级别的并发控制。除此之外,HBase还提供了MVCC机制实现数据的读写并发控制。MVCC,即多版本并发控制技术,它使得事务引擎不再单纯地使用行锁实现数据读写的并发控制,取而代之的是,把行锁与行的多个版本结合起来,经过简单的算法就可以实现非锁定读,进而大大的提高系统的并发性能。HBase正是使用行锁 + MVCC保证高效的并发读写以及读写数据一致性。
详情:HBase 事务和并发控制机制原理

Scan可以设置一个或多个Filter,来对行键、列族和列进行过滤,从而达到条件查询的目的。

3 暂时不能支持Master server的故障切换,当Master宕机后,整个存储系统就会挂掉

4 HBase的体系结构?

webp

HBase的体系结构

HBase遵从主从服务器架构,由RegionServer和Master构成
Master负责管理所有的RegionServer
Zookeeper协调服务,并处理服务器运行期间可能遇到的错误

Client:

  • 包含访问HBase的接口,并维护cache来加快对HBase的访问,比如region的位置信息

  • Client读写HBase上数据不需要与Master交互,只需要寻址访问Zookeeper和RegionServer

Master:

  • 为RegionServer分配Region

  • 发现失效的RegionServer,并重新分配其上的Region

  • 在Region 分裂后,负责新Region的分配

  • 负责RegionServer的负载均衡

  • 负责管理用户对表的增删改查操作

  • 仅仅维护Table和Region的元数据信息,负载很低,

Regionserver:

  • 负责用户的IO请求

  • 负责region的分裂

Zookeeper:

  • 保证任何时候,集群中只有一个Active Master

  • 存储所有Region的寻址入口

  • 实时监控RegionServer的状态,将RegionServer的上下线信息实时通知给Master

5 Hbase逻辑结构???

表(Table):
hbase在表中组织数据。表名是字符串和字符的组合,可以在文件系统路径中使用。

行(Row):
在表中数据依赖于行来存储,行通过行键来区分。行键没有数据类型,通常是一个字节数组。每一行rowkey必须是唯一的。可以使用(哈希值+时间戳来作为行键)

三种访问HBase表中数据方式:
通过单个rowkey访问、
通过rowkey序列访问、
全表扫描

列族(Column Family):
行中的数据通过列族来组织。列族也暗示了数据的物理排列。所以列族必须预先定义,并且不容易被修改。每行都拥有相同的列族,可能有些行的数据为空。列族是字符串和字符的组合,可以在文件系统路径
中使用。

HBase中的每个列,都归属某个列族
列族是表元数据的一部分(而列不是),必须在使用表之前定义
列是在插入数据时动态增加
列名都以列族作为前缀,即列族:标签,如info:qq , info:weibo 都属于info这个列族
物理上同列族数据存储在一起
最好将具备共同IO特性的列放在一个列族中

备注:
数据在列族中的位置是通过列标识来指定的。列标识不需要预先指定,每行的列标识也不需要相同。就像行键一样,列标识没有数据类型,通常也是字节数组。

单元(Cell):
通过行键和列唯一确定的一个存储单元;
Cell中可能包含多个版本的数据;
Cell中数据是没有类型的,全部是字节码形式存储。

版本(Version):
每行数据可以有多个版本
Version默认是TimeStamp(当前系统时间),在数据写入时自动赋值;
Version也可以由客户显式赋值;
不同Version的数据按Version倒序排序,即最新的数据排在最前面;
获取数据时不指定Version,默认取最新的数据;

数据存在过多版本造成存储负担,HBase提供两种数据版本回收方式:
保存数据的最后n个版本,和保存最近一段时间内的版本(如最近七天)
用户可以针对每个列族进行设置。

webp

Hbase表的逻辑结构

6 设计行键的时候应该注意什么呢?

数据按照rowkey的字典序顺序存储;
设计rowkey时,充分利用排序存储特性,将经常一起读取的行存储到一起;
不要把业务发生时间直接作为rowkey,导致全部存储到一个regionserver中,可以在时间戳前面加上散列值,设计成“散列值+时间戳”的形式

7 主要操作???

get :返回结果有序,按指定rowkey获取唯一一条记录
scan :返回结果有序,按指定条件获取一批记录
put(添加或者更新,更新不会删除旧数据,会以版本号标识,先缓冲区--->RPC发送)
delete:建立一个墓碑标志,不直接删除,在合并Compact时再进行删除。
其缺陷:删除版本T之后,在合并前,有添加了新数据版本号低于T,则get时无法查询到。解决办法:使用时间戳作为版本号



作者:小小少年Boy
链接:https://www.jianshu.com/p/57be566c1873


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消