hbase内核学习总结

Hbase集群架构

 

组件

client

  • API:对外提供访问的API
  • 加速cache:存储从regionServer返回的信息,不过容量较小,由参数hbase.client.write.buffer控制

HMaster

  • 负责分散读访问到不同的RegionServer
  • Balancer:负责将数据分散到不同的RegionServer上
  • 失效的RegionServer摘除
  • 提供用户的基础操作(get/put/delete/scan/update/create/drop等)

RegionServer

  • 处理Region的I/O请求
  • 切分/合并Region

RegionServer的结构:

 

zookeeper

  • 选举新的HMaster
  • 存储Region寻址信息
  • RegionServer心跳检测,上下线注册通知Hmaster
  • 存储元数据

 

Table结构

按照如下语句建表,写入数据

create 'sohu',{NAME => 'staffInfo', VERSIONS => 2, TTL=>'15552000'},{NAME => 'carInfo', VERSIONS => 2, TTL=>'15552000'}
put 'sohu','rowkey001','staffInfo:name','wyett'
put 'sohu','rowkey001','staffInfo:age','20'
put 'sohu','rowkey001','carInfo:licence','京B8888'
put 'sohu','rowkey001','carInfo:brand','Porsche'
 
hbase(main):003:0> get 'sohu','rowkey001', 'staffInfo', 'carInfo'
COLUMN                                           CELL                                                                                                                                         
 carInfo:brand                                   timestamp=1497862298400, value=Porsche                                                                                                       
 carInfo:licence                                 timestamp=1497862288122, value=\xE4\xBA\xACB8888                                                                                             
 staffInfo:age                                   timestamp=1497862280230, value=20                                                                                                            
 staffInfo:name                                  timestamp=1497862195491, value=wyett

rowkey为rowkey001的行数据,来解释表结构

  • rowkey:主键,唯一标识数据行
  • columnfamily:列簇,列的集合。有两个columnfamily,staffInfo和carInfo
  • column:列。第一行数据有4个列名。
  • version 和timestamp:保留的版本数,在建表时指定,当前表version为2,和timestamp共同决定版本保留
  • value:键值

HTable中,只有一种存储类型,byte[]。

  • client咨询master,确定写入的regionServer节点;
  • client将数据写入regionServer的Region(一次只能操作一个region,至少在hbase shell看是这样)
  • 数据写入HLog,相当于关系型数据库的redo Log,结构暂不清楚,待补充;
  • 同时,数据写入某个Store,先写入memStore,当memStore写满时,将数据写入新的region,原region进入落盘队列 Flush List。
  • 有一个进程监控落盘队列,并记录已经进行持久化的memStore的信息,记录在zookeeper中
  • memStore进行持久化时,会写入一个大的Store中,当写入达到某个阈值时,会触发合并,这个过程就是major compact,这个过程将多条版本的数据进行合并,根据version,timestamp保留需要的数据。
  • 当新生成的StoreFile达到阈值(上水位线),会触发StoreFile进行split。
  • 然后会将Store的信息返回给Hmaster,并记录进zookeeper

 

posted @ 2017-09-05 18:49  wyett  阅读(238)  评论(0编辑  收藏  举报