Hbase01

文章目录

大数据数据库之hbase

一、课前准备

  1. 安装好对应版本的hadoop集群
  2. 安装好对应版本的zookeeper集群

课前预热漫画学习hbase

二、课堂主题

本堂课主要围绕hbase的基础知识点进行讲解。主要包括以下几个方面

  1. hbase的核心概念
  2. hbase的特点
  3. hbase的架构图
  4. hbase存储数据结构
  5. hbase的安装部署
  6. hbase shell命令基本操作

三、课堂目标

  1. 理解hbase的核心概念
  2. 掌握hbase的特点
  3. 掌握hbase的架构
  4. 掌握hbase存储数据结构
  5. 掌握hbase的安装部署
  6. 掌握hbase shell命令基本操作

四、知识要点

1. hbase是什么(15分钟)

漫画学习hbase----最易懂的Hbase架构原理解析
http://developer.51cto.com/art/201904/595698.htm
1.1 hbase的概念
  • hbase基于Google的BigTable论文,是建立的hdfs之上,提供高可靠性高性能列存储可伸缩实时读写的分布式数据库系统。在需要实时读写随机访问超大规模数据集时,可以使用hbase。
1.2 hbase的特点
  • 海量存储

    • 可以存储大批量的数据
  • 列式存储

    • hbase表的数据是基于列族进行存储的,列族是在列的方向上的划分。
      在这里插入图片描述
      在这里插入图片描述
  • 极易扩展

    • 底层依赖HDFS,当磁盘空间不足的时候,只需要动态增加datanode节点服务(机器)就可以了
    • 可以通过增加服务器来提高集群的存储能力
  • 高并发

    • 支持高并发的读写请求(支持大量的客户端同时访问hbase表)
  • 稀疏

    • 稀疏主要是针对Hbase列的灵活性,在列族中,你可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的。
  • 数据的多版本

    • hbase表中的数据可以有多个版本值,默认情况下是根据版本号去区分,版本号就是插入数据的时间戳
    • 在这里插入图片描述
  • 数据类型单一

    • 所有的数据在hbase中是以字节数组 进行存储
  • 和hive的区别

  • hive只是一个工具(通过SQL语句处理后转换成了mr程序),hive是对数据分析,hbase是对数据进行海量的存储(查询效率非常高),hbase支持数据的实时读写,性能非常的高。

  • hbase是数据库,hive是工具(通过写mr程序对大量数据进行分析)
    在这里插入图片描述

2、hbase整体架构(20分钟)

在这里插入图片描述

  • 1、Client

    • 客户端
      • Client包含了访问Hbase的接口
      • 另外Client还维护了对应的cache(对于经常访问的数据做cache缓存)来加速Hbase的访问,比如cache的.META.元数据的信息
  • 2、Zookeeper

    • zookeeper集群
      • 作用
        • 实现了HMaster的高可用
        • 保存了hbase的元数据信息,是所有hbase表的寻址入口
        • 对HMaster和HRegionServer实现了监控
  • 3、HMaster

    • hbase集群的老大
      • 作用
        • 为HRegionServer分配Region
        • 维护整个集群的负载均衡
        • 维护集群的元数据信息
        • 发现失效的Region,并将失效的Region分配到正常的HRegionServer上
  • 4、HRegionServer

    • hbase集群中的小弟
      • 负责管理Region
      • 接受客户端的读写数据请求
      • 切分在运行过程中变大的region
  • 5、Region

  • hbase集群中分布式存储的最小单元

在这里插入图片描述

3、hbase表的数据模型(20分钟)

在这里插入图片描述

  • rowkey

    • 行键
      • table的主键,table中的记录按照rowkey 的字典序进行排序
        在这里插入图片描述
  • Column Family

    • 列族
      • hbase表中的每个列,都归属与某个列族。列族是表的schema的一部分(而列不是),必须在使用表之前定义。
  • Timestamp

    • 时间戳
      • 每次数据操作对应的时间戳,可以看作是数据的version number版本号
        在这里插入图片描述
  • Column

      • 列族下面的具体列
      • 属于某一个ColumnFamily,类似于我们mysql当中创建的具体的列
  • cell

    • 单元格
      • 由{row key, column( = +
      • cell中的数据是没有类型的,全部是以字节数组进行存储

在这里插入图片描述

4、hbase集群安装部署(5分钟)

  • 1、下载安装包

    • http://archive.apache.org/dist/hbase/1.2.1/hbase-1.2.1-bin.tar.gz
    • hbase-1.2.1-bin.tar.gz
  • 2、规划安装目录

    • /opt/bigdata
  • 3、上传安装包到服务器

  • 4、解压安装包到指定的规划目录

    • tar -zxvf hbase-1.2.1-bin.tar.gz -C /opt/bigdata
  • 5、重命名解压目录

    • mv hbase-1.2.1 hbase
  • 6、修改配置文件

    • 1、需要把hadoop中的配置core-site.xml 、hdfs-site.xml拷贝到hbase安装目录下的conf文件夹中

    • 2、修改conf目录下配置文件

      • 修改 hbase-env.sh
      #添加java环境变量
      export JAVA_HOME=/opt/bigdata/jdk
      #指定使用外部的zk集群
      export HBASE_MANAGES_ZK=FALSE
      
      • 修改 hbase-site.xml
      <configuration>
                <!-- 指定hbase在HDFS上存储的路径 -->
              <property>
                      <name>hbase.rootdir</name>
                      <value>hdfs://node1:9000/hbase</value>
              </property>
                      <!-- 指定hbase是分布式的 -->
              <property>
                      <name>hbase.cluster.distributed</name>
                      <value>true</value>
              </property>
                      <!-- 指定zk的地址,多个用“,”分割 -->
              <property>
                      <name>hbase.zookeeper.quorum</name>
                      <value>node1:2181,node2:2181,node3:2181</value>
              </property>
      </configuration>       
      
      • 修改regionservers
      #指定regionserver节点
      node2
      node3
      
      • 修改backup-masters(指定hbase集群备用的hmaster地址)
      node2
      
  • 7、配置hbase的环境变量

    export HBASE_HOME=/opt/bigdata/hbase(这里要按照自己的jave安装目录来配置)
    export PATH=$PATH:$HBASE_HOME/bin
    
  • 8、分发hbase目录和环境变量到其他节点

    scp -r hbase node2:/opt/bigdata
    scp -r hbase node3:/opt/bigdata
    scp /etc/profile node2:/etc
    scp /etc/profile nod3:/etc
    
  • 9、让所有节点的hbase环境变量生效

    • 在所有节点执行
      • source /etc/profile

5、hbase集群的启动和停止(5分钟)

5.1 启动
  • 前提条件:先启动hadoop和zk集群
  • 启动hbase
  • start-hbase.sh

我们启动zk的时候要每个节点分别启动有些麻烦,后期如果节点非常多的话会很麻烦,因此可以通过写一个脚本来实现同时启动多台机器的zkServer.sh

  • 一键启动zk脚本

在这里插入图片描述
在这里插入图片描述

  • 一键关闭zk的脚本
    在这里插入图片描述
5.2 停止
  • 停止hbase
    • stop-hbase.sh

6、hbase集群的web管理界面(5分钟)

启动好hbase集群之后,可以访问地址:HMaster的主机名:16010

例如:
	http://node1:16010


可以看到整个hbase集群的相关信息.

7、hbase shell 命令基本操作(25分钟)

详细见《HBase常用shell操作.md》操作文档

HBase常用shell操作

1、进入Hbase客户端命令操作界面
hbase shell
2、查看帮助命令
hbase(main):001:0> help
3、查看当前数据库中有哪些表
hbase(main):006:0> list
4、创建一张表
  • 创建user表, 包含base_info、extra_info两个列族
hbase(main):007:0> create 'user', 'base_info', 'extra_info'

或者

create 'user', {NAME => 'base_info', VERSIONS => '3'}{NAME => 'extra_info'}

在这里插入图片描述

5、添加数据操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 向user表在这里插入图片描述中插入信息,row key为 rk0001,列族base_info中添加name列标示符,值为zhangsan
hbase(main):008:0> put 'user', 'rk0001', 'base_info:name', 'zhangsan'
  • 向user表中插入信息,row key为rk0001,列族base_info中添加gender列标示符,值为female
hbase(main):009:0> put 'user', 'rk0001', 'base_info:gender', 'female'
  • 向user表中插入信息,row key为rk0001,列族base_info中添加age列标示符,值为20
hbase(main):010:0>  put 'user', 'rk0001', 'base_info:age', 20
  • 向user表中插入信息,row key为rk0001,列族extra_info中添加address列标示符,值为beijing
hbase(main):011:0> put 'user', 'rk0001', 'extra_info:address', 'beijing'
6、查询数据
6.1 通过rowkey进行查询
  • 获取user表中row key为rk0001的所有信息
hbase(main):006:0> get 'user', 'rk0001'
6.2 查看rowkey下面的某个列族的信息
  • 获取user表中row key为rk0001,base_info列族的所有信息
hbase(main):007:0> get 'user', 'rk0001', 'base_info'
6.3 查看rowkey指定列族指定字段的值
  • 获取user表中row key为rk0001,base_info列族的name、age列标示符的信息
hbase(main):008:0> get 'user', 'rk0001', 'base_info:name', 'base_info:age'
6.4 查看rowkey指定多个列族的信息
  • 获取user表中row key为rk0001,base_info、extra_info列族的信息
hbase(main):010:0> get 'user', 'rk0001', 'base_info', 'extra_info'

或者

hbase(main):011:0> get 'user', 'rk0001', {COLUMN => ['base_info', 'extra_info']}

或者
hbase(main):012:0> get 'user', 'rk0001', {COLUMN => ['base_info:name', 'extra_info:address']}
6.5 指定rowkey与列值查询
  • 获取user表中row key为rk0001,cell的值为zhangsan的信息
hbase(main):013:0> get 'user', 'rk0001', {FILTER => "ValueFilter(=, 'binary:zhangsan')"}

在这里插入图片描述

6.6 指定rowkey与列值模糊查询
  • 获取user表中row key为rk0001,列标示符中含有a的信息
hbase(main):015:0> get 'user', 'rk0001', {FILTER => "(QualifierFilter(=,'substring:a'))"}
6.7 继续插入一批数据
hbase(main):016:0> put 'user', 'rk0002', 'base_info:name', 'fanbingbing'

hbase(main):017:0> put 'user', 'rk0002', 'base_info:gender', 'female'

hbase(main):018:0> put 'user', 'rk0002', 'base_info:birthday', '2000-06-06'

hbase(main):019:0> put 'user', 'rk0002', 'extra_info:address', 'shanghai'
6.8 查询所有数据
  • 查询user表中的所有信息
hbase(main):020:0> scan 'user'

在这里插入图片描述

6.9 列族查询
  • 查询user表中列族为 base_info 的信息
hbase(main):021:0> scan 'user', {COLUMNS => 'base_info'}


hbase(main):022:0> scan 'user', {COLUMNS => 'base_info', RAW => true, VERSIONS => 5}

## Scan时可以设置是否开启Raw模式,开启Raw模式会返回包括已添加删除标记但是未实际删除的数据
## VERSIONS指定查询的最大版本数
6.10 多列族查询
  • 查询user表中列族为info和data的信息
hbase(main):023:0> scan 'user', {COLUMNS => ['base_info', 'extra_info']}
hbase(main):024:0> scan 'user', {COLUMNS => ['base_info:name', 'extra_info:address']}

6.11 指定列族与某个列名查询
  • 查询user表中列族为base_info、列标示符为name的信息
hbase(main):025:0> scan 'user', {COLUMNS => 'base_info:name'}
6.12 指定列族与列名以及限定版本查询
  • 查询user表中列族为base_info、列标示符为name的信息,并且版本最新的5个
hbase(main):026:0> scan 'user', {COLUMNS => 'base_info:name', VERSIONS => 5}
6.13 指定多个列族与按照数据值模糊查询
  • 查询user表中列族为 base_infoextra_info且列标示符中含有a字符的信息
hbase(main):027:0> scan 'user', {COLUMNS => ['base_info', 'extra_info'], FILTER => "(QualifierFilter(=,'substring:a'))"}
6.14 rowkey的范围值查询
  • 查询user表中列族为info,rk范围是[rk0001, rk0003)的数据
hbase(main):028:0> scan 'user', {COLUMNS => 'base_info', STARTROW => 'rk0001', ENDROW => 'rk0003'}
6.15 指定rowkey模糊查询
  • 查询user表中row key以rk字符开头的
hbase(main):029:0> scan 'user',{FILTER=>"PrefixFilter('rk')"}
7、更新数据
  • 更新操作同插入操作一模一样,只不过有数据就更新,没数据就添加
7.1 更新数据值
  • 把user表中rowkey为rk0001的base_info列族下的列name修改为zhangsansan
hbase(main):030:0> put 'user', 'rk0001', 'base_info:name', 'zhangsansan'
7.2 更新版本号
  • 将user表的 base_info 列族版本号改为5
hbase(main):031:0> alter 'user', NAME => 'base_info', VERSIONS => 5
8、删除数据和表
8.1 指定rowkey以及列名进行删除
  • 删除user表row key为rk0001,列标示符为 base_info:name 的数据
hbase(main):032:0>  delete 'user', 'rk0001', 'base_info:name' 
8.2 指定rowkey,列名以及字段值进行删除
  • 删除user表row key为rk0001,列标示符为base_info:name,timestamp为1392383705316的数据
hbase(main):033:0> delete 'user', 'rk0001', 'base_info:age', 1564745324798
8.3 删除列族
  • 删除 base_info 列族
hbase(main):034:0> alter 'user', NAME => 'base_info', METHOD => 'delete'

或者

hbase(main):035:0> alter 'user', 'delete' => 'base_info'
8.4 清空表数据
  • 删除user表数据
hbase(main):036:0> truncate 'user'
8.5 删除表
  • 删除user表
#先disable  再drop

hbase(main):036:0> disable 'user'
hbase(main):037:0> drop 'user'

#如果不进行disable,直接drop会报错
ERROR: Table user is enabled. Disable it first.

五、拓展点、未来计划、行业趋势 (5分钟)

8、Hbase在实际场景中的应用

8.1、交通方面
  • 船舶GPS信息,全长江的船舶GPS信息,每天有1千万左右的数据存储。
8.2、金融方面
  • 消费信息、贷款信息、信用卡还款信息等
8.3、电商方面
  • 电商网站的交易信息、物流信息、游览信息等
8.4、电信方面
  • 通话信息、语音详单等

总结:海量明细数据的存储,并且后期需要有很好的查询性能

六、总结

[外链图片转存失败(img-2u2gf5wC-1566567066432)(hbase_day01课程设计.assets/hbase基础知识点.png)]

七、作业

八、互动问答

九、题库 - 本堂课知识点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值