我的大数据之路 -- Hbase框架的使用(一)

官方网址:http://hbase.apache.org/

  • HBase是什么妖怪?
    要解释HBase,我们就先说一说经常接触到的RDBMS,即关系型数据库:

一、mysql:

  • 有开源社区版本的,有企业收费版本的

  • 遵循主从架构

  • 端口号:3306

  • sqlserver:

  • 微软公司开发的产品,主要用于windows平台下的项目

  • 端口号:1433

二、 oracle:

  • 超强的集群性能

  • 端口号:1521

三、 HBase:

  • 灵感来自于Google的BigTable论文

  • 一般于Hadoop结合使用,是Hadoop项目的子项目

  • 基于key-value的形式存储数据

  • 高性能,高可靠,面向列,可伸缩的分布式存储系统

  • 没有sql语句,一般用API操作

  • 适用于单表数据量超大,且不能分表

  • 分布式架构,支持服务器在线添加和移除

  • 面向列的非关系型数据库,分布式架构

  • 用于存储数据和检索数据,一般会直接接入在线业务

  • 不依赖于yarn和mapreduce

四、 Hive:

  • 是数据仓库,不是数据库

  • 一般用于分析,并不会直接接入到在线业务

  • 实际上是将hql语句转化为mapreduce任务运行在yarn平台上

五、最后说一说RDBMS和HBase的区别:

RDBMS使用sql语句,HBase使用API

  • RDBMS基于行存储,HBase基于列存储且支持更好的压缩

  • RDBMS适用于存储结构化数据,HBase适用于存储结构化和非结构化数据

  • RDBMS支持事务处理,HBase不支持事务处理

  • RDBMS支持多表Join,HBase不支持多表Join

  • RDMBS更新表数据会自动更新索引文件,HBase需要手动建立索引,手动更新

  • RDMBS适用于业务逻辑复杂的存储环境,HBase不适合。

  • RDMBS不适合存储超大数据量的单表,HBase适合。

读完上边的内容,大概应该知道HBase是个什么妖怪了吧。

  • HBase基本进程

HMaster

HMaster节点有如下功能:

1 为HRegionServer分配HRegion

2 负责HRegionServer的负载均衡

3 发现失效的HRegionServer并重新分配其上的HRegion

4 HDFS上的垃圾文件回收

5 处理Schema更新请求

HRegionServer

1 维护HMaster分配给他的HRegion,处理HRegion的IO请求

2 负责切分正在运行过程中变的过大的HRegion

  • HBase基本原理
    请看图:
    在这里插入图片描述
    注:一般而言,Master和NameNode在一台服务器上,RegionServer与DataNode在同一个服务器上。
    Client:

包含访问HBase的接口,并维护cache来加快对HBase的访问。说白了,就是用来访问HBase的客户端。

  • HMaster:

这个东西是HBase的主节点,用来协调Client端应用程序和HRegionServer的关系,管理分配HRegion给HRegionserver服务器。

  • HRegionServer:

Hbase的从节点,管理当前自己这台服务器上面的HRegion,HRegion是Hbase表的基础单元组建,存储了分布式的表。HRegionserver负责切分在运行过程中变得过大的HRegion。

  • HRegion:

一个Table可以有多个HRegion,HBase使用rowKey将表水平切割成多个HRegion,每个HRegion都纪录了它的StartKey和EndKey(第一个HRegion的StartKey为空,最后一个HRegion的EndKey为空),由于RowKey是排序的,因而Client可以通过HMaster快速的定位每个RowKey在哪个HRegion中。HRegion由HMaster分配到相应的HRegionServer中,然后由HRegionServer负责HRegion的启动和管理,和Client的通信,负责数据的读(使用HDFS)。每个HRegionServer可以同时管理1000个左右的HRegion,出处请参看论文:BigTable(5 Implementation节):Each tablet server manages a set of tablets(typically we have somewhere between ten to a thousand tablets per tablet server))。

  • MemStore:

它是一个写缓存,数据先WAL[write ahead log](也就是HLog它是一个二进制文件,所有写操作都会先保证将数据写入这个Log文件后,才会真正更新MemStore,最后写入HFile中),在写入MemStore后,由MemStore根据一定的算法将数据Flush到底层HDFS文件中(HFile),一般而言,对于每个HRegion中的每个Column Family来说,有一个自己的MemStore。

  • StoreFile:

1个HStore,由一个MemStore和0~N个StoreFile组成。

  • HFile:

用于存储HBase的数据(Cell/KeyValue),在HFile中的数据是按RowKey、Column Family、Column排序,对于相同的数据单元,排序则按照时间戳(Timestamp)倒叙排列。

  • Zookeeper:

HBase内置有zookeeper,但一般我们会有其他的Zookeeper集群来监管master和regionserver,Zookeeper通过选举,保证任何时候,集群中只有一个活跃的HMaster,HMaster与HRegionServer 启动时会向ZooKeeper注册,存储所有HRegion的寻址入口,实时监控HRegionserver的上线和下线信息。并实时通知给HMaster,存储HBase的schema和table元数据,默认情况下,HBase 管理ZooKeeper 实例,Zookeeper的引入使得HMaster不再是单点故障。一般情况下会启动两个HMaster,非Active的HMaster会定期的和Active HMaster通信以获取其最新状态,从而保证它是实时更新的,因而如果启动了多个HMaster反而增加了Active HMaster的负担。如图:

一 、HBase基础概念

1 HBase数据存储目录

  • 存储默认命令空间表文件,创建表的时候如果不指定命令空间(库),默认创建在default下面, /hbase/data/default

  • 存储HBase元数据的表文件,/hbase/data/hbase:

2 HDFS中如图:
数据存储
在这里插入图片描述
HBase中存取数据直接使用字节数组,没有其他数据类型

二、 HBase存储结构

1 rowkey:行键

用来唯一标识每行数据,类似RDBMS中的唯一主键

2 Column Family(CF):列族

列族,拥有一个名称(string),包含一个或者多个相关列

3 Column:列

字段名称,或列名

4 Cell:单元格

最基本的存储单元,用于列的实际值的存储。

5 Timestamp:时间戳

数据插入到表中的时间

三、 版本

HBase中每个列的值可以有多个版本(副本),默认情况下,有3个版本,只显示最新的版本。

1 存储形式:键值对

rowKey + Column Family + Timestamp:value

2 HBase表的物理模型
表会根据rowKey被划分成多个region,默认情况下,刚开始每张表只有一个region

3 同一张表通常会基于rowKey被划分成多个region

4 同一张表的多个region被master分配到多台regionserver管理

5 同一台regionserver服务器可以管理不同的表的region

6 当某台regionserver服务器宕机以后,master会把这台服务器上面管理的region重新分配给其他的regionserver服务器

四、HBase常用操作
接下来我们进行一些HBase的操作测试,测试前请确保你的节点中启动了对应的HMaster进程和HRegionServer

1 创建表测试

首先进入到HBase操作命令行:

$ bin/hbase shell,如下图:

接下来可以使用help命令来查看一些帮助提示:

hbase(main):001:0> help,如图:

使用list命令,可以查看当前数据库中有哪些数据表

hbase(main):002:0> list
在这里插入图片描述

好,那么下面我们来创建一个表:

这个表用来描述学生的一些基本信息吧:

hbase(main):003:0> create 'student','info',执行后如图:

在这里插入图片描述
执行完毕后,可以使用list命令查看一下,在此不再截图展示了
解释:

‘student’:表名

‘info’:列族名,就是说这个列族可能包含多个列,比如Info列族中可能包含name,sex等列,画个图不够严谨的解释下:

在这里插入图片描述
接下来往表里放置一些数据:

我先语言表述一下第一行执行的含义,后边以此类推:

向student这张表中插入数据,rowKey为1001列族:列,为info:name,值value为Ysh

hbase(main):005:0> put 'student','1001','info:name','Ysh'

hbase(main):008:0> put 'student','1001','info:sex','male'

hbase(main):009:0> put 'student','1001','info:age','20'

向student这张表中插入数据,rowKey为1002列族:列,为info:name,值value为Cjy

hbase(main):007:0> put 'student','1002','info:name','Cjy'

hbase(main):008:0> put 'student','1002','info:sex','female'

hbase(main):009:0> put 'student','1002','info:age','19'

OK,插入成功后,使用scan来看一下这张表内容

hbase(main):010:0> scan ‘student’,如图:
在这里插入图片描述
接下来我们来看一些其他的命令

  • 查看表结构
    hbase(main):014:0> describe ‘student’,如图
    在这里插入图片描述
  • 更新数据/更新指定字段数据

    hbase(main):018:0> put 'student','1001','info:name','Nick'
        
    hbase(main):019:0> put 'student','1001','info:age','25'
    
  • 完成后scan下如图:
    在这里插入图片描述

  • get查看数据

    查看rowKey为1001的数据

    hbase(main):015:0> get 'student','1001'
    
    hbase(main):015:0> get 'student','1002'
    

    在这里插入图片描述

    查看rowKey为1001,且列名为name的数据

    hbase(main):018:0> get 'student','1001','info:name'
    

    在这里插入图片描述

  • scan查看数据

    查看ROWKEY从1001到1007的数据,注意,规则为“前包含后不包含”,即下面的查询是不包含1007那一个rowKey的数据的。

    hbase(main):023:0> scan 'student',{STARTROW => '1001',STOPROW => '1007'},如图: startrow --> stoprow

    在这里插入图片描述
    因为这里我只插入了两行数据,所以并不存在1003-1006的数据,所以不显示~

  • 删除数据

    我们把1001这一rowKey的所有数据删除掉,使用命令:

    deleteall 'student','1001'

    如果只想删除某一个rowKey中的某一个列的数据,使用命令:

    delete 'student','1001','info:name',然后get一下如图:
    在这里插入图片描述

    可以看到1001的name这一列的数据删除掉了

  • 清空数据表

    hbase(main):023:0> truncate 'student'
    在这里插入图片描述
    看到这里之后,你list一下会发现,这个表还在,但是scan一下发现数据没了

  • 删除表

    首先需要先让该表为disable状态,使用命令:

    hbase(main):033:0> disable 'student'

    然后才能drop这个表,使用命令:

    hbase(main):040:0> drop 'student'

    尖叫提示:如果直接drop表,会报错:Drop the named table. Table must first be disabled,如图:

  • 统计一张表有多少行数据

    为了展示一张表有多少行数据,我先重新创建student表,并重新put数据,然后使用命令:

    hbase(main):046:0> count 'student'

    当然了,我插入了2行数据,为1001,1002

  • 总结
    这一节我们了解了Hbase的存储结构,以及相关特性,并与Hive以及RDBMS进行了一些对比说明,最后写了一点小练习,希望各位可以动手操作一下Hbase,在此之前确保你的集群正常运行。

参考博客
https://www.jianshu.com/p/44e0327798ad

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值