Hadoop基础教程-第10章 HBase:Hadoop数据库(10.2 HBase基本概念、框架)(草稿)

第10章 HBase:Hadoop数据库

10.2 HBase基本概念、框架


本节内容,大多是从网络上汇总而来,并做了一定总结修改。

10.2.1 HBase的特点

  • 大:一个表可以有上亿行,上百万列。
  • 面向列:面向列表(簇)的存储和权限控制,列(簇)独立检索。
  • 稀疏:对于为空(NULL)的列,并不占用存储空间,因此,表可以设计的非常稀疏。(对于关系数据库,空值位置必须存储NULL值;然而对于HBase,对于空值直接省略该列,也就是说空值不占用任何存储空间
  • 无模式:每一行都有一个可以排序的主键和任意多的列,列可以根据需要动态增加,同一张表中不同的行可以有截然不同的列。
  • 数据多版本:每个单元中的数据可以有多个版本,默认情况下,版本号自动分配,版本号就是单元格插入时的时间戳。
  • 数据类型单一:HBase中的数据都是字符串,没有类型。

传统的列式数据库适合实时数据存储,而HBase比较适合键值对数据存储,或者说适合有序数据的存储。

10.2.2 HBase基本概念

  • RowKey:是Byte array,是表中每条记录的“主键”,方便快速查找,Rowkey的设计非常重要
  • Column Family:列族,拥有一个名称(string),包含一个或者多个相关列
  • Column:属于某一个columnfamily,familyName:columnName,每条记录可动态添加
  • Version Number:类型为Long,默认值是系统时间戳,可由用户自定义
  • Value(Cell):Byte array

    如果用编程语言风格来表示HBase数据存储模式,可以这样表示:

Map<RowKey,List<Map<Column,List<Value,Timestamp>>> > 

第1个Map代表一个HBase数据表,包含了一个列族List。列族中包含了一个Map存储列和对应的值,而列值存储到最后一个List中,存储了值和对应的时间戳。

10.2.3 HBase架构组成

这里写图片描述

由图可知HBase建立在Hadoop之上,HBase底层使用的是Hadoop的HDFS。准确的说HBase建立在HDFS之前,并不依赖于Hadoop。 
HBase包含3个重要组件:Zookeeper、HMaster和HRegionServer。 
(1)Zookeeper 
为整个HBase集群提供协助服务,包括:

     1)存放整个 HBase集群的元数据以及集群的状态信息。
     2)实现HMaster主从节点的failover。

ZooKeeper为HBase集群提供协调服务,它管理着HMaster和HRegionServer的状态(available/alive等),并且会在它们宕机时通知给HMaster,从而HMaster可以实现HMaster之间的failover,或对宕机的HRegionServer中的HRegion集合的修复(将它们分配给其他的HRegionServer)。ZooKeeper集群本身使用一致性协议(PAXOS协议)保证每个节点状态的一致性。 
(2)HMaster 
主要用于监控和操作集群中的所有HRegionServer。HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的MasterElection机制保证总有一个Master在运行 
主要负责Table和Region的管理工作:

    1)管理用户对表的增删改查操作
    2)管理HRegionServer的负载均衡,调整Region分布
    3)Region Split后,负责新Region的分布
    4)在HRegionServer停机后,负责失效HRegionServer上Region迁移

(3)HRegionServer 
HBase中最核心的模块,主要负责响应用户I/O请求,向HDFS文件系统中读写数据。

    1)存放和管理本地HRegion。
    2)读写HDFS,管理Table中的数据。
    3)Client直接通过HRegionServer读写数据(从HMaster中获取元数据,找到RowKey所在的HRegion/HRegionServer后)。
 

一个列族的所有列存储在同一个底层的存储文件中,就是HFile。列族数量不能太多,而列族中的列的数量没有限制,一个列族可以有百万个列。列值没有类型和长度限制。

(4)Region定位 
以前的理论是:客户端向ZooKeeper请求 -ROOT- 表的位置,然后通过 -ROOT- 表找 META 表的位置,再通过 META 表定位到Region Server位置。 
现在的ZooKeeper直接缓存了 META 表所在的位置信息,可以直接通过ZooKeeper获取 META 表的位置,后续流程也还是一样的。因为限定了 META 表不可分割,只能存在一个Region,所以存储他的Region Server一定只有一个。

在初始情况下,需要请求一次ZooKeeper获得hbase:meta表位置,Scan hbase:meta表获得Region位置,Scan Region获得数据;

10.2.4 物理存储

每个column family存储在HDFS上的一个单独文件中,空值不会被保存。 
Key 和 Version number在每个 column family中均有一份; 
HBase 为每个值维护了多级索引,即:<key, column family, column name, timestamp> 
物理存储: 
(1)Table中所有行都按照row key的字典序排列; 
(2)Table在行的方向上分割为多个Region; 
(3)Region按大小分割的,每个表开始只有一个region,随着数据增多,region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region,之后会有越来越多的region; 
(4)Region是Hbase中分布式存储和负载均衡的最小单元,不同Region分布到不同RegionServer上。

灰常灰常感谢原博主的辛苦工作,为防止删博,所以转载,只供学习使用,不做其他任何商业用途。 https://blog.csdn.net/chengyuqiang/article/details/75913431

第10章 HBase:Hadoop数据库

10.2 HBase基本概念、框架


本节内容,大多是从网络上汇总而来,并做了一定总结修改。

10.2.1 HBase的特点

  • 大:一个表可以有上亿行,上百万列。
  • 面向列:面向列表(簇)的存储和权限控制,列(簇)独立检索。
  • 稀疏:对于为空(NULL)的列,并不占用存储空间,因此,表可以设计的非常稀疏。(对于关系数据库,空值位置必须存储NULL值;然而对于HBase,对于空值直接省略该列,也就是说空值不占用任何存储空间
  • 无模式:每一行都有一个可以排序的主键和任意多的列,列可以根据需要动态增加,同一张表中不同的行可以有截然不同的列。
  • 数据多版本:每个单元中的数据可以有多个版本,默认情况下,版本号自动分配,版本号就是单元格插入时的时间戳。
  • 数据类型单一:HBase中的数据都是字符串,没有类型。

传统的列式数据库适合实时数据存储,而HBase比较适合键值对数据存储,或者说适合有序数据的存储。

10.2.2 HBase基本概念

  • RowKey:是Byte array,是表中每条记录的“主键”,方便快速查找,Rowkey的设计非常重要
  • Column Family:列族,拥有一个名称(string),包含一个或者多个相关列
  • Column:属于某一个columnfamily,familyName:columnName,每条记录可动态添加
  • Version Number:类型为Long,默认值是系统时间戳,可由用户自定义
  • Value(Cell):Byte array

    如果用编程语言风格来表示HBase数据存储模式,可以这样表示:

Map<RowKey,List<Map<Column,List<Value,Timestamp>>> > 

第1个Map代表一个HBase数据表,包含了一个列族List。列族中包含了一个Map存储列和对应的值,而列值存储到最后一个List中,存储了值和对应的时间戳。

10.2.3 HBase架构组成

这里写图片描述

由图可知HBase建立在Hadoop之上,HBase底层使用的是Hadoop的HDFS。准确的说HBase建立在HDFS之前,并不依赖于Hadoop。 
HBase包含3个重要组件:Zookeeper、HMaster和HRegionServer。 
(1)Zookeeper 
为整个HBase集群提供协助服务,包括:

     1)存放整个 HBase集群的元数据以及集群的状态信息。
     2)实现HMaster主从节点的failover。

ZooKeeper为HBase集群提供协调服务,它管理着HMaster和HRegionServer的状态(available/alive等),并且会在它们宕机时通知给HMaster,从而HMaster可以实现HMaster之间的failover,或对宕机的HRegionServer中的HRegion集合的修复(将它们分配给其他的HRegionServer)。ZooKeeper集群本身使用一致性协议(PAXOS协议)保证每个节点状态的一致性。 
(2)HMaster 
主要用于监控和操作集群中的所有HRegionServer。HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的MasterElection机制保证总有一个Master在运行 
主要负责Table和Region的管理工作:

    1)管理用户对表的增删改查操作
    2)管理HRegionServer的负载均衡,调整Region分布
    3)Region Split后,负责新Region的分布
    4)在HRegionServer停机后,负责失效HRegionServer上Region迁移

(3)HRegionServer 
HBase中最核心的模块,主要负责响应用户I/O请求,向HDFS文件系统中读写数据。

    1)存放和管理本地HRegion。
    2)读写HDFS,管理Table中的数据。
    3)Client直接通过HRegionServer读写数据(从HMaster中获取元数据,找到RowKey所在的HRegion/HRegionServer后)。
 

一个列族的所有列存储在同一个底层的存储文件中,就是HFile。列族数量不能太多,而列族中的列的数量没有限制,一个列族可以有百万个列。列值没有类型和长度限制。

(4)Region定位 
以前的理论是:客户端向ZooKeeper请求 -ROOT- 表的位置,然后通过 -ROOT- 表找 META 表的位置,再通过 META 表定位到Region Server位置。 
现在的ZooKeeper直接缓存了 META 表所在的位置信息,可以直接通过ZooKeeper获取 META 表的位置,后续流程也还是一样的。因为限定了 META 表不可分割,只能存在一个Region,所以存储他的Region Server一定只有一个。

在初始情况下,需要请求一次ZooKeeper获得hbase:meta表位置,Scan hbase:meta表获得Region位置,Scan Region获得数据;

10.2.4 物理存储

每个column family存储在HDFS上的一个单独文件中,空值不会被保存。 
Key 和 Version number在每个 column family中均有一份; 
HBase 为每个值维护了多级索引,即:<key, column family, column name, timestamp> 
物理存储: 
(1)Table中所有行都按照row key的字典序排列; 
(2)Table在行的方向上分割为多个Region; 
(3)Region按大小分割的,每个表开始只有一个region,随着数据增多,region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region,之后会有越来越多的region; 
(4)Region是Hbase中分布式存储和负载均衡的最小单元,不同Region分布到不同RegionServer上。

猜你喜欢

转载自blog.csdn.net/airufengye/article/details/80948938