05.Apache Hbase介绍和使用

hbase 的安装部署
1、软件包上传解压
2、 配置hbase.env.sh
配置java_home
使用外部zookeeper(自己独立安装的zookeeper)
3、配置 hbase-site.xml
见讲义
hbase.zookeeper.property.dataDir必须是zookeeper存储数据的路径
4、修改regionservers
5、创建backup-masters
6、拷贝core-site.xml hdfs-site.xml到hbase的conf目录下
7、安装包分发到所有节点
8、配置环境变量
9、启动hbase
前提:1
hadoop集群必须启动,并保证集群正常
zookeeper集群必须启动,并保证集群正常
启动hbase
在这里插入图片描述
HBase的基本介绍
Hbase 是建立在hdfs之上的一个数据库,不支持join等SQL复杂操作.支持的数据类型:byte[],依靠横向扩展
一个表可以有上十亿行,上百万列。
面向列(族)的存储和权限控制
对于为空(null)的列,并不占用存储空间,是一个稀疏表。
稀疏的理解
在这里插入图片描述在这里插入图片描述
HBASE的适用场景
海量数据、精确查询、快速返回
海量数据:指的是数据量的背景
精确查询:业务场景
快速返回:是业务对时效性的要求

Hbase和Hadoop之间的关系

HDFS
海量数据存储,适合一次性扫描大量数据。
适合一次写入多次读取
不适合频繁更新的数据
HBASE
不适合一次性扫描大量数据。适用一次扫描少量数据。
适合多次写入多次读取
habse
支持数据更新
支持删除数据
Hbase与RDBMS的关系
RDBMS
支持SQL查询
支持事务
支持Join
HBASE
不支持SQL查询
不支持事务
不 支持Join
Hbase特征简要说明
1、 海量存储
Hbase适合存储PB级别的海量数据,在几十到百毫秒内返回数据。
2、列式存储
这里的列式存储其实说的是列族存储
列族理论上可以很多,但实际上建议不要超过6个
3、 极易扩展
处理能力(RegionServer)的扩展,一个是基于存储的扩展(HDFS)
hbase在最初设计的时候就考虑了扩展性。
4、高并发
这里说的高并发,主要是在并发的情况下,Hbase的单个IO延迟下降并不多
5、稀疏
在列数据为空的情况下,是不会占用存储空间的。
hbase的基础架构
1、Client
2 ZOOKEEPER
3 Master 管理者
4 Regionserver 工作者
在这里插入图片描述

HBase常用shell操作

HBase的底层原理
详细架构
Client:
访问数据的入口,包含访问hbase的API接口,维护着一些cache来加快对hbase的访问
Zookeeper:
1 zookeeper的选举机制保证任何时候,集群中只有一个master
2 实时监控Region Server的状态,将Region server的上线和下线信息实时通知给Master
3 存储Hbase的schema,
4 存贮所有Region的寻址入口
Master职责
1 为Region server分配region
2 负责region server的负载均衡
3 发现失效的region server并重新分配其上的region
4 处理schema更新请求
说明:Hmaster短时间下线,hbase集群依然可用,长时间不行。
Region server的作用
1、 Region server维护Master分配给它的region,处理对这些region的IO请求
2、Region server负责切分在运行过程中变得过大的region

HBase的表数据模型

在这里插入图片描述
Row Key
最大长度是 64KB,完全可以自行设计。Hbase会对表中的数据按照rowkey排序(字典序)
row的设计是最有技术含量的工作
列族Column Family
列族是表的schema的一部分,而列不是。(schema包含表名和列族)
每个列都所属于某一个列族。一个列族可以包含多个列。一个列族与列的关系是一对多。
列 Column
列族下面的具体列。
时间戳
标记一个数据的不同版本
时间戳可以由hbase(在数据写入时自动 )赋值,hbase支持工程师自己定义时间戳。
每个 cell中,不同版本的数据按照时间倒序排序
在这里插入图片描述
hbase本身提供数据回收机制
1、保存数据的最后n个版本
2、保存最近一段时间内的版本
Cell存储数据的最小单位
如何确定一个精确的数据
由{row key, column( = + ), version} 唯一确定的单元
VersionNum
数据的版本号,默认值为系统时间戳。
hbase物理存储
整体结构
在这里插入图片描述
一个regionserver内部可以有多个region,这多个region可能来自多个表或一个表。一个region只能属于一个
regionserver.
rtegion的切分
region按大小分割的(默认10G)。每个表一开始只有一个region,随着数据的增加,一个region逐渐变大,达到
10G,进行分裂,等分成两个region.
Hregion是Hbase中分布式存储和负载均衡的最小单元
HRegion由一个或者多个Store组成,每个store保存一个column family。每个Strore又由一个memStore和0至多个
StoreFile组成
在这里插入图片描述
在这里插入图片描述
Memstore与storefile
一个region由多个store组成,每个store包含一个列族的所有数据 Store包括位于内存的memstore和位于硬盘的
storefile
客户端检索数据时,先在memstore找,找不到再找storefile
HLog(WAL log)
每个Region Server维护一个Hlog,而不是每个Region一个.
Hlog的切分机制
1、当数据写入hlog以后,hbase发生异常。关闭当前的hlog文件
2、当日志的大小达到HDFS数据块的0.95倍的时候,关闭当前日志,生成新的日志
3、每隔一小时生成一个新的日志文件

读写过程

读请求过程
前提:什么是meta表?
meta表述hbase系统自带的一个表。里面存储了hbase用户表的元信息。
元信息为:meta表内记录一行数据是用户表一个region的start key 到endkey的范围。
meta表存在什么地方?
meta表存储在regionserver里。 具体存储在哪个regionserver里?zookeeper知道。
在这里插入图片描述
在这里插入图片描述
1 到zookeeper询问meta表在哪
2 到meta所在的节点(regionserver)读取meta表的数据
3 找到region 获取region和regionserver的对应关系,直接到regionserver读取region数据

<think>嗯,用户遇到了HBase中的TableExistsException异常问题,特别是在执行CreateTableProcedure时失败。我需要根据提供的引用资料来分析原因解决方案。首先,用户提到在创建表时提示表已存在,但用list命令却找不到该表。这可能是因为表的元数据在ZooKeeper中残留,导致HBase误认为表仍然存在。根据引用[3],这种情况通常发生在表被删除但未正确禁用的情况下,比如在disable过程中断开连接,导致表信息残留在ZooKeeper中。 接下来,我需要确认解决方案的步骤。引用[3][5]都提到了需要清理ZooKeeper中的残留节点。用户可能需要手动删除这些节点,然后重新创建表。另外,引用[4]提到通过Phoenix创建表时遇到类似问题,可能需要检查Phoenix的元数据是否一致。此外,引用[5]提到删除HBase中的相关表ZooKeeper节点可以解决问题,这可能需要使用HBase ShellZooKeeper客户端工具。 需要注意的是,操作ZooKeeper时要小心,避免影响其他表。另外,确保在删除任何数据之前先禁用表,或者确认表已被正确删除。如果用户不熟悉这些步骤,可能需要提供更详细的命令行示例,比如如何连接到ZooKeeper并删除节点,以及如何修复Phoenix的元数据。最后,提醒用户进行预防措施,比如避免异常中断操作,定期检查不一致情况。</think>### HBase TableExistsException 异常分析与解决方案 #### 一、异常原因分析 1. **元数据残留** 当尝试创建已存在的表时,HBase会抛出`TableExistsException`。但若`list`命令未显示该表,可能是由于以下原因: - 表未正确删除:删除表时未完成`disable`操作直接`drop`,导致ZooKeeper中残留元数据[^3] - 分布式系统同步延迟:HBase与ZooKeeper元数据不同步 2. **Phoenix集成问题** 通过Phoenix创建表时,若Phoenix元数据与HBase不一致,可能导致创建请求被阻塞并报错[^4] 3. **系统级残留文件** 表数据文件残留在HDFS中,但元数据已丢失,形成"幽灵表" --- #### 二、具体解决步骤 1. **强制清理ZooKeeper残留数据** ```bash # 进入ZooKeeper客户端 zkCli.sh # 删除对应表节点(示例路径) deleteall /hbase/table/<表名> ``` 需替换`<表名>`为实际表名(如`hbase:acl`或`kylin_metadata`)[^3][^5] 2. **修复HBase元数据** ```bash # 在HBase Shell中检查表状态 hbase> exists '<表名>' # 若存在残留则执行强制删除 hbase> disable '<表名>' hbase> drop '<表名>' hbase> quit ``` 3. **清理Phoenix系统表(如适用)** ```sql -- 删除Phoenix中的表关联 DELETE FROM SYSTEM.CATALOG WHERE TABLE_NAME = '<表名>'; DELETE FROM SYSTEM.STATS WHERE TABLE_NAME = '<表名>'; ``` 4. **检查HDFS残留文件** ```bash hadoop fs -ls /hbase/data/default/<表名> # 确认删除后手动清理残留文件 hadoop fs -rm -r /hbase/data/default/<表名> ``` --- #### 三、预防措施 1. **规范表操作流程** - 删除表时严格遵循流程:`disable -> drop` - 避免直接断开操作会话 2. **定期一致性检查** ```bash hbase hbck -details ``` 使用HBase内置工具检查元数据一致性 3. **集群维护建议** - 升级到HBase 2.0+版本,改进的`Procedure V2`框架能更好处理分布式事务[^1] - 配置`hbase.master.procedure.worker`线程数,优化并发控制 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值