第一章.HBase简介

1.HBase定义

  • HBase是一种分布式,可扩展,支持海量数据存储的NoSQL数据库
  • 逻辑上,HBase的数据模型同关系型数据模型很类似,数据存储在一张表中,有行有列,但从HBase的底层物理存储结构(K-V)来看,HBase更像是一个 multi-dimensional map

2.HBase逻辑结构

$01[HBase入门] - 图1

3.HBase物理存储结构

$01[HBase入门] - 图2

4.数据模型

  1. # Name Space
  2. - 命名空间,类似于关系型数据库的database概念,每个命名空间下有多个表,HBase有两个自带的命名空间,分别是HBase和default,HBase中存放的是HBase内置的表,default是用户默认使用的命名空间
  3. # Table
  4. - 类似于关系型数据库的表概念,不同的是,HBase定义表时只需要声明列族即可,不需要声明具体的列,这意味着,往HBase写入数据时,字段可以动态,按需指定,因此,和关系型数据库相比,HBase能够轻松应对字段变更的场景
  5. # Row
  6. - HBase表中的每行数据都由一个RowKey和多个Column(列)组成,数据是按照Rowkey的字典顺序存储的, 并且查询数据时只能根据RowKey进行检索,所以RowKey的设计十分重要
  7. # Column
  8. - HBase中的每个列都由Column Family(列族)和Column Qualifier(列限定符)进行限定,例如 info:name,info:age,建表时,只需指明列族,而列限定符无需预先定义
  9. # Time Stamp
  10. - 用于标识数据的不同版本(version),每条数据写入时,系统会自动为其加上该字段,其值为写入HBase的时间
  11. # Cell
  12. - 由{rowkey,column Family: column Qualifier,time Stamp}唯一指定的单元,cell中的数据全部由字节码形式存储

5.HBase基本架构

$01[HBase入门] - 图3

  1. # Region Server
  2. - Region Server为Region的管理者,其实现类是HRegionServer,主要作用如下:
  3. 1. 对于数据的操作: get,put,delete
  4. 2. 对于Region的操作: splitRegion,compactRegion
  5. # Master
  6. - Master是所有Region Server的管理者,其实现类是HMaster,主要作用如下:
  7. 1. 对于表的操作: create,delete,alter
  8. 2. 对于RegionServer的操作: 分配regions到每个RegionServer,监控每个RegionServer的状态,负载均衡和故障转移
  9. # Zookeeper
  10. - HBase通过Zookeeper来做master的高可用,RegionServer的监控,元数据的入口以及集群配置的维护等操作
  11. # HDFS
  12. - HDFS为HBase提供最终的底层数据存储服务,同时,为HBase提供高可用的支持

第二章.HBase快速入门

1.HBase安装部署

首先保证Hadoop集群和Zookeeper集群的正常部署及启动

  1. 解压HBase到指定目录
  1. tar -zxvf hbase-2.0.5-bin-tar-gz -C /opt/module
  1. 配置环境变量
  1. sudo vim /etc/profile.d/my_env.sh
  2. # 添加
  3. export HBASE_HOME=/opt/module/hbase-2.0.5
  4. export PATH=$PATH:$HBASE_HOME/bin
  1. 进入/opt/module/hbase-2.0.5/config目录,修改如下三个文件内容

hbase-env.sh 修改内容

  1. export HBASE_MANAGES_ZK=false

hbase-site.xml修改内容

  1. <configuration>
  2. <property>
  3. <name>hbase.rootdir</name>
  4. <value>hdfs://hadoop102:9820/hbase</value>
  5. </property>
  6. <property>
  7. <name>hbase.cluster.distributed</name>
  8. <value>true</value>
  9. </property>
  10. <property>
  11. <name>hbase.zookeeper.quorum</name>
  12. <value>hadoop102,hadoop103,hadoop104</value>
  13. </property>
  14. </configuration>

regionservers修改内容

  1. hadoop102
  2. hadoop103
  3. hadoop104
  1. HBase远程发送到其他集群
  1. xsync /opt/module/hbase-2.0.5
  1. HBase服务的启动
  1. # 单点启动
  2. hbase-daemon.sh start master
  3. hbase-daemon.sh start regionserver
  4. # 群起
  5. start-hbase.sh
  6. # 群停
  7. stop-hbase.sh
  1. 配置高可用

在HBase中HMaster负责监控HRegionServer的生命周期,均衡RegionServer的负载,如果HMaster挂掉了,那么整个HBase集群将陷入不健康的状态,并且此时的工作状态并不会维持太久,所以HBase支持对HMaster的高可用配置

  1. # 关闭HBase集群
  2. stop-hbase.sh
  3. # 在conf目录下创建backup-masters文件
  4. touch backup-masters
  5. echo hadoop103 > backup-masters
  1. 查看HBase页面

启动成功后,可以通过”host:port”的方式来访问HBase管理页面

http://hadoop102:16010

$01[HBase入门] - 图4

2.HBase Shell操作

1.基本操作

  1. # 进入HBase客户端命令
  2. hbase shell
  3. # 查看帮助命令
  4. help

2.namespace的操作

  1. 查看当前HBase中有哪些namespace
  1. list_namespace

$01[HBase入门] - 图5

  1. 创建namespace
  1. create_namespace 'haha',{'auth' => 'jcsune','leader'=>'jcsune'}
  1. 查看namespace
  1. describe_namespace 'haha'

$01[HBase入门] - 图6

  1. 修改namespace信息(添加或修改属性)
  1. alter_namespace 'haha',{METHOD=>'unset',NAME=>'auth'},{METHOD=>'set','leader'='ccsune'}

$01[HBase入门] - 图7

  1. 删除namespace(注意:要删除的namespace必须是空的,其下没有表)
  1. drop_namespace 'haha'

3.表的操作

  1. 创建表
  1. create 'xixi','info'
  1. 查看表的结构
  1. desc 'xixi'

$01[HBase入门] - 图8

  1. 变更表信息
  1. alter 'xixi',NAME=>'info',VERSIONS=>5

$01[HBase入门] - 图9

  1. 查看表是否上线(下线)
  1. # 查看是否上线
  2. is_enabled 'xixi'
  3. # 查看是否下线
  4. is_disenabled 'xixi'
  5. # 让表下线
  6. disable 'xixi'
  7. # 让表上线
  8. enable 'xixi'
  1. 插入数据到表
  1. put 'xixi', '1001', 'info:name', 'zhangsan'
  2. put 'xixi', '1001', 'info:age', '23'
  3. put 'xixi', '1002', 'info:name', 'lisi'
  4. put 'xixi', '1003', 'info:name', 'wangwu'
  1. 查看指定行或指定列族:列的数据
  1. get 'xixi', '1001'
  2. get 'xixi', '1001', 'info:name'

$01[HBase入门] - 图10

  1. 扫描
  1. scan 'xixi' #扫描全表
  2. scan 'xixi',{RAW=>true,VERSION=>2}

$01[HBase入门] - 图11

  1. 统计表数据行数
  1. count 'xixi'
  1. 删除数据
  1. delete 'xixi','1001','info:name',1627669834825 #指定删除某一版本单元格
  2. deleteall 'xixi','1001','info:name' #删除所有版本单元格
  1. 清空表数据
  1. truncate 'xixi' #注意:清空表的数据为先disable,然后再truncate
  1. 删除表
  1. # 首先先让该表为disable状态
  2. disable 'xixi'
  3. # 然后才能删除这个表
  4. drop 'xixi'