HBase shell命令知识总结(一)

这篇博客总结了HBase的shell命令,包括HBase的访问方式、shell概览和详细的命令细分,如数据定义语言(DDL)和数据操作语言(DML)。内容涵盖了创建、修改、删除表及列族,以及数据的增删查改等操作,是HBase管理的重要参考。

HBase shell命令知识总结

1. HBase访问方式

  1. shell命令行客户端
  2. java api
    本文主要总结关于shell命令行的知识点
  3. 不知道如何安装Hbase的可以看我另外一篇博文 HBase安装

PS:

  1. 可以横向对比,很多框架特别是运行在服务器端的,都会提供至少2种客户端,命令行客户端和代码api,部分如mysql还会有图形化客户端。
  2. 针对数据库框架的操作,主要就是查看、DML、DDL、如果比较强大还会有权限、数据备份等操作功能。

2. HBase的Shell概览

  1. 开启客户端
    PS:
  • 注意需要配置环境变量,否则就只能去HBase安装目录的bin目录下执行指令
  • 注意使用shell客户端之前,先启动HBase集群(使用安装目录bin目录下的start-hbase.sh 指令,需要手动在集群中启动第二master节点服务 ./hbase-daemon.sh start master)
    在这里插入图片描述
  • 注意HBase版本是2.2.5(2020年5月份),官方最新版本是2.3.1(2020年8月份)
    在这里插入图片描述
hbase shell

输入后出现如下图
在这里插入图片描述
2. 使用帮助命令

help

出现如下图所示,这些是hbase的shell命令组,按照功能进行了划分。
在这里插入图片描述
如果需要对某个命令进行帮助文档查询,直接help ‘xxx命令名’ 即可

help 'xxx命令名'

在这里插入图片描述
有文字说明,也有使用案例,还是很到位的文档支持的

  1. 退出shell 客户端
quit

在这里插入图片描述
这时候就退出了hbase shell客户端

  1. 输入某个指令进行操作(按照帮助文档的说明进行即可注意不同版本的shell命令以及接口api可能会有差异,所以最好的方式是对主要的功能命令有一个印象但不强求记住,其他命令查阅文档即可
    在这里插入图片描述
list_namespace

在这里插入图片描述

3. Shell命令细分

  1. 可以通过命令行客户端访问数据,也可以通过java api等访问数据
  2. 客户端提供了访问hbase的接口
  3. 提供cache提高访问hbase的效率 , 比如region的信息。因为进行数据读写都需要先去zookeeper请求元数据,这时候会把历史的meta请求数据缓存来提升效率。
  4. 以下命令都是按照官网文档来进行说明,如果英语🆗,更建议直接阅读官方文档,这样最新。我会基于

命令行使用方式

  1. 参数的分隔符是逗号 ,
  2. 参数形式是 {‘key1’ => ‘value1’, ‘key2’ => ‘value2’, …},常见的key有NAME, VERSIONS, COMPRESSION。常量不需要使用单引号括起来如数字常量,但字符串需要单引号括起来
  3. 命令输入后,按下enter键就执行
  4. 如果使用二进制形式的key,参考以下用法(不是很建议,需要这么操作建议在代码中进行)
    hbase> get ‘t1’, “key\x03\x3f\xcd”
    hbase> get ‘t1’, “key\003\023\011”
    hbase> put ‘t1’, “test\xef\xff”, ‘f1:’, “\x01\x33\x40”

3.1 通用命令general

  1. processlist,
    查询是否有进行中的HBase任务
    在这里插入图片描述

  2. status,
    查看HBase集群状态和信息
    在这里插入图片描述

  3. table_help,
    关于table(表)操作的一些介绍和常见指令
    在这里插入图片描述

  4. version,
    hbase软件版本以及发布日期
    在这里插入图片描述

  5. whoami
    查询当前用户账号信息,
    在数据库软件中,用户账号、密码和权限是直接挂钩的。默认是使用root权限登录进行操作,实际生产环境会有更严格的限制
    在这里插入图片描述

3.2 数据定义语言(data definition language)ddl

3.2.1 alter,

在这里插入图片描述
如上所示,可以使用alter命令修改表中的列族(增加、删除、修改),也可以修改表的配置信息

  1. 增加一个列族
alter 'doit:tb_shoes', NAME=>'cf3', VERSIONS=>5

之前
在这里插入图片描述
之后
在这里插入图片描述
2. 删除一个列族

alter 'doit:tb_shoes', NAME=>'cf3', METHOD=>'delete'

注意区分大小写
在这里插入图片描述
执行完指令后,可以发现,之前创建的列族 cf3 已经被删除了
在这里插入图片描述
3. 设置协处理器(就是让数据处理逻辑代码运行在数据对应的region server上去,这样代码要处理的数据就在本地,避免网络数据传输的时间消耗。而且移动计算(代码)比移动数据快得多)

 alter 't1',
    'coprocessor'=>'hdfs:///foo.jar|com.foo.FooRegionObserver|1001|arg1=1,arg2=2'

协处理器是一套框架,后续会专门讲解,这里先提一下

3.2.2 alter_async

在这里插入图片描述
类似于异步修改,就是不需要等到所有的region块接收到结构改变信息就能修改列族结构和配置

  1. 增加一个或者多个列族,参数使用大括号包起来{},中间使用逗号隔开
 alter_async 'doit:tb_shoes', {NAME=>'cf4'}, {NAME=>'cf5'},{NAME=>'cf6'}

在这里插入图片描述
执行后列族如下图
在这里插入图片描述
2. 删除一个列族

# 对namespace doit中的表tb_shoes进行列族删除,删除的列族是cf4
alter_async 'doit:tb_shoes', 'delete'=>'cf4'

如下图,执行后,列族cf4被删除
在这里插入图片描述

  1. 修改表配置信息(MAX_FILESIZE,
    MEMSTORE_FLUSHSIZE, and READONLY)等都可以修改
alter 'doit:tb_shoes', METHOD=>'table_att', MAX_FILESIZE=>'134217728'
  1. 同时执行多个指令,指令通过大括号包起来
alter_async 'doit:tb_shoes', {NAME=>'cf8'}, {NAME=>'cf7', METHOD=>'delete'}
3.2.3 alter_status,

在这里插入图片描述

-- 查看表的修改状态,doit:tb_shoes中doit是namespace,tb_shoes是表名
alter_status 'doit:tb_shoes'

在这里插入图片描述

3.2.4. clone_table_schema,

在这里插入图片描述

-- 保留原有的splitkey,不保留就在后面加一个false参数即可
-- 旧表是doit:tb_shoes, 新表是doit:lining
 clone_table_schema 'doit:tb_shoes', 'doit:lining'

在这里插入图片描述

3.2.5. create,

建表命令
注意:

  • 由于HBase的表中,namespace(名称空间,类似于数据库的database概念)、table name(表名)、column family(列族)都需要指定,如果确定将要存入的数据划分,可以提前做region切分,通过设定split key数组(就是针对row key做划分)
  • 所谓的region就是按照rowkey进行划分,从某一行起始,到某一行结束为一个region
  • 列族就是对column进行管理,内部会包含多个column名。实际生产中一般会把有关联的列名放在一个列族中。如果是多个数据库导入到hbase中,有时候会采取一个表名就是一个列族,列族中字段就是这个表的字段。
    在这里插入图片描述
    在这里插入图片描述
# 创建表,所属namespace是doit,表名是computer,列族有3个,cf1、cf2、cf3
create 'doit:computer', 'cf1', 'cf2', 'cf3'

在这里插入图片描述

-- 创建数据表,列族名是cf1,保存数据最多4个版本,数据存活时间time to live是5小时,块缓存为true
-- block cache就是数据读取时,会分别从blockcache、memstore、store files中读取数据,然后合并为一份,这样各个版本的数据就能汇总到一起。
create 'doit:mouse', {NAME=>'cf1', VERSIONS=>4, TTL=>60*60*5, BLOCKCACHE=>true}

在这里插入图片描述

-- 设置预定义的分区词,也就是rowkey进行分区时,会根据['3', '6', '9']进行划分,分到小于3、3到6、6到9、大于9四个分区中。如果刚好是3,6,9,则放到下一个分区中,所以3是在3到6的分区中。左包右不包
create 'doit:keyboard', 'cf1', SPLITS=>['3', '6', '9']

在这里插入图片描述

3.2.6. describe,

在这里插入图片描述

describe 'doit:computer'

在这里插入图片描述

3.2.7. disable,

在这里插入图片描述

-- 让数据库表失效,这样读写操作都会关闭。但这时候可以对表结构等配置做设置
disable 'doit:computer'

在这里插入图片描述

3.2.8. disable_all,

在这里插入图片描述

-- 针对表级别做失效设置
 disable_all 'doit:phone'

在这里插入图片描述

3.2.9. drop,

删除表
注意:
删除之前必须先disable,这样可以防止删除时表还有数据操作和访问
在这里插入图片描述

drop 'doit:phone'

在这里插入图片描述

3.2.10. drop_all,

批量删除,可以根据regex匹配数据库名,同样的,删除前记得先disable掉
在这里插入图片描述

3.2.11. enable,

在这里插入图片描述

enable 'doit:computer'  

在这里插入图片描述
可以注意一下,enable的耗时对比disable的耗时

3.2.12. enable_all,

在这里插入图片描述

3.2.13. exists,

在这里插入图片描述

 exists 'doit:xixi'

在这里插入图片描述

3.2.14. get_table,

类似定义一个变量,后续操作时可以使用这个变量。有一些类似于视图,或者视为定义一个变量。
在这里插入图片描述

t1 = get_table 'doit:mouse'

在这里插入图片描述

3.2.15. is_disabled,

在这里插入图片描述

is_disabled 'doit:mouse'

在这里插入图片描述

3.2.16. is_enabled,

在这里插入图片描述

 is_enabled 'doit:mouse'

在这里插入图片描述

3.2.17. list,

在这里插入图片描述

 list 

在这里插入图片描述

3.2.18. list_regions,

在这里插入图片描述

# 如果是临时写入,注意先flush一下,这样数据会被从内存写入到磁盘文件中flush 'doit:thread'

list_regions 'doit:thread'

在这里插入图片描述
这里注意看几个数据,
(SERVER_NAME)如 linux101,16020,1598665887901
( REGION_NAME)如doit:thread,1,1598685252495.eca370a95ba01b52f63b4a0572e07383,看这里组成,doit是namespace,thread是数据表明,1是rowkey, 1598685252495是时间戳,eca370a95ba01b52f63b4a0572e07383这是计算编码后的region地址
(START_KEY)1
(END_KEY)3
( SIZE)0
(REQ)6
( LOCALITY)1.0

3.2.19. locate_region,

在这里插入图片描述

locate_region 'tableName', 'key0'

在这里插入图片描述

3.2.20. show_filters

在这里插入图片描述

 show_filters

在这里插入图片描述

3.3 名称空间操作(类似于关系型数据库中的database) namespace

3.3.1 alter_namespace,

在这里插入图片描述

alter_namespace 'doit', {METHOD=>'set', 'ctime'=>'2020-08029'}

在这里插入图片描述
在这里插入图片描述

3.3.2 create_namespace,

在这里插入图片描述

create_namespace 'company', {'employees'=>'200', 'foundtime'=>'2018-08-07'}

在这里插入图片描述

3.3.3 describe_namespace,

在这里插入图片描述
获取描述信息,上述3.3.2已经截图演示

3.3.4 drop_namespace,

删除namespace需要先删除表,删除表需要先disable掉
在这里插入图片描述
在这里插入图片描述

 drop_namespace 'thread'

在这里插入图片描述

3.3.5 list_namespace,

在这里插入图片描述

list_namespace

在这里插入图片描述

3.3.6 list_namespace_tables

在这里插入图片描述

list_namespace_tables 'thread'

在这里插入图片描述

3.4 数据操作语言(data manipulation language) dml

3.4.1 append,

在这里插入图片描述

之前
在这里插入图片描述

append 'thread:xixi', '1', 'cf1:job', ' and singer'

之后
在这里插入图片描述

3.4.1 count,

在这里插入图片描述

 count 'thread:xixi'
3.4.1 delete,

在这里插入图片描述
HBase的删除,更新操作都是数据追加方式,也就是会追增一条新数据,等到一定时机时,再把这些数据做合并。delete就是增加一条标记数据,俗称墓碑标记

3.4.1 deleteall,

在这里插入图片描述
批量删除,可以删除行、列、region(一批连续的行)

3.4.1 get,

在这里插入图片描述
这里可以指定获取指定列和单元值的时候,如何解析数据。因为HBase本身没有数据类型,底层是以key value形式进行存储,读取也是如此。所以本质就是byte[]数组作为key和value,这样解析时,如果在存取的时候指定了格式(可以使用Bytes类进行指定也可以自定义类),那读取时就是用指定类去读取数据。
这一点和mapreduce中,数据存储、排序都是以key为基准,和这里的机制很相近。

3.4.1 get_counter,

获取计数
在这里插入图片描述

3.4.1 get_splits,

在这里插入图片描述
获取分区间隔(针对rowkey进行划分)

3.4.1 incr,

在这里插入图片描述

incr 'thread:xixi', '1', 'cf1:sal'

对某一个单元的值做统计,简单的累加,如计算网站的PV数

3.4.1 put,

在这里插入图片描述
往表里面添加数据,注意看这里只支持单个单个添加。因为本身hbase底层是key value形式存储。
如果需要批量导入,可以写程序,将数据转换成hfile形式,直接导入文件来做批量导入,后续会专门介绍。因为公司生产级别不太可能逐条导入,海量数据场景下,都是批量导入。

3.4.1 scan,

在这里插入图片描述
可以看做是sql中的select,filter就是select的where等限制条件
== 从接口和命令设计上可以看出,hbase对sql支持并不是很友好,后续会有phoenix组件来做转换支持在hbase上写sql做数据操作。但性能相比原生支持sql的clickhouse就会差很多了==
== clickhouse在2016年开源,从2018年开始国内陆续有腾讯、头条、携程部署click house集群来处理海量的结构化数据,节点从几百到几千都有。算是比较新但性能和潜力巨大的数据存储和查询处理框架==

3.4.1 truncate,

在这里插入图片描述
这个操作跟sql中的truncate功能一样,都可以删除表数据,但会保留表结构。

3.4.1 truncate_preserve

在这里插入图片描述
删除数据,保留比奥结构,还会保留region分区边界

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值