Hbase学习及详解
最近终于完成了项目组内部的分享,本来该去年12月份就完成的,由于两个项目组的时间不匹配,一直拖到了今年三月份。接触hbase也已经有三四个月了,总体感觉是hbase的整个的理解不难,但是真正运用时很考验人,我自己用的不多,只是了解了一些原理。自己本地搭了一个伪分布式Hbase,没有线上的经验。今天写下来,以备以后的回顾。
首先什么是Hbase?
Hbase是一个构建在HDFS上的、分布式的、面向列的开源数据库,是Google BigTable的开源实现,用于存储海量的数据。
然后是Hbase的特点。
Hbase和我们传统的关系型数据库的区别
Hbase数据类型都是字符串
Hbase基于列存储,RDBMS基于行存储
Hbase只有增、删、改、查,没有表之间的关联
Hbase存储海量的数据,查询效率极高
Hbase的数据模型
行键:为任意字符串,最大长度64kb,按字典顺序存储,Hbase内部存储为字节数组。
列族:创建表的时候声明,一个列族对应多个列,列族无数据类型,存储为二进制。
每个列族存储在HDFS上的一个单独文件夹中。
时间戳:对于每一列的值,默认保存三个时间戳的副本值。可以设置。
Hbase中通过row和columns确定的为一个存储单元称为cell。
Hbase的架构图
我们可以看到,整个Hbase运行所依赖的组件,包括zookeeper,master,regionserver,以及hdfs。
Zookeeper的作用:保证任何时候,集群中只有一个活跃的Master,存储所有region的寻址入口,实时监控Region server的上线和下线信息,并实时通知Master。存储Hbase的schema和table元数据。维护着master和regionserver的心跳信息。
Master的作用:管理用户对table的增删查改操作。管理HRegion Server的负载均衡,调整Region分布。在Region Split后,负责新Region的分配。在HRegion Server停机后,负责失效HRegion Server上Region的迁移。HMaster失效仅会导致所有元数据无法被修改,表的数据读写可以正常进行。
Region Server的作用:维护Region并往HDFS中写数据,表的大小超过设置时,Split Region。Region Server停机后,负责失效Region Server上Region的迁移。一个regionserver可以管理1000个region。
HLog:主要作用就是记录写入的日志。在regionserver宕机的情况下,可以快速地恢复还未写入hdfs的数据。
memstore:写入的缓冲区,写入的数据会存放在这里,当达到一定大小之后,整个地flush到hfile中,存储到hdfs。
Hbase的写过程
首先客户端发起一次写入请求,会先去zookeeper查找数据应该存放的region所在regionserver的位置,然后找到对应的regionserver,首先是写入memstore中,同时往hlog中写入一份,当memstore达到一定量,整个写入hfile中。
Hbase的读过程
客户端发起一次读请求,首先也是去zookeeper找到对应数据所在的region,当然这只是第一次的时候,后面并不需要再去读,因为客户端会缓存一份region的地址信息。然后是找到对应的regionserver,首先还是从memstore中查找,看是否有我们需要的值,如果没有的话就去blockcache中找,blockcache是读的缓存,存储着最近一段时间客户端读取的数据,里面使用的LRU算法,淘汰最近没有读取的数据。如果从blockcache中仍然没有找到的话,就去hfile里面查找。
Hbase的扩展
Hbase广泛应用于国内如阿里(淘宝、天猫、蚂蚁金服)、小米(米聊、小米云、小米推送服务)等公司。
Hbase PMC。阿里1个。
Hbase Committer。阿里4个,小米4个。
2016年双11,HBase承载访问量达到了上百GB/秒(写入)与上百GB/秒(读取),相当于全国人民一秒收发一条短信,在业务记录、安全风控、实时计算、日志监控、消息聊天等多个场景发挥重要价值。
HbaseCon
HBaseCon是由Apache官方授权, 由HBase?项目委员会组织的社区性技术会议,其发起于2012年,并在过去几年(美国)均成功举办,吸引了大批Hadoop/HBase生态的开发者与用户。
2017年8月于中国深圳举办第一届HBase亚洲技术大会。
HBase社区吸引了全球众多的开发者参与其中,在JIRA(项目与事务跟踪工具)数量以及代码提交频率方面,社区每周都保持极高的活跃度,是Apache最活跃的*项目之一。