Apache HBase基础
NoSQL综述及Apache HBase基础
一.HBase
1.HBase概述
2.HBase发展历史
3.HBase应用场景
3.1增量数据-时间序列数据
3.2信息交换-消息传递
3.3内容服务-Web后端应用程序
3.4HBase应用场景示例
4.Apache HBase生态圈
5.HBase物理架构
5.1 HMaster
5.2RegionServer
5.3Region和Table
6.HBase逻辑架构 - Row
7.HBase数据管理
8.HBase架构特点
9.HBase Shell
9.1创建表:create
9. 2查看所有表:list,describe
9.3添加数据:put
9.4扫描表:scan
9.5获取数据:get
9.6删除数据:delete
9.7修改表:alter
9.8删除表drop
一.HBase
1.HBase概述
HBase是一个领先的NoSQL数据库
是一个面向列存储的数据库
是一个分布式hash map
基于Google Big Table论文
使用HDFS作为存储并利用其可靠性
HBase特点
数据访问速度快,响应时间约2-20毫秒
支持随机读写,每个节点20k~100k+ ops/s
可扩展性,可扩展到20,000+节点
2.HBase发展历史
时间 事件
2006年 Google发表了关于Big Table论文
2007年 个版本的HBase和Hadoop0.15.0一起发布
2008年 HBase成为Hadoop的子项目
2010年 HBase成为Apache项目
2011年 Cloudera基于HBase0.90.1推出CDH3
2012年 HBase发布了0.94版本
2013-2014 HBase先后发布了0.96版本/0.98版本
2015-2016 HBase先后发布了1.0版本、1.1版本和1.2.4版本
2017年 HBase发布1.3版本
2018年 HBase先后发布了1.4版本和2.0版本
3.HBase应用场景
3.1增量数据-时间序列数据
高容量,高速写入
3.2信息交换-消息传递
高容量,高速读写
3.3内容服务-Web后端应用程序
高容量,高速读写
3.4HBase应用场景示例
Facebook
9000 memcached instances,4000 shards mysql
2011全部迁移到HBase
Alibaba
自2010年以来,HBase一直为阿里搜索系统的核心存储
当前规模
3 个集群,每个有1000+ nodes
在Yarn上与Flink共享
每天提供超过10M+ ops/s 的服务
4.Apache HBase生态圈
HBase生态圈技术
Lily – 基于HBase的CRM
OpenTSDB – HBase面向时间序列数据管理
Kylin – HBase上的OLAP
Phoenix – SQL操作HBase工具
Splice Machine – 基于HBase的OLTP
Apache Tephra – HBase事务支持
TiDB – 分布式SQL DB
Apache Omid - 优化事务管理
Yarn application timeline server v.2 迁移到HBase
Hive metadata存储可以迁移到HBase
Ambari Metrics Server将使用HBase做数据存储
5.HBase物理架构
HBase采用Master/Slave架构
HMaster
RegionServer
Zookeeper
HBase Client
Region
5.1 HMaster
HMaster的作用:
是HBase集群的主节点,可以配置多个,用来实现HA
管理和分配Region
负责RegionServer的负载均衡
发现失效的RegionServer并重新分配其上的Region
5.2RegionServer
RegionServer负责管理维护Region
一个RegionServer包含一个WAL、一个BlockCache (读缓存)和多个Region
一个Region包含多个存储区,每个存储区对应一个列族
一个存储区由多个StoreFile和MemStore组成(MemStore内存)
一个StoreFile对应于一个HFile和一个列族
HFile和WAL作为序列文件保存在HDFS上
Client与RegionServer交互
功能:
负责管理HBase的实际数据
处理分配给它的Region
刷新缓存到HDFS
维护HLog
执行Compaction
负责处理Region分片
5.3Region和Table
单个Table(表)被分区成大小大致相同的Region
Region是HBase集群分布数据的小单位
Region被分配给集群中的RegionServer
一个Region只能分配给一个RegionServer
HRegion
HBase使用表(table)存储数据集,表由行和列组成,这与关系型数据库类似。但是在HBase,当表的大小超过设定值时,HBase会自动将表划分为不同的区域(Region),每个区域成为HRegion,它是HBase集群上分布式存储和负载均衡的小单位,在这一点上,表和HRegion类似于HDFS中文件和文件块的概念。一个HRgion中保存一个表中一段连续的数据,通过表名和主键范围(开始主键~结束主键)来区分每一个HRgion。
6.HBase逻辑架构 - Row
Rowkey(行键)是的并已排序
Schema可以定义何时插入记录
每个Row都可以定义自己的列,即使其他Row不使用
相关列定义为列族
使用时间戳维护多个Row版本
在不同版本中值类型可以不同
HBase数据全部以字节存储
7.HBase数据管理
数据管理目录
系统目录表hbase:meta
存储元数据等
HDFS目录中的文件
Servers上的region实例
HBase数据在HDFS上
可以通过HDFS进行修复File
修复路径:
RegionServer->Table->Region->RowKey->列族
8.HBase架构特点
强一致性
自动扩展
当Region变大会自动分割
使用HDFS扩展数据并管理空间
写恢复
使用WAL(Write Ahead Log)
与Hadoop集成
9.HBase Shell
HBase Shell是一种操作HBase的交互模式
支持完整的HBase命令集
命令类别 命令
General version, status, whoami, help
DDL alter, create, describe, disable, drop, enable, exists, is_disabled, is_enabled, list
DML count, delete, deleteall, get, get_counter, incr, put, scan, truncate
Tools assign, balance_switch, balancer, close_region, compact, flush, major_compact, move, split, unassign, zk_dump
Replication add_peer, disable_peer, enable_peer, remove_peer, start_replication, stop_replication
HBase Shell命令 功能描述
list 列出HBase中的所有表
create 创建一张表
describe 列出表的详细信息
alter 修改表的列族
disable 禁用表,使表
enable 启用表,使表有效
drop 删除表
exists 判断表是否存在
count 统计表中行的数量,一个行键为一行
delete 删除指定对象的值
deleteall 删除指定行所有元素值
get 获取行或者单元的值
incr 增加指定表,行或列或值
put 向指定的表单元添加值
tools 列出HBase所支持的工具
scan 通过·对表的扫描来获取对应的值
status 返回HBase集群的·状态信息
shutdown 关闭HBase集群·
truncate 重新创建指定表
version HBase的版本信息
9.1创建表:create
语法:
create '表名称','列名称1','列名称2',...,'列名称N'
--创建表
create 'customer', {NAME=>'addr'}, {NAME=>'order'}
9. 2查看所有表:list,describe
语法:
list
列出表的详细信息
desc '表名'
--查看表
list
--列出表的详细信息
desc 'customer'
9.3添加数据:put
语法:
put '表名称' ,'行建','列建','值'
--插入数据
put 'customer','2','addr:address','zhenjiang'
9.4扫描表:scan
scan用于全表扫描
scan '表名称',{COLUMN=>['列族名1','列族名2'...],参数名=>参数值...}
hbase(main):103:0> scan 'customer'
ROW COLUMN+CELL
1001 column=addr:address, timestamp=1600937534433, value=ahha
2 column=addr:address, timestamp=1600927647563, value=baohua
jsmith column=addr:city, timestamp=1600925557395, value=montreal
3 row(s) in 0.0110 seconds
hbase(main):007:0> scan 'customer',{LIMIT=>1}
ROW COLUMN+CELL
2 column=addr:address, timestamp=1600927553710, value=baohua
1 row(s) in 0.0140 seconds
hbase(main):008:0> scan 'customer',{COLUMNS=>'addr:city'}
ROW COLUMN+CELL
jsmith column=addr:city, timestamp=1600925557395, value=montreal
1 row(s) in 0.0090 seconds
9.5获取数据:get
get用于获取行的所有单元或者某个指定的单元
get '表名称','行键',{COLUMN=>['列族名1','列族名2'...],参数名=>参数值...}
get '表名称','行键',{COLUMN=>['列键1','列键2'...],参数名=>参数值...}
--获取数据
hbase(main):095:0> get 'customer','2',{COLUMN=>'addr:address'}
COLUMN CELL
addr:address timestamp=1600927647563, value=baohua
1 hbase(main):097:0> get 'customer','1001','addr:address'
COLUMN CELL
addr:address timestamp=1600937534433, value=ahha
1 row(s) in 0.0120 seconds
(s) in 0.0070 seconds
--修改版本
alter 'customer',NAME=>'ORDER',VERSION=>5
--
9.6删除数据:delete
delete '表名称','行键','列键'
deleteall '表名称','行键'
9.7修改表:alter
使用alter可为表增加或者修改列族
alter '表名称',参数名=>参数值,...
hbase(main):100:0> alter 'customer',NAME=>'ORDER',VERSION=>5
Unknown argument ignored for column family ORDER: 1.8.7
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 1.9050 seconds
9.8删除表drop
HBase表分为两个状态:ENABLED 和DISABLED
--使用disable将表置为不可用状态
disable 'customer'
--使用enable将表置为可用状态
enable 'customer'
当表ENABLED状态时,会被禁止删除。所有需要先将表置为DISABLED状态才能删除
disable 'customer'
--删除
drop 'customer'
用户权限:
user_permission ['表名' ...]
grant '用户名','RWXCA'
表:
增:create '表名',{NAME=>'列簇名'},{NAME=>'列簇名'}...
删:disable '表名' ————> drop '表名'
改:snapshot '表名','镜像名'
clone_snapshot '镜像名','新表名'
delete_snapshot '镜像名'
查:list
行:put的时候:put '表名','行键','列簇名:列名','值'[,时间戳]
可以单独删行,行内数据全部删除
列簇:
增:alter '表名',NAME=>'列簇名'
删:...... ,METHOD='delete'
改:先加,后删
查:get '表名','行键','列簇名'
列:
cell:值+时间戳
获取用户权限需要改配置文件
<property>
<name>hbase.security.authrization</name>
<value>true</value>
</property>
<property>
<name>hbase.coprocessor.master.classes</name>
<value>org.apache.hadoop.hbase.security.access.AccessController</value>
</property>
<property>
<name>hbase.coprocessor.region.classes</name>
<value>org.apache.hadoop.hbase.security.token.TokenProvider,org.apache.hadoop.hbase.security.access.AccessController</value>
</property>
<property>
<name>hbase.superuser</name>
<value>root</value>
</property>
相关文章