Hbase的shell下令(具体)

[复制链接]
发表于 2026-2-8 21:56:57 | 显示全部楼层 |阅读模式
一、help

1.help 
表现定名的分组环境

 
2.help '下令名称'
查察下令的具体使用,包罗下令的作用和用法。
举例:help 'list'


二、general 组(平常下令组) 

     下令                形貌                                                     格式


三、定名空间(namespace)

定名空间是HBase中的一个逻辑概念,用于对表举行逻辑分组,类似于关系型数据库中的数据库概念。
1.创建定名空间:

create_namespace  '定名空间名称'
2.枚举定名空间

list_namespace
3.获取定名空间形貌

describe_namespace '定名空间名称'
4.查察定名空间下的全部表

list_namespace_tables '定名空间名称'
5.删除定名空间

drop_namespace '定名空间名称'



四、DDL组(与表干系的下令)

1. 创建表create

在创建一个表的时间,列族必须作为模式界说的一部门预先给出,而列族是支持动态扩展的,也就是列族成员可以随后按需参加,既创建表时只须要指定列族名称,不须要指定列名
语法1:
create '表名', {NAME => '列簇名1'}, {NAME => '列簇名2'}, {NAME => '列簇名3'}

留意:指定定名空间下创建表(定名空间类似于数据库,相当于指定某数据库下创建表)
create '定名空间:表名' '列簇名'


语法2:
create '表名', '列族名1', '列簇名2', '列簇名3'
(此种方式是上面的简写方式,但使用上面方式可以为列族指定更多的属性,如VERSIONS、TTL、BLOCKCACHE、CONFIGURATION等属性,就是下面的语法3)

语法3:
create '表名', {NAME => '列簇名1', VERSIONS => 版本号, TTL => 逾期时间, BLOCKCACHE => true}

语法1示例:
create 'tbl_user', 'info', 'detail'
语法3示例:
create 't1', {NAME => 'f1', VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true},{NAME => 'f2',..}


2.修改(添加、删除)表结构Schema alter

2.1添加一个列簇

语法:
alter '表名', '列族名'
示例:
alter  'table1', 'cf2'

2.2删除一个列簇

语法 :
alter '表名', {NAME=> '列族名', METHOD=> 'delete'}
示例:
alter 'tbl_user', {NAME=> 'address', METHOD=> 'delete'}


2.3修改列簇的属性

(可以修改列簇的VERSIONS、IN_MEMORY )

语法1:修改表table1的列簇cf1的版本为5
alter 'table1', NAME => 'cf1', VERSIONS => 5

语法2:修改多个列簇,修改cf2为内存,cf3版本号为5
alter 'table1', 'cf1', {NAME => 'cf2', IN_MEMORY => true}, {NAME => 'cf3', VERSIONS => 5}

也可以修改table-scope属性,比方MAX_FILESIZE, READONLY,MEMSTORE_FLUSHSIZE, DEFERRED_LOG_FLUSH等。
比方,修改region的最大巨细为128MB:
alter 't1', MAX_FILESIZE => '134217728'



3.表的根本利用

3.1获取表的形貌

语法:describe '表名'
3.2枚举全部表(全部的定名空间下全部的表)

语法:list
3.3查察表是否存在

语法:exists
3.4启用表和禁用表

通过enable和disable来启用/禁用这个表,相应的可以通过is_enabled和is_disabled来查抄表是否被禁用
(1)启用表:enable '表名'
(2)查察表是否被启用:is_enabled '表名'
(3)禁用表:disable '表名'
(4)查察表是否被禁用:is_disabled '表名'
3.4.1禁用满意正则表达式的全部表(disable_all )


  •         .匹配除“\n”和"\r"之外的任何单个字符
  •         *匹配前面的子表达式恣意次
# 匹配以t开头的表名
disable_all 't.*'
# 匹配指定定名空间ns下的以t开头的全部表
disable_all 'ns:t.*'
# 匹配ns定名空间下的全部表
disable_all 'ns:.*'
3.4.2启用满意正则表达式的全部表(enable_all )enable_all 't.*'

enable_all 'ns:t.*'
enable_all 'ns:.*'

3.5 修改表可以存储多个版本

语法:alter '表名',NAME=>'列簇名',VERSIONS=>版本数目

3.6 删除表

须要先禁用表,然后再删除表,启用的表是不允许删除的
语法1:删除单张表
disable '表名'
drop '表名'
语法2:删除满意正则表达式的全部表
drop_all 't.*'            //删除t开头的全部表(默认定名空间下)
drop_all 'ns:t.*'       //删除ns定名空间下t开头的全部表
drop_all 'ns:.*'        //删除ns定名空间下的全部表

3.7 获取某个表赋值给一个变量(get_table)

通过 var = get_table ‘表名’  赋值给一个变量对象,然后对象.来调用,就像面向对象编程一样,通过对象.方法来调用,这种方式在利用某个表时就不必每次枚举表名了。



3.8 获取rowKey地点的区( locate_region)

语法:locate_region '表名', '行键'


3.9 表现hbase所支持的全部过滤器(show_filters)

过滤器用于get和scan下令中作为筛选数据的条件,范例关系型数据库中的where的作用



五、DML(数据利用组)

1.插入大概修改数据put


语法1:当列族中只有一个列时'列族名:列名'使用'列族名'
put '表名', '行键', '列族名', '列值'
语法2:
put '表名', '行键', '列族名:列名', '列值'


# 示例
# 创建表
create 'tal_users', 'info', 'detail', 'address'

# 插入第一行数据
put 'tal_users', 'rk1001', 'info:id', '1'
put 'tal_users', 'rk1001', 'info:name', '张三'
put 'tal_users', 'rk1001', 'info:age', '28'
put 'tal_users', 'rk1001', 'detail:birthday', '1990-06-26'
put 'tal_users', 'rk1001', 'detail:email', 'abc@163.com'
put 'tal_users', 'rk1001', 'detail:create_time', '2019-03-04 14:26:10'
put 'tal_users', 'rk1001', 'address', '上海市'

#插入第二行数据
put 'tal_users', 'rk1002', 'info:id', '2'
put 'tal_users', 'rk1002', 'info:name', '李四'
put 'tal_users', 'rk1002', 'info:age', '27'
put 'tal_users', 'rk1002', 'detail:birthday', '1990-06-27'
put 'tal_users', 'rk1002', 'detail:email', 'xxx@gmail.com'
put 'tal_users', 'rk1002', 'detail:create_time', '2019-03-05 14:26:10'
put 'tal_users', 'rk1002', 'address', '北京市'

#插入第三行数据
put 'tal_users', 'rk1003', 'info:id', '3'
put 'tal_users', 'rk1003', 'info:name', '王五'
put 'tal_users', 'rk1003', 'info:age', '26'
put 'tal_users', 'rk1003', 'detail:birthday', '1990-06-28'
put 'tal_users', 'rk1003', 'detail:email', 'xyz@qq.com'
put 'tal_users', 'rk1003', 'detail:create_time', '2019-03-06 14:26:10'
put 'tal_users', 'rk1003', 'address', '杭州市'
 
将内存中的数据革新到表中:
flush 'tal_users'

如许每个列簇下都有数据
留意:每次flush都会将内存中的数据书革新到表中,但是会新天生一个小文件来存放此数据,因此我们可以使用major_compact '表名'来归并这些小文件



2.全表扫描scan

(效果类似于sql语句中select * from xxx)
2.2查询完备数据

语法1:scan '表名'
以1中插入的数据表为例:
scan 'tal_users'

留意:Table中的全部行都是按照row key的字典排序的


2.3 查询某个列簇数据

语法:
scan '表名', {COLUMN=>'列族名'}
示例:
scan 'tal_users',{COLUMN=>'info'}


2.4 查询某个列簇下的某个列数据

语法:
scan '表名', {COLUMN=>'列族名:列名'}

示例
scan 'tal_users', {COLUMN=>'info:age'}


3.获取数据

语法1:获取一行数据
get '表名', '行键'
示例: get 'tal_users','rk1001'



语法2:获取一行数据中某个列簇的数据
get '表名','行键','列簇名'
示例:get 'tal_users','rk1001','detail' 或get 'tal_users', 'rk1002',{COLUMN =>'detail'}



语法3:获取一行数据中多个列簇的数据
get '表名','行键',['列簇名1','列簇名2'】
示例:
get 'tal_users','rk1001',['info','detail']




语法4:获取某个单元格的数据
get '表名','行键','列簇名:列名'
示例:get 'tal_users','rk1002','detail:birthday' 



语法5:获取某个单元格多个版本的值,默认是按照时间戳降序排序
get '表名', '行键', {COLUMN => '列簇名', VERSIONS => 版本数}

4.删除数据

4.1删除某个列簇中的某个列(delete)

语法:delete '表名', '行键', '列族名:列名'
4.2删除某行数据(deleteall)

语法:deleteall '表名', '行键'

5.清空表数据

语法:truncate '表名'

6.自增与计数器

6.1自增(incr)

语法
incr '表名', '行键', '列族:列名', 步长值
incr 'tal_users','rk1004','info:name',1

# 留意:incr 是对不存在的行键利用,如果行键已经存在会报错,如果使用put修改了incr的值再使用incr也会报错


6.2计数器(get_counter )

# 创建表(点击量:日、周、月)
create 'counters', 'daily', 'weekly', 'monthly'
incr 'counters', '20240415', 'daily:hits', 1          
incr 'counters', '20110101', 'daily:hits', 1

统计表有多少行(统计的是行键的个数)
count '表名'

获取数目
get_counter 'counters', '20110101', 'daily:hits'      

7.修饰词过滤

7.1 COLUMNS(与列簇列名干系)

语法:scan '表名', {COLUMNS => [ '列族名1:列名1', '列族名1:列名2', ...]}
示例:scan 'tal_users',{COLUMNS=> ['info:name','info:id']} 


7.2TIMESTAMP( 指定时间戳)

语法:scan '表名',{TIMERANGE=>[timestamp1, timestamp2]}
留意:区间取得值为[ ,),右边的值取不到    
 
7.3 VERSIONS(版本号)

默认环境下一个列只能存储一个数据,反面如果修改数据就会将原来的覆盖掉,可以通过指定VERSIONS使HBase一列能存储多个值。
示例:
create 'tbl_test', 'columnFamily1'
describe 'tbl_test'

# 修改列族版本号
alter 'tbl_test', { NAME=>'columnFamily1', VERSIONS=>3 }
put 'tbl_test', 'rowKey1', 'columnFamily1:column1', 'value1'
put 'tbl_test', 'rowKey1', 'columnFamily1:column1', 'value2'
put 'tbl_test', 'rowKey1', 'columnFamily1:column1', 'value3'

(1)默认返回最新的一条数据
get 'tbl_test','rowKey1','columnFamily1:column1'
(2)返回2个
get 'tbl_test','rowKey1',{COLUMN=>'columnFamily1:column1', VERSIONS=>2}
(3)返回3个
get 'tbl_test','rowKey1',{COLUMN=>'columnFamily1:column1', VERSIONS=>3}

7.4 STARTROW

ROWKEY起始行。会先根据这个key定位到region,再向后扫描
语法:scan '表名', { STARTROW => '行键名'}
示例:
scan 'tal_users', { STARTROW => 'rk1003'}



7.5 STOPROW

停止到STOPROW行之前的数据,不包罗STOPROW这行数据
语法:scan '表名', { STOPROW=> '行键名'}
示例:
scan 'tal_users', { STOPROW=> 'rk1003'}


将 STARTROW与STOPROW联合使用:左闭右开
scan 'tal_users', { STARTROW=>'rk1001',STOPROW=> 'rk1003'}


7.6 LIMIT 

语法1:返回限定的行数(从前以后)
scan '表名', { LIMIT => 行数}
语法2:返回限定的行数(从后往前)
scan '表名',{LIMIT=>行数,REVERSED=>true}

六、FILTER条件过滤器

1、ValueFilter 值过滤器

语法1:binary (便是某个值)
scan '表名', FILTER=>"ValueFilter(=,'binary:列值')"
示例:
scan 'tal_users',FILTER=>"ValueFilter(=,'binary:26')"



语法2:substring(包罗某个值)
scan '表名', FILTER=>"ValueFilter(=,'substring:列值')"
示例:
 scan 'tal_users',FILTER=>"ValueFilter(=,'substring:2019')"



2、ColumnPrefixFilter 列名前缀过滤器

语法:
scan '表名', FILTER=>"ColumnPrefixFilter('列名前缀')"
示例:
scan 'tal_users',FILTER=>"ColumnPrefixFilter('a')"


七、与region有关的下令

1.查察表的全部region

list_regions '表名'

2.欺压将表切分出来一个region

split '表名','行键'

示例:split 'tal_users','rk1003'
切分前:


切分后:
留意:此时切分后的形成的两个region并不是在同一台呆板上,而是一个region在node1,一个在node2,这是由于底层中Hmaster对RegionServer上的region作负载均衡才导致这个征象



3. 查察某一行在哪个region中

语法: locate_region '表名','行键'

4.查察region中的某列簇数据

语法:hbase hfile -p -f 'hdfs中存放列簇数据的目次'
留意:不是在客户端使用此下令


5.获取region的分割点,扫除数据,快照



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表