HBase 表操作 读写流程

本文详细介绍了HBase的表操作,包括创建、插入数据、扫描、查看表结构、更新、删除等,并解析了HBase的读数据和写数据流程,涉及到Memstore、block cache以及数据在RegionServer中的处理过程。

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

HBase 表操作

创建表

hbase(main)> create ‘student’,‘info’
hbase(main)> create ‘iparkmerchant_order’,‘smzf’
hbase(main)> create ‘staff’,'info’

插入数据到表

hbase(main) > put ‘student2’,‘1001’,cf1:name’,‘Thomas’
hbase(main) > put ‘student2’,‘1001’,‘cf1:sex’,‘male’
hbase(main) > put ‘student2’,‘1001’,‘cf1:age’,‘18’
hbase(main) > put ‘student2’,‘1002’,‘cf1:name’,‘Janna’
hbase(main) > put ‘student2’,‘1002’,‘cf1:sex’,‘female’
hbase(main) > put ‘student2’,‘1002’,‘cf1:age’,'20’

数据插入后的数据模型
在这里插入图片描述

扫描查看表数据

hbase(main) > scan ‘student’
hbase(main) > scan ‘student’,{STARTROW => ‘1001’, STOPROW => ‘1001’}
hbase(main) > scan ‘student’,{STARTROW => '100

注:这个是从哪一个rowkey开始扫描

查看表结构

hbase(main):012:0> desc 'student’

更新指定字段的数据

hbase(main) > put ‘student’,‘1001’,‘info:name’,‘Nick’
hbase(main) > put ‘student’,‘1001’,‘info:age’,‘100’
hbase(main) > put ‘student’,‘1001’,‘info:isNull’,’’(仅测试空值问题)

查看“指定行”或“指定列族:列”的数据

hbase(main) > get ‘student’,‘1001’
hbase(main) > get ‘student’,‘1001’,'info:name’

删除数据

删除某rowkey的全部数据:
hbase(main) > deleteall ‘student’,'1001’

清空表数据

hbase(main) > truncate ‘student’
尖叫提示:清空表的操作顺序为先disable,然后再truncate。

删除表

首先需要先让该表为disable状态:
hbase(main) > disable 'student’

检查这个表是否被禁用

base(main) > is_enabled ‘hbase_book’
hbase(main) > is_disabled ‘hbase_book’
恢复被禁用得表
enable 'student’

然后才能drop这个表:

hbase(main) > drop ‘student’
尖叫提示:如果直接drop表,会报错:Drop the named table. Table must first be disabled
ERROR: Table student is enabled. Disable it first.

统计表数据行数

hbase(main) > count 'student’

变更表信息

将info列族中的数据存放3个版本:
hbase(main) > alter ‘student’,{NAME=>‘info’,VERSIONS=>3}
查看student的最新的版本的数据
hbase(main) > get ‘student’,‘1001’
查看HBase中的多版本
hbase(main) > get ‘student’,‘1001’,{COLUMN=>‘info:name’,VERSIONS=>10}

常用Shell操作

satus 例如:显示服务器状态
hbase> status 'bigdata111’

exists 检查表是否存在,适用于表量特别多的情况
hbase> exists 'hbase_book’

is_enabled/is_disabled 检查表是否启用或禁用
hbase> is_enabled ‘hbase_book’
hbase> is_disabled 'hbase_book’

lter 该命令可以改变表和列族的模式,例如:
为当前表增加列族:
hbase> alter ‘hbase_book’, NAME => ‘CF2’, VERSIONS => 2

为当前表删除列族:
hbase> alter ‘hbase_book’, ‘delete’ => 'CF2’

disable禁用一张表
hbase> disable ‘hbase_book’
hbase> drop 'hbase_book’

delete
删除一行中一个单元格的值,例如:
hbase> delete ‘hbase_book’, ‘rowKey’, 'CF:C’

== truncate清空表数据,即禁用表-删除表-创建表
hbase> truncate ‘hbase_book’==

create
创建多个列族:
hbase> create ‘t1’, {NAME => ‘f1’}, {NAME => ‘f2’}, {NAME => ‘f3’}


读写流程

HBase读数据流程

Hbase的regionserver的内存Memstore,block cache。Memstore作业主要是写,另一部分主要是读的。block cache用的是LRU,如果block cache达到上限,会启动淘汰机制。

(1) HRegionServer保存着.META.的这样一张表以及表数据,要访问表数据,首先Client先去访问zookeeper,从zookeeper里面找到.META.表所在的位置信息,即找到这个.META.表在哪个HRegionServer上保存着。

(2)接着Client通过刚才获取到的HRegionServer的IP来访问.META.表所在的HRegionServer,从而读取到.META.,进而获取到.META.表中存放的元数据。

(3)Client通过元数据中存储的信息,访问对应的HRegionServer,然后扫描(scan)所在
HRegionServer的Memstore如果没有,扫描block cache(读数据的缓存),如果还没有去Storefile来查询数据,查到数据之后将数据读到block cache。

(4)最后HRegionServer把查询到的数据响应给Client。
在这里插入图片描述

HBase写数据流程

(1)Client也是先访问zookeeper,进而找到.META.表,并获取.META.表信息。

(2)确定当前将要写入的数据所对应的RegionServer服务器和Region。

(3)Client向该RegionServer服务器发起写入数据请求,然后RegionServer收到请求并响应。

(4)Client先把数据写入到HLog,以防止数据丢失。

(5)然后将数据写入到Memstore。

(6)如果Hlog和Memstore均写入成功,则这条数据写入成功。在此过程中,如果Memstore达到阈值,会把Memstore中的数据flush到StoreFile中。

(7)当Storefile越来越多,会触发Compact合并操作,把过多的Storefile合并成一个大的Storefile。当Storefile越来越大,Region也会越来越大,达到阈值后,会触发Split操作,将Region一分为二。

尖叫提示:因为内存空间是有限的,所以说溢写过程必定伴随着大量的小文件产生。

在这里插入图片描述

HBase读写流程如下: 1. 客户端向 HMaster 发送请求,获取对应的 HRegionServer 列。 2. 客户端根据 HRegionServer 列,向对应的 HRegionServer 发送请求。 3. HRegionServer 根据请求的操作类型,将请求转发给对应的 HRegion。 4. HRegion 读取或入数据,并将结果返回给 HRegionServer。 5. HRegionServer 将结果返回给客户端。 具体地,对于入数据,HBase 采用了 Write-Ahead-Log(WAL)和 MemStore 的机制: 1. 客户端向 HMaster 发送入请求。 2. HMaster 获取对应的 HRegionServer 列,并向每个 HRegionServer 发送入请求。 3. HRegionServer 接收到入请求后,将数据入 WAL。 4. 同时,HRegionServer 将数据入内存中的 MemStore。 5. 当 MemStore 达到一定大小时,将 MemStore 中的数据入 HDFS 中的 StoreFile。 6. HRegionServer 返回入成功的结果。 对于读取数据,HBase 采用基于 LSM-Tree 的机制: 1. 客户端向 HMaster 发送读取请求。 2. HMaster 获取对应的 HRegionServer 列,并向每个 HRegionServer 发送读取请求。 3. HRegionServer 接收到读取请求后,根据请求的 RowKey,查找 MemStore 和 StoreFile 中的数据。 4. 如果在 MemStore 中找到数据,则直接返回。 5. 如果在 MemStore 中未找到数据,则在 StoreFile 中查找。 6. 如果在 StoreFile 中找到数据,则返回。 7. 如果在 StoreFile 中未找到数据,则向更高层级的 StoreFile 查找,直到找到或查找到最顶层的 StoreFile。 8. 如果在所有的 StoreFile 中都未找到数据,则返回不存在的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值