首页 > 其他 > 详细

HBase

时间:2021-05-30 00:42:37      阅读:17      评论:0      收藏:0      [点我收藏+]

1. HBase 简介

  • 1.1 什么是 HBase?
  • 1.2 概念
  • 1.3 HBase 存储
  • 1.4 HBase 架构

2. HBase 命令

 

 

1. HBase 简介

1.1 什么是 HBase?

HBase(Hadoop Database)是一个高可靠性、高性能、面向列的、可伸缩的分布式存储系统。利用 HBase 技术可在廉价 PC Server 上搭建起大规模结构化存储集群。
 
Hbase 是一种基于 Hadoop 的 NoSQL(Key/Value)数据库。
 
HBase 利用 Hadoop HDFS 作为其文件存储系统,利用 Hadoop MapReduce 来处理 HBase 中的海量数据,并利用 Zookeeper 作为协调工具。

1.2 概念

主键:Row Key

主键是用来检索记录的主键,访问 HBase Table 中的行,只有三种方式:

  1. 通过单个 row key 访问

  2. 通过 row key 的 range

  3. 全表扫描

列族:Column Family

     列族在创建表的时候声明,一个列族可以包含多个列,列中的数据都是以二进制形式存在,没有数据类型。

时间戳:timestamp

     HBase 中通过 row 和 columns 确定的一个存储单元,称为 cell。每个 cell 都保存着同一份数据的多个版本。版本通过时间戳来索引。

1.3 HBase 存储

Table 在行的方向上分割为多个 HRegion,一个 region 由 [startkey,endkey) 表示,每个 HRegion 分散在不同的 RegionServer 中 。

参数:hbase.hregion.max.filesize

技术分享图片

技术分享图片

1.4 HBase 架构

HBase 系统架构终极篇

技术分享图片

Client 
  • 包含访问 HBase 的接口,Client 维护着一些 Cache 来加快对 HBase 的访问,比如 Region 的位置信息。
Zookeeper
  • 保证任何时候,集群中只有一个 Running Master。
  • 存贮所有 Region 的寻址入口。
  • 实时监控 Region Server 的状态,将 Region Server 的上线和下线信息,实时通知给 Master。
  • 存储 HBase 的 Schema,包括有哪些 Table,每个 Table 有哪些 Column Family。
Master
  • 可以启动多个 HMaster,通过 Zookeeper 的 Master Election 机制保证总有一个 Master 运行。
  • 为 Region Server 分配 Region。
  • 负责 Region Server 的负载均衡。
  • 发现失效的 Region Server 并重新分配其上的 Region。
Region Server
  • 维护 Master 分配给它的 Region,处理对这些 Region 的 I/O 请求。
  • 负责切分在运行过程中变得过大的 Region。

可以看出,Client 访问 HBase 上数据的过程并不需要 Master 参与,寻址访问先 Zookeeper 再 Regionserver,数据读写访问 RegionServer。

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

 

2. HBase 命令

技术分享图片

 bin 目录进入 HBase 命令行:

./hbase shell
显示 HBase 中的表:
list
创建 user 表,包含 info、data 两个列族:
create user, info1, data1
create user, {NAME => info, VERSIONS => 3}

put:添加数据

向 user 表中插入信息,row key 为 rk0001,列族 info 中添加 name 列标示符,值为 zhangsan:
put user, rk0001, info:name, zhangsan
向 user 表中插入信息,row key为 rk0001,列族 info 中添加 gender 列标示符,值为 female:
put user, rk0001, info:gender, female
向 user 表中插入信息,row key为 rk0001,列族 info 中添加 age 列标示符,值为 20:
put user, rk0001, info:age, 20
向 user 表中插入信息,row key为 rk0001,列族 data 中添加 pic 列标示符,值为 picture:
put user, rk0001, data:pic, picture

get:获取一行

获取 user 表中 row key 为 rk0001 的所有信息:
get user, rk0001
获取 user 表中 row key 为 rk0001,info 列族的所有信息:
get user, rk0001, info
获取 user 表中 row key 为 rk0001,info 列族的 name、age 列标示符的信息:
get user, rk0001, info:name, info:age
获取 user 表中 row key 为 rk0001,info、data 列族的信息:
get user, rk0001, info, data
get user, rk0001, {COLUMN => [‘info‘, ‘data‘]}
get user, rk0001, {COLUMN => [‘info:name‘, ‘data:pic‘]}
获取 user 表中 row key 为 rk0001,列族为 info,版本号最新 5 个的信息:
(version 默认是 1,即一个 cell 只能存一个数据;可能存在内存未清理旧 version 的数据,刷新内存或重启即可)
get people, rk0002, {COLUMN => info, VERSIONS => 2}
get user, rk0001, {COLUMN => info:name, VERSIONS => 5}
get user, rk0001, {COLUMN => info:name, VERSIONS => 5, TIMERANGE => [1392368783980, 1392380169184]}
获取 user 表中 row key 为 rk0001,cell 的值为 zhangsan 的信息:
get people, rk0001, {FILTER => "ValueFilter(=, binary:图片)"}
获取 user 表中 row key 为 rk0001,列标示符中含有 a 的信息:
get people, rk0001, {FILTER => "(QualifierFilter(=,substring:a))"}

scan:获取全表

查询 user 表中的所有信息:
scan user
查询 user 表中列族为 info 的信息:
scan people, {COLUMNS => info}
scan user, {COLUMNS => info, RAW => true, VERSIONS => 5}
scan persion, {COLUMNS => info, RAW => true, VERSIONS => 3}
查询 user 表中列族为 info 和 data 的信息:
scan user, {COLUMNS => [‘info‘, ‘data‘]}
scan user, {COLUMNS => [‘info:name‘, ‘data:pic‘]}
查询 user 表中列族为 info、列标示符为 name 的信息:
scan user, {COLUMNS => info:name}
查询 user 表中列族为 info,列标示符为 name 的信息,并且版本最新的 5 个:
scan user, {COLUMNS => info:name, VERSIONS => 5}
查询 user 表中列族为 info 和 data 且列标示符中含有 a 字符的信息:
scan people, {COLUMNS => [‘info‘, ‘data‘], FILTER => "(QualifierFilter(=,substring:a))"}
查询 user 表中列族为 info,rk 范围是 [rk0001, rk0003) 的数据:
scan people, {COLUMNS => info, STARTROW => rk0001, ENDROW => rk0003}
查询 user 表中 row key 以 rk 字符开头的:
scan user,{FILTER=>"PrefixFilter(rk)"}
查询 user 表中指定范围的数据:
scan user, {TIMERANGE => [1392368783980, 1392380169184]}

删除数据

删除 user 表 row key 为 rk0001,列标示符为 info:name 的数据:
delete people, rk0001, info:name
删除 user 表 row key 为 rk0001,列标示符为 info:name,timestamp 为 1392383705316 的数据:
delete user, rk0001, info:name, 1392383705316
清空 user 表中的数据:
truncate people

修改表结构

添加两个列族 f1 和 f2:

alter people, NAME => f1
alter user, NAME => f2

删除一个列族:

alter user, NAME => f1, METHOD => delete  -- 或 alter ‘user‘, ‘delete‘ => ‘f1‘

添加列族 f1 的同时删除列族 f2:

alter user, {NAME => f1}, {NAME => f2, METHOD => delete}

将 user 表的 f1 列族版本号改为 5:

alter people, NAME => info, VERSIONS => 5

删除表:

drop user

修改表名:

get person, rk0001, {FILTER => "ValueFilter(=, binary:中国)"}
get person, rk0001, {FILTER => "(QualifierFilter(=,substring:a))"}
scan person, {COLUMNS => info:name}
scan person, {COLUMNS => [‘info‘, ‘data‘], FILTER => "(QualifierFilter(=,substring:a))"}
scan person, {COLUMNS => info, STARTROW => rk0001, ENDROW => rk0003}
 
scan person, {COLUMNS => info, STARTROW => 20140201, ENDROW => 20140301}
scan person, {COLUMNS => info:name, TIMERANGE => [1395978233636, 1395987769587]}
delete person, rk0001, info:name
 
alter person, NAME => ffff
alter person, NAME => info, VERSIONS => 10

 

HBase

原文:https://www.cnblogs.com/juno3550/p/14826346.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!