刘培
新手
新手
  • UID409
  • 粉丝0
  • 关注0
  • 发帖数3
阅读:9472回复:0

Hbase介绍

楼主#
更多 发布于:2019-05-27 14:44
什么是Hbase?
 Apache HBase是基于Hadoop构建的一个分布式的、可伸缩的海量数据存储系统。HBase是一个数据模型,类似于谷歌的大表设计,可以提供快速随机访问海量结构化数据。它利用了Hadoop的文件系统(HDFS)提供的容错能力。它是Hadoop的生态系统,提供对数据的随机实时读/写访问,是Hadoop文件系统的一部分。人们可以直接或通过HBase的存储HDFS数据。使用HBase在HDFS读取消费/随机访问数据。 HBase在Hadoop的文件系统之上,并提供了读写访问。
Hbase与HDFS
      HDFS
      Hbase
      HDFS是适于存储大容量文件的分布式文件系统。
      HBase是建立在HDFS之上的数据库。
      HDFS不支持快速单独记录查找。
      HBase提供在较大的表快速查找。
      它提供了高延迟批量处理;没有批处理概念。
      它提供了数十亿条记录低延迟访问单个行记录(随机存取)。
      它提供的数据只能顺序访问。
      HBase内部使用哈希表和提供随机接入,并且其存储索引,可将在HDFS文件中的数据进行快速查找。


Hbase数据模型
每个HBase的table存储的结果大致如下表所示:
在qualifier之上还有个层级column family,相比传统的RDB多了一个层级。一些概念解释如下:
      Term
      Description
      Row       HBase中的"行",包含一个row key(行键)和若干个column(列)
      Column Family       "列族",相当于列的分组,由多个列构成一个列族。同一列族下的列具有相同的属性
      Column Qualifier
      就是列族下某个具体的"列",Qualifier的属性受到Column Family限制
      Column       "列",表示存储中的某一具体的列,包含列族和Qualifier,用:连接: cf:qualifier
      Cell       就是由行列所唯一确定的单元格。一个单元格可能包含多个version
      Timestamp
      每个Cell中都会包含一个元数据Timestamp,主要用于区分存储的版本
  • RowKey
用来表示唯一一行记录的主键,HBase的数据是按照RowKey的字典顺序进行全局排序的,所有的查询都只能依赖于这一个排序维度。HBase的RowKey天生自带索引,并且按字节顺序排列,而且天然分布式。因此设计RowKey就成了用好HBase的关键。可以把RowKey想象中SQL语句中SELECT col FROM htable WHERE (condition);其中的condition,用HBase之前务必先设计好查询条件,将WHERE条件的语句作为RowKey存储。
  • Region
区别于Cassandra/DynamoDB的”Hash分区”设计,HBase中采用了”Range分区”,将Key的完整区间切割成一个个的”Key Range” ,每一个”Key Range”称之为一个Region。也可以这么理解:将HBase中拥有数亿行的一个大表,横向切割成一个个”子表“,这一个个”子表“就是Region。Region是HBase中负载均衡的基本单元,当一个Region增长到一定大小以后,会自动分裂成两个。
  • Column Family
如果将Region看成是一个表的横向切割,那么,一个Region中的数据列的纵向切割,称之为一个Column Family。每一个列,都必须归属于一个Column Family,这个归属关系是在写数据时指定的,而不是建表时预先定义。
适用场景
HBase的数据模型比较简单,数据按照RowKey排序存放,适合HBase存储的数据,可以简单总结如下:
以实体为中心的数据实体可以包括但不限于如下几种:
  1. 自然人/账户/手机号/车辆相关数据
  2. 用户画像数据(含标签类数据)
  3. 图数据(关系类数据)
   描述这些实体的,可以有基础属性信息、实体关系(图数据)、所发生的事件(如交易记录、车辆轨迹点)等等。
以事件为中心的数据:
  1. 监控数据
  2. 时序数据
  3. 实时位置类数据
  4. 消息/日志类数据
上面所描述的这些数据,有的是结构化数据,有的是半结构化或非结构化数据。HBase的“稀疏矩阵”设计,使其应对非结构化数据存储时能够得心应手,但在我们的实际用户场景中,结构化数据存储依然占据了比较重的比例。由于HBase仅提供了基于RowKey的单维度索引能力,在应对一些具体的场景时,依然还需要基于HBase之上构建一些专业的能力,如:
  1. OpenTSDB 时序数据存储,提供基于Metrics+时间+标签的一些组合维度查询与聚合能力
  2. GeoMesa 时空数据存储,提供基于时间+空间范围的索引能力
  3. JanusGraph 图数据存储,提供基于属性、关系的图索引能力
HBase擅长于存储结构简单的海量数据但索引能力有限,而Oracle等传统关系型数据库(RDBMS)能够提供丰富的查询能力,但却疲于应对TB级别的海量数据存储,HBase对传统的RDBMS并不是取代关系,而是一种补充。
集群角色ZooKeeper
    在一个拥有多个节点的分布式系统中,假设,只能有一个节点是主节点,如何快速的选举出一个主节点而且让所有的节点都认可这个主节点?这就是HBase集群中存在的一个最基础命题。利用ZooKeeper就可以非常简单的实现这类”仲裁”需求,ZooKeeper还提供了基础的事件通知机制,所有的数据都以 ZNode的形式存在,它也称得上是一个”微型数据库”。
NameNode
    HDFS作为一个分布式文件系统,自然需要文件目录树的元数据信息,另外,在HDFS中每一个文件都是按照Block存储的,文件与Block的关联也通过元数据信息来描述。NameNode提供了这些元数据信息的存储。
DataNode
    HDFS的数据存放节点。
RegionServer
    HBase的数据服务节点。
Master
    HBase的管理节点,通常在一个集群中设置一个主Master,一个备Master,主备角色的”仲裁”由ZooKeeper实现。 Master主要职责:
  1. 负责管理所有的RegionServer
  2. 建表/修改表/删除表等DDL操作请求的服务端执行主体
  3. 管理所有的数据分片(Region)到RegionServer的分配
  4. 如果一个RegionServer宕机或进程故障,由Master负责将它原来所负责的Regions转移到其它的RegionServer上继续提供服务
  5. Master自身也可以作为一个RegionServer提供服务,该能力是可配置的
游客

返回顶部