Hbase基本概念

HBase简介
Hadoop Database是一个高可靠性、高性能、面向列、可伸缩实时读写的分布式数据库,主要用来存储非结构化和半结构化的松散数据(列存nosql数据库)

 

root:保存mete表的信息,一条数据对应一个meta 分区(表名,meta表各分区的位置,meta表分区的范围)
meta:保存region的信息,一条数据对应一个region(表名,region的位置,region对应的rowkey的范围)

 

client->zookeeper->-ROOT- ->.META. -> 用户数据表zookeeper记录了-ROOT-的路径信息(root只有一个region),ROOT里记录了.META的信息, (.META可能有多个region),.META里面记录了region的信息->通过rowkey取到数据

 

client ->通过zookeeper定位到region -> 将数据写入到Log日志中和 MemStore,一直到MemStore满 -> Flush成一个StoreFile,直至增长到一定阈值 -> 触发Compact(对多个小的storeFile进行合并) -> 多个StoreFile合并成一个StoreFile,同时进行版本合并和数据删除 -> 当StoreFiles Compact后,逐步形成越来越大的StoreFile -> 单个StoreFile大小超过一定阈值后,触发Split操作,把当前Region Split成2个Region,Region会下线,同时更新meta表的信息,新Split出的2个孩子Region会被HMaster分配到不同的HRegionServer 上,使得原先1个Region的压力得以分流到2个Region上由此过程可知,HBase只是增加数据,有所得更新和删除操作,都是在Compact阶段做的,所以,用户写操作只需要进入到内存即可立即返回,从而保证I/O高性能。

 

• HBase体系架构



– Zookeeper
   • 保证任何时候,集群中只有一个master
   • 存贮-root-表的位置
   • 监控Region server的运行情况,并实时通知Master
– Master
   • 负责Region server的负载均衡
   • 为Region server分配region
   • 发现失效的Region server,重新分配region(从hdfs中保存的副本中恢复)
   • 管理用户对表的的创建和修改表结构的操作
– RegionServer
   • Region server维护region,处理对这些region的IO请求
   • Region server负责切分在运行过程中变得过大的region
   • 向master定期汇报节点的负载情况

 

HBase数据模型
Row Key:

与nosql数据库们一样,row key是用来检索记录的主键。访问hbase table中的行,只有三种方式:

    1 通过单个row key访问
    2 通过row key的range
    3 全表扫描
  Row key行键 (Row key)可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes),在hbase内部,row key保存为字节数组。
  存储时,数据按照Row key的字典序(byte order)排序存储。设计key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。(位置相关性)
   注意:
字典序对int排序的结果是1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,…,9,91,92,93,94,95,96,97,98,99

Column Family列族和qualifier列:                                
    – HBase表中的每个列都归属于某个列族,列族必须作为表模式定义的一部分先给出,每个列族都可以有多个列成员,新的列族成员可以随后按需动态添加

    – 权限控制和存储以及调优都在列族的层面进行
    – HBase把同一列族里面的数据存储在同一个目录中,由几个文件保存
Timestamp时间戳:
    – 在HBase每个cell存储单元对同一份数据有多个版本,根据唯一的时间戳来区分每个版本之间的差异,不同版本的数据按照时间倒序排序,最新的数据版本排在最前面。
    – 时间戳的类型是 64位整型。
    – 时间戳可以由HBase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。
    – 时间戳也可以由客户显式赋值,如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳
Cell单元格 :
    – 由行和列的坐标交叉决定;
    – 单元格是有版本的;
    – 单元格的内容是未解析的字节数组;
由{row key, column( = +), version} 唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存贮。
HLog(WAL log) 
     HBase的操作日志(一个HReginserver中一份)
Region 
    – HRegion是HBase中分布式存储和负载均衡的最小单元。最小单元就表示不同的HRegion可以分布在不同的 HRegion server上。
    – HRegion由一个或者多个Store组成,每个store保存一个columns family。
    – HBase自动把表水平划分成多个区域(region),每个region会保存一个表里面某段连续的数据;每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值的时候,会等分会两个新的regiregion就on(裂变);
    – 当table中的行不断增多,就会有越来越多的region。这样一张完整的表被保存在多个Regionserver 上
Memstore 与 Storefile:
    – Strore由一个memStore和0至多个StoreFile组成
store包括位于内存中的memstore和位于磁盘的storefile写操作先写入memstore,当memstore中的数据达到某个阈值,hregionserver会启动flashcache进程写入storefile,每次写入形成单独的一个storefile
    – 当storefile文件的数量增长到一定阈值后,系统会进行合并(minor、major compaction),在合并过程中会进行版本合并和删除工作(majar)删除旧版本的数据),形成更大的storefile
    – 当一个region所有storefile的大小和超过一定阈值后,会把当前的region分割为两个,并由hmaster分配到相应的regionserver服务器,实现负载均衡
    – 客户端检索数据,先在memstore找,找不到再找storefile  

 

Hbase优化:
1、表设计:
    rowkey,columnfamily,column在满足需求的时候,越简短越好,如果过长,在每个cell中的key就会很长,甚至比较value还要大,浪费不必要的空间
    rowkey尽可能的散列,如果rowkey是连接有规律的,或者自增长,那么在读写数据的时候就会重复地访问同一个regionserver(可以取其hash值或md5等,让其均分到各个regionserver中)
2、预分区:
    在创建表的时候就先把表分成多个空的region,位于不同的regionserver上,在读写数据的时候就不会对某一个regionserver进行长时间的读写,实现负载均衡
3、设置memstore和blockcache(regionserver中的两块内存):
    读操作先读memstore,如果没有,再读blockcache,还没有,就读表中的数据
    写操作先写入到memstore中,memstore默认大小就可以了(128M)
4、columnFamily越少越好
    当其中一个列族数据特别多的时候,会执行多次flush(溢写到磁盘形成一个一个的storefile),而同时某一个列族数据特别少,同时也会被触发flush,当storefile个数达到某一个值的时候,会进行compact合并,尽管每一个sotrefile数据很少,同样会被compact,IO负载就比较大

 

 

   

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值