Apache HBase基础(基本概述,物理架构,逻辑架构,数据管理,架构特点,HBase Shell)

本文深入介绍了Apache HBase,包括其作为NoSQL数据库的基本概述、发展历史、应用场景,特别是时间序列数据、信息交换和Web后端应用。详细解析了HBase的物理和逻辑架构,强调了HMaster和RegionServer的角色。此外,文章还探讨了HBase的数据管理和架构特点,并通过HBase Shell展示了如何创建、查询和管理表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.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-2014HBase先后发布了0.96版本/0.98版本
2015-2016HBase先后发布了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命令集

命令类别命令
Generalversion, status, whoami, help
DDLalter, create, describe, disable, drop, enable, exists, is_disabled, is_enabled, list
DMLcount, delete, deleteall, get, get_counter, incr, put, scan, truncate
Toolsassign, balance_switch, balancer, close_region, compact, flush, major_compact, move, split, unassign, zk_dump
Replicationadd_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重新创建指定表
versionHBase的版本信息

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>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值