HBase入门篇

目录

一、HBase概述

1.1 HBase的定义

1.2 HBase的特点

1.3 HBase机制原理图

1.4 HBase中的角色

1.4.1 HMaster

1.4.2 RegionServer

1.4.3 其他组件

二、HBase Shell操作

2.1 HBase Shell基本操作

2.1 HBase 数据表操作

三、HBase数据结构

3.1 HBase RowKey设计

3.2 Column Family

3.3 Time Stamp

3.4 命名空间


一、HBase概述

1.1 HBase的定义

        HBase是一个分布式的、面向列的开源数据库。

        HBase不同于一般的数据库,它是一个构建在 HDFS 基础之上的非关系型数据库,适合于非结构化数据存储,是基于列的。

        HBase不提供SQL语句接口,可以通过API或者指令操作。

 

1.2 HBase的特点

(1)列式存储

        列式存储指的是列族存储,HBase是根据列族来存储数据的。列族下面可以有非常多的列,列族在创建表的时候就必须指定

(2)海量存储

       HBase 适合 PB 级别以上的海量数据存储,在 PB 级别的数据量以及廉价 PC 的情况下,能够在几十到百毫秒内返回数据。这与 HBase 的极易扩展性息息相关,正因为 HBase 良好的扩展性,才为海量数据的存储提供了便利

(3)极易扩展

        HBase 的极易扩展性主要体现在两个方面:一个是基于上层处理能力的扩展,一个是基于存储的扩展。
        通过横向添加 RegionServer 的机器,进行水平扩展,提高HBase的上层处理能力,提升HBase服务更多Region的能力。
        通过横向添加DataNode机器,进行存储扩容,提高HBase的存储能力和提升后端存储读写能力。

(4)高并发

        由于目前大部分使用HBase的架构,都是采用的廉价PC,因此单个IO的延迟其实并不小,一般在几十到上百ms之间。这里说的高并发,是指:Hbase要把数据写到hdfs,再由hdfs写入磁盘,流程虽然繁琐,但其单个IO延迟下降并不多,主要突出其架构的优越性。能获得高并发、低延迟的服务。

(5)稀疏

        稀疏指的是HBase的灵活性,HBase是面向列存储的,在列族中可以指定多个列,也可以没有列,不指定列的时候不会占用空间。

 

1.3 HBase机制原理图

 

1)Client

        Client包含了访问HBase的接口,还维护了对应的cache来加速HBase的访问,比如cache的.META.元数据的信息。

2)Zookeeper

  • 搭建高可用集群,保证集群中只有一个Master在运行,当这个Master挂掉的时候,通过竞争机制重新产生新的Master。
  • 元数据的入口
  • 监听RegionServer,当RegionSevrer有异常的时候,通过回调的形式通知Master RegionServer上下线的信息

3)HMaster

  • 为RegionServer分配Region
  • 维护整个集群的负载均衡
  • 管理维护集群的元数据
  • 发现Region失效的时候,将正常的Region分配到RegionServer
  • 当RegionServer失效的时候,协调对应的HLog的拆分

4)HRegionServer 

  • 管理Master为其分配的Region
  • 处理来自客户端的读写请求
  • 负责和底层的HDFS交互,将数据存储到HDFS
  • 负责Region变大以后的拆分
  • 负责StoreFile的合并

5)HDFS

  • 提供元数据和表数据的底层分布式存储服务
  • 数据多副本保证高可靠和高可用性

 

1.4 HBase中的角色

1.4.1 HMaster

功能:

  • 监控RegionServer,处理RegionServer故障转移
  • 处理元数据的变更
  • 处理Region的分配和转移
  • 在空闲的时间进行数据的负载均衡
  • 通过Zookeeper发布元数据的位置给客户端

1.4.2 RegionServer

功能:

  • 负责存储HBase的实际数据
  • 管理分配给它的Region,负责Region分片(自动分片)
  • 刷新缓存到HDFS
  • 维护HLog(每一个RegionServer中都有一个HLog)
  • 执行压缩

1.4.3 其他组件

1. Write-Ahead logs(WAL,HLOG&edits日志)

        HBase的修改记录,当HBase读写数据的时候,数据不是直接写入磁盘的,会在内存中保留一段时间(时间及数量阈值可以设置),保存在内存中提高了数据丢失的可能性。所以数据会先写在一个叫做Write-Ahead logfile的文件中,然后再写入内存中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。

2. Region

        HBase表的分片,HBase表会根据RowKey切分成不同Region存储在RegionServer上,一个RegionServer上可以存储多个Region。

3. Store

        HFile存储在Store中,一个Store对应HBase表中的一个列族。

4. MemStore

        内存存储,保存在内存中,用于保存当前的数据操作,所以当数据保存到WAL之后,RegionServer会在内存中存储键值对。

5. HFile

        在磁盘上保存原始数据的实际物理文件,是实际的存储文件,StoreFile是以HFile的形式存储在HDFS的。

6.StoreFile

        HFile是Hadoop的二进制格式文件,实际上StoreFile就是对HFile做了轻量级包装,即StoreFile底层就是HFile。

 

二、HBase Shell操作

2.1 HBase Shell基本操作

1.进入HBase客户端命令行(任意节点均可)
[root@hadoop003 hbase]$ bin/hbase shell

2.查看帮助命令
hbase(main):001:0> help

3.查看当前数据库中有哪些表
hbase(main):002:0> list

2.1 HBase 数据表操作

1.创建表
hbase(main):002:0> create 'student','info'  

2.插入数据到表
hbase(main):003:0> put 'student','1001','info:sex','male'
hbase(main):004:0> put 'student','1001','info:age','18'
hbase(main):005:0> put 'student','1002','info:name','Janna'
hbase(main):006:0> put 'student','1002','info:sex','female'
hbase(main):007:0> put 'student','1002','info:age','20'

3.扫描查看表数据
hbase(main):008:0> scan 'student'
hbase(main):009:0> scan 'student',{STARTROW => '1001', STOPROW  => '1002'}
hbase(main):010:0> scan 'student',{STARTROW => '1001'}

4.查看表结构
hbase(main):011:0> describe 'student'

5.更新指定字段的数据
hbase(main):012:0> put 'student','1001','info:name','Nick'
hbase(main):013:0> put 'student','1001','info:age','100'

6.查看“指定行”或“指定列族:列”的数据
hbase(main):014:0> get 'student','1001'
hbase(main):015:0> get 'student','1001','info:name'

7.统计表数据行数
hbase(main):021:0> count 'student'

8.删除数据
删除某rowkey的全部数据:
hbase(main):016:0> deleteall 'student','1001'
删除某rowkey的某一列数据:
hbase(main):017:0> delete 'student','1002','info:sex'

9.清空表数据(表结构还在)
hbase(main):018:0> truncate 'student' 
提示:清空表的操作顺序为先disable,然后再truncate。

10.删除表
首先需要先让该表为disable状态:
hbase(main):019:0> disable 'student'
然后才能drop这个表:
hbase(main):020:0> drop 'student'
提示:如果直接drop表,会报错:ERROR: Table student is enabled. Disable it first.

11.变更表信息
将info列族中的数据存放3个版本:
hbase(main):022:0> alter 'student',{NAME=>'info',VERSIONS=>3}
hbase(main):022:0> get 'student','1001',{COLUMN=>'info:name',VERSIONS=>3}

三、HBase数据结构

3.1 HBase RowKey设计

与NoSQL数据库一样,RowKey是用来检索记录的主键。访问HBASE table中的行,只有三种方式:

        1.通过单个RowKey访问   get ‘student’,’1001’,’info:age’

        2.通过RowKey的range   scan ‘student’,{STARTROW=>’1001’,STOPROW=>’1003’}

        3.全表扫描 scan ‘student’

        RowKey行键 (RowKey)可以是任意字符串(最大长度是64KB,实际应用中长度一般为 10-100bytes),在HBase内部,RowKey保存为字节数组。存储时,数据按照RowKey的字典序(byte order)排序存储。设计RowKey时,要充分利用排序存储这个特性,将经常一起读取的行存储放到一起。(位置相关性)

3.2 Column Family

        列族:HBase表中的每个列,都归属于某个列族。列族是表的schema的一部分(而列不是),必须在使用表之前定义。列名都以列族作为前缀。例如 courses:history,courses:math都属于courses 这个列族。

3.3 Time Stamp

        HBase 中通过rowkey和columns确定的为一个存贮单元称为cell。cell中的数据是没有类型的,全部是字节数组形式存贮。每个 cell都保存着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是 64位整型。时间戳可以由HBase (在数据写入时自动 )赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。每个 cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。

        为了避免数据存在过多版本造成的的管理 (包括存贮和索引)负担,HBase提供了两种数据版本回收方式。一是保存数据的最后n个版本,二是保存最近一段时间内的版本(比如最近七天)。用户可以针对每个列族进行设置。

3.4 命名空间

 

1) Table:表,所有的表都是命名空间的成员,即表必属于某个命名空间,如果没有指定,则在default默认的命名空间中。Create_namespace

2) RegionServer group:一个命名空间包含了默认的RegionServer Group。

3) Permission:权限,命名空间能够让我们来定义访问控制列表ACL(Access Control List)。例如,创建表,读取表,删除,更新等等操作。

4) Quota:限额,可以强制一个命名空间可包含的region的数量。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值