Hadoop分布系统入门:HBase篇
程序员文章站
2022-03-10 16:16:22
HBase简述HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase 技术可在廉价 PC Server 上搭建起大规模结构化存储集群。HBase适用场景:大数据量存储,大数据量高并发操作需要对数据随机读写操作读写访问均是非常简单的操作HDFS:分布式存储提供文件系统优化存储大尺寸的文件,不对文件进行随机读写直接使用文件数据模型不灵活优化一次写入,多次读取的方式使用文件系统和处理框架...
HBase简述
HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase 技术可在廉价 PC Server 上搭建起大规模结构化存储集群。
HBase适用场景:
-
大数据量存储,大数据量高并发操作
-
需要对数据随机读写操作
-
读写访问均是非常简单的操作
HDFS: -
分布式存储提供文件系统
-
优化存储大尺寸的文件,不对文件进行随机读写
-
直接使用文件
-
数据模型不灵活
-
优化一次写入,多次读取的方式
-
使用文件系统和处理框架
-
使用文件系统和处理框架
HBase:
- 优化了多次读,以及多次写
- 使用表状存储,支持mr,依赖HDFS
- 提供灵活的数据模型
- 使用key-value操作数据
- 针对表状数据的随机读写进行优化
- 提供表状的面向列的数据存储
HBase数据模型
行键 | 时间戳 | 列族 contents | 列族 anchor | 列族 mime |
---|---|---|---|---|
“com.cnn.www” | T9 | Contents:html = “…” | Anchor.cnnsi.com = “CNN” | Mime.type = “text/html” |
行键:
- 行键是字节数组、任何字符串都可以作为行键
- 表中的行根据行键进行排序,数据按照Row key的字节库(byte order)排序存储
- 所有对表的访问都要通过行键(单个RowKey访问,或RowKey范围访问,或者全表扫描)
列族(ColumnFamily):
- CF必须在表定义时候给出
- 每个CF可以有一个或多个列成员,列成员不需要再表定义时给出,新的列族成员可以随后按需、动态的加入
- 数据按CF分开存储,HBase所谓的列式存储就是根据CF分开存储(每个CF对应一个Store),这种设计非常适合数据分析的情形。
时间戳(TimeStamp): 每个Cell可能有多个版本,他们之间用时间戳区分
单元格(Cell):
- Cell 由行键,列簇:限定符,时间戳唯一决定
- Cell中的数据是没有类型的,全部以字节码的形式储存
区域(Region):
- HBase 自动把表水平(按 Row)划分成多个区域(region),每个region 会保存一个表里面某段连续的数据;
- 每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值的时候,region 就会等分会两个新的region;
- 当 table 中的行不断增多,就会有越来越多的 region。这样一张完整的表被保存在多个Region 上。
- Region 虽然是分布式存储的最小单元,但并不是存储的最小单元。Region由一个或者多个 Store 组成,每个 store 保存一个 columns family;每个Strore又由一个memStore和0至多个StoreFile组成, StoreFile包含HFile;memStore存储在内存中,StoreFile 存储在HDFS上。
HBase架构及基本组件
Client: 包含访问HBase的接口
Master:
- 为Region server 分配 region
- 负责Region server 的负载均衡
- 发现失效的Region server 并重新分配其上的region
- 管理用户对table的增删改查操作
Region Server:
- Regionserver维护 region,处理对这些 region的 IO请求
- Regionserver负责切分在运行过程中变得过大的 region
Zookeeper作用:
- 通过选举,保证任何时候,集群中只有一个Master, Master与RegionServers启动时会向ZooKeeper 注册
- 存储所有 Region 的寻址入口
- 实时监控 Region server 的上线和下线信息,并实时通知给Master
- 存储 HBase 的schema 和table 元数据
- 默认情况下,HBase 管理 ZooKeeper 实例,比如, 启动或者停止ZooKeeper
- Zookeeper的引入使得Master 不再是单点故障
HBase基础操作
list:查看有哪些表
create:创建表
disable:删除表
describe:查看表的结构
enable:启用表
alter:修改表结构
grant:分配权限
user_permission:查看权限
revoke:收回权限
put:添加数据
get:查询数据——查询某行记录
scan:查询数据——扫描表
count:查询表中的数据行数
delete:删除行中的某个列值
deleteall:删除行
truncate:删除表中所有数据
move:移动Region
balance_swithch:开启/关闭Region
$HBASE_HOME/bin/hbase shell # 进入hbase shell console
####################表的管理####################
list # 查看有哪些表
# 创建表的语法如下:
create <table>, {NAME => <family>, VERSIONS => <VERSIONS>}
# 例子 创建表t1,有两个family name:f1,f2,且版本数均为2
create 't1',{NAME => 'f1', VERSIONS => 2},{NAME => 'f2', VERSIONS => 2}
# 删除表要分两步,首先disable 然后drop
disable 't1'
drop 't1'
# 查看表的结构
describe 't1'
# 修改表的结构
# 修改表结构必须先disable
# 语法:alter 't1', {NAME => 'f1'}, {NAME => 'f2', METHOD => 'delete'}
# 一个例子:修改表test1的cf的TTL为180天
disable 'test1'
alter 'test1',{NAME=>'body',TTL=>'15552000'},{NAME=>'meta', TTL=>'15552000'}
enable 'test1'
#################权限管理###################
#分配权限
# 语法 : grant <user> <permissions> <table> <column family> <column qualifier> 参数 后面用逗号分隔
# 权限用五个字母表示: "RWXCA".
# READ('R'), WRITE('W'), EXEC('X'), CREATE('C'), ADMIN('A')
# 例如,给用户‘test'分配对表t1有读写的权限,
grant 'test','RW','t1'
# 查看权限
# 语法:user_permission <table>
# 例如,查看表t1的权限列表
user_permission 't1'
# 收回权限
# 与分配权限类似,语法:revoke <user> <table> <column family> <column qualifier>
# 例如,收回test用户在表t1上的权限
revoke 'test','t1'
###################表数据的增删改查#######################
# 添加数据
# 语法:put <table>,<rowkey>,<family:column>,<value>,<timestamp>
# 例如:给表t1的添加一行记录:rowkey是rowkey001,family name:f1,column name: col1,value:value01,timestamp:系统默认
put 't1','rowkey001','f1:col1','value01'
# 查询数据——查询某行记录
# 语法:get <table>,<rowkey>,[<family:column>,....]
# 例如:查询表t1,rowkey001中的f1下的col1的值
get 't1','rowkey001', 'f1:col1'
# 或者:
get 't1','rowkey001', {COLUMN=>'f1:col1'}
# 查询表t1,rowke002中的f1下的所有列值
hbase(main)> get 't1','rowkey001'
# 查询数据扫描全表
# 语法:scan <table>, {COLUMNS => [ <family:column>,.... ], LIMIT => num} # 另外,还可以添加STARTROW、TIMERANGE和FITLER 等高级功能
# 例如:扫描表t1的前5条数据
scan 't1',{LIMIT=>5}
# 查询表中的数据行数
# 语法:count <table>, {INTERVAL => intervalNum, CACHE => cacheNum} #INTERVAL设置多少行显示一次及对应的rowkey,默认1000; CACHE每次去取的缓存区大小, 默认是10,调整该参数可提高查询速度
# 例如,查询表t1中的行数,每100条显示一次,缓存区为500
count 't1', {INTERVAL => 100, CACHE => 500}
# 删除数据——删除行中的某个列值
# 语法:delete <table>, <rowkey>, <family:column> , <timestamp>,必须指定列名
# 例如:删除表t1,rowkey001中的f1:col1的数据
delete 't1','rowkey001','f1:col1'
# 删除数据——删除表中的所有数据
# 语法: truncate <table> # 其具体过程是:disable table -> drop table -> create table
# 例如:删除表t1的所有数据
truncate 't1'
######################Region管理##########################
# 移动Region
# 语法:move 'encodeRegionName', 'ServerName' # encodeRegionName 指的 regioName 后面的编码,ServerName 指的是 master-status 的 Region Servers列表
# 示例
move '4343995a58be8e5bbc739', 'db-41.xxx.xxx.org,60020,139'
# 开启/关闭 Region
# 语法:balance_switch true|false
hbase(main)> balance_switch
# 手动split
# 语法:split 'regionName', 'splitKey'
参考文献
- 《Hadoop大数据实战手册》.林中天
- 《Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理》.蔡斌、陆湘萍
- 《Hadoop权威指南(第2版)》
- 大数据工具hdfs和hbase的关系和对比
其他
Hadoop分布系统入门(一):HDFS篇
Hadoop分布系统入门(二):MapReduce篇
Hadoop分布系统入门(三):Zookeeper篇
本文地址:https://blog.csdn.net/Kingsleyandher/article/details/107448701