Hxbase shell 基本 *** 作命令
温旧酒一壶~
转载
关注
2点赞·1726人阅读
版权声明:原文链接:https://blog.csdn.net/vbirdbest/article/details/88236575
目录
一、 HBase Shell
二、general命名
1.显示集群状态status
2. 查询数据库版本version
3. 显示当前用户与组 whoami
4. 查看 *** 作表的命令table_help
5. 退出HBase Shell exit
三、ddl命令
1. 创建表create
2. 修改(添加、删除)表结构Schema alter
2.1 添加一个列族
2.2 删除一个列族
2.3 修改列族的属性可以修改列族的VERSIONS、IN_MEMORY
3. 异步修改Schema alter_async
4. 获取alter_async执行的状态 alter_status
5. 获取表的描述describe
6. 列举所有表list
7. 表是否存在exists
8. 启用表enable和禁用表disable
9. 禁用满足正则表达式的所有表disable_all
10. 启用满足正则表达式的所有表enable_all
11. 删除表drop
12. 删除满足正则表达式的所有表drop_all
13. 获取某个表赋值给一个变量 get_table
14. 获取rowKey所在的区 locate_region
15. 显示hbase所支持的所有过滤器show_filters
四、namespace命令
1. 列举命名空间 list_namespace
2. 获取命名空间描述 describe_namespace
3. 查看命名空间下的所有表 list_namespace_tables
4. 创建命名空间create_namespace
5. 修改命名空间的属性
6. 删除命名空间drop_namespace
五:dml命令
1. 插入或者修改数据put
2. 全表扫描scan
1、扫描整个列簇
2、扫描整个列簇的某个列
3. 获取数据get
4. 删除某个列族中的某个列delete
5. 删除某行数据deleteall
6. 清空整个表的数据truncate
7. 查询表中有多少行count
8. 自增incr
9. 计数器get_counter
10. 修饰词
10.1 COLUMNS: 查询同一个列族的多个列
10.2 TIMESTAMP 指定时间戳
10.3 TIMERANGE表示的是”>=开始时间 and <结束时间“
10.4 VERSIONS
10.5 STARTROW
10.6 STOPROW :截止到STOPROW行,STOPROW行之前的数据,不包括STOPROW这行数据
10.7 LIMIT 返回的行数
11. FILTER条件过滤器
一、 HBase Shell
HBase Shell 是官方提供的一组命令,用于 *** 作HBase。如果配置了HBase的环境变量了,就可以知己在命令行中输入hbase shell 命令进入命令行。
hbase shell
help命令
可以通过 help '命名名称'来查看命令行的具体使用,包括命令的作用和用法。
通过help ‘hbase’ 命名来查看hbase shell 支持的所有命令,hbase将命令进行分组,其中ddl、dml使用较多。
二、general命名
1.显示集群状态status
可以为 ‘summary’, ‘simple’, ‘detailed’, or ‘replication’. 默认为 ‘summary’
hbase>status
hbase>status 'simple'
hbase>status 'summary'
hbase>status 'detailed'
hbase>status 'replication'
hbase>status 'replication', 'source'
hbase>status 'replication', 'sink'
登录后复制
2. 查询数据库版本version
3. 显示当前用户与组 whoami
4. 查看 *** 作表的命令table_help
5. 退出HBase Shell exit
exit
登录后复制
三、ddl命令
1. 创建表create
注意:创建表时只需要指定列族名称,不需要指定列名。
# 语法
create '表名', {NAME =>'列族名1'}, {NAME =>'列族名2'}, {NAME =>'列族名3'}
# 此种方式是上上面的简写方式,使用上面方式可以为列族指定更多的属性,如VERSIONS、TTL、BLOCKCACHE、CONFIGURATION等属性
create '表名', '列族名1', '列族名2', '列族名3'
create '表名', {NAME =>'列族名1', VERSIONS =>版本号, TTL =>过期时间, BLOCKCACHE =>true}
# 示例
create 'tbl_user', 'info', 'detail'
create 't1', {NAME =>'f1', VERSIONS =>1, TTL =>2592000, BLOCKCACHE =>true}
登录后复制
2. 修改(添加、删除)表结构Schema alter
2.1 添加一个列族
# 语法
alter '表名', '列族名'
# 示例
alter 'tbl_user', 'address'
登录后复制
2.2 删除一个列族
# 语法
alter '表名', {NAME=>'列族名', METHOD=>'delete'}
# 示例
alter 'tbl_user', {NAME=>'address', METHOD=>'delete'}
登录后复制
2.3 修改列族的属性
可以修改列族的VERSIONS、IN_MEMORY
# 修改f1列族的版本为5
alter 't1', NAME =>'f1', VERSIONS =>5
# 修改多个列族,修改f2为内存,版本号为5
alter 't1', 'f1', {NAME =>'f2', IN_MEMORY =>true}, {NAME =>'f3', VERSIONS =>5}
# 也可以修改table-scope属性,例如MAX_FILESIZE, READONLY,MEMSTORE_FLUSHSIZE, DEFERRED_LOG_FLUSH等。
# 例如,修改region的最大大小为128MB:
alter 't1', MAX_FILESIZE =>'134217728'
登录后复制
3. 异步修改Schema alter_async
# change or add the 'f1' column family in table 't1' from defaults
to instead keep a maximum of 5 cell VERSIONS
alter_async 't1', NAME =>'f1', VERSIONS =>5
# delete the 'f1' column family in table 'ns1:t1'
alter_async 'ns1:t1', NAME =>'f1', METHOD =>'delete'
alter_async 'ns1:t1', 'delete' =>'f1'
# change the max size of a family to 128MB
alter 't1', METHOD =>'table_att', MAX_FILESIZE =>'134217728'
alter 't1', {NAME =>'f1'}, {NAME =>'f2', METHOD =>'delete'}
登录后复制
4. 获取alter_async执行的状态 alter_status
alter_status '表名'
登录后复制
5. 获取表的描述describe
# 语法
describe '表名'
# 示例
describe 'tbl_user'
登录后复制
6. 列举所有表list
7. 表是否存在exists
# 语法
exists '表名'
# 示例
exists 'tbl_user'
登录后复制
8. 启用表enable和禁用表disable
通过enable和disable来启用/禁用这个表,相应的可以通过is_enabled和is_disabled来检查表是否被禁用。
# 语法
enable '表名'
is_enabled '表名'
disable '表名'
is_disabled '表名'
# 示例
disable 'tbl_user'
is_disabled 'tbl_user'
enable 'tbl_user'
is_enabled 'tbl_user'
登录后复制
9. 禁用满足正则表达式的所有表disable_all
匹配除“\n”和"\r"之外的任何单个字符
*匹配前面的子表达式任意次
# 匹配以t开头的表名
disable_all 't.*'
# 匹配指定命名空间ns下的以t开头的所有表
disable_all 'ns:t.*'
# 匹配ns命名空间下的所有表
disable_all 'ns:.*'
登录后复制
10. 启用满足正则表达式的所有表enable_all
enable_all 't.*'
enable_all 'ns:t.*'
enable_all 'ns:.*'
登录后复制
11. 删除表drop
需要先禁用表,然后再删除表,启用的表是不允许删除的
# 语法
disable '表名'
drop '表名'
# 示例
disable 'tbl_user'
drop 'tbl_user'
登录后复制
12. 删除满足正则表达式的所有表drop_all
drop_all 't.*'
drop_all 'ns:t.*'
drop_all 'ns:.*'
登录后复制
13. 获取某个表赋值给一个变量 get_table
通过 var = get_table ‘表名’ 赋值给一个变量对象,然后对象.来调用,就像面向对象编程一样,通过对象.方法来调用,这种方式在 *** 作某个表时就不必每次列举表名了。
14. 获取rowKey所在的区 locate_region
locate_region '表名', '行键'
登录后复制
15. 显示hbase所支持的所有过滤器show_filters
过滤器用于get和scan命令中作为筛选数据的条件,类型关系型数据库中的where的作用
四、namespace命令
1. 列举命名空间 list_namespace
2. 获取命名空间描述 describe_namespace
3. 查看命名空间下的所有表 list_namespace_tables
4. 创建命名空间create_namespace
5. 修改命名空间的属性
# add/modify a property
alter_namespace 'ns1', {METHOD =>'set', 'PROPERTY_NAME' =>'PROPERTY_VALUE'}
# delete a property
alter_namespace 'ns1', {METHOD =>'unset', NAME=>'PROPERTY_NAME'}
登录后复制
6. 删除命名空间drop_namespace
drop_namespace '命名空间名称'
登录后复制
五:dml命令
1. 插入或者修改数据put
# 语法
# 当列族中只有一个列时'列族名:列名'使用'列族名'
put '表名', '行键', '列族名', '列值'
put '表名', '行键', '列族名:列名', '列值'
# 示例
# 创建表
create 'tbl_user', 'info', 'detail', 'address'
# 第一行数据
put 'tbl_user', 'mengday', 'info:id', '1'
put 'tbl_user', 'mengday', 'info:name', '张三'
put 'tbl_user', 'mengday', 'info:age', '28'
put 'tbl_user', 'mengday', 'detail:birthday', '1990-06-26'
put 'tbl_user', 'mengday', 'detail:email', 'abc@163.com'
put 'tbl_user', 'mengday', 'detail:create_time', '2019-03-04 14:26:10'
put 'tbl_user', 'mengday', 'address', '上海市'
# 第二行数据
put 'tbl_user', 'vbirdbest', 'info:id', '2'
put 'tbl_user', 'vbirdbest', 'info:name', '李四'
put 'tbl_user', 'vbirdbest', 'info:age', '27'
put 'tbl_user', 'vbirdbest', 'detail:birthday', '1990-06-27'
put 'tbl_user', 'vbirdbest', 'detail:email', 'xxx@gmail.com'
put 'tbl_user', 'vbirdbest', 'detail:create_time', '2019-03-05 14:26:10'
put 'tbl_user', 'vbirdbest', 'address', '北京市'
# 第一行数据
put 'tbl_user', 'xiaoming', 'info:id', '3'
put 'tbl_user', 'xiaoming', 'info:name', '王五'
put 'tbl_user', 'xiaoming', 'info:age', '26'
put 'tbl_user', 'xiaoming', 'detail:birthday', '1990-06-28'
put 'tbl_user', 'xiaoming', 'detail:email', 'xyz@qq.com'
put 'tbl_user', 'xiaoming', 'detail:create_time', '2019-03-06 14:26:10'
put 'tbl_user', 'xiaoming', 'address', '杭州市'
登录后复制
2. 全表扫描scan
获取表的所有数据
# 语法
scan '表名'
# 示例
scan 'tbl_user'
登录后复制
注意:中文编码了
1、扫描整个列簇
# 语法
scan '表名', {COLUMN=>'列族名'}
# 示例
scan 'tbl_user', {COLUMN=>'info'}
登录后复制
2、扫描整个列簇的某个列
# 语法
scan '表名', {COLUMN=>'列族名:列名'}
# 示例
scan 'tbl_user', {COLUMN=>'info:age'}
登录后复制
3. 获取数据get
# 语法
get '表名', '行键'
# 示例
get 'tbl_user', 'mengday'
登录后复制
根据某一行某列族的数据
# 语法
get '表名', '行键', '列族名'
# 示例
get 'tbl_user', 'mengday', 'info'
登录后复制
# 创建表,c1版本为4, 元数据mykey=myvalue
hbase(main):009:0>create 't1', {NAME =>'c1', VERSIONS =>4}, METADATA =>{ 'mykey' =>'myvalue' }
0 row(s) in 2.2810 seconds
=>Hbase::Table - t1
# 添加列族c2, c3
hbase(main):010:0>alter 't1', 'c2', 'c3'
Updating all regions with the new schema...
1/1 regions updated.
Done.
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 3.8320 seconds
# 出入数据,c1 插入4个版本的值
hbase(main):011:0>put 't1', 'r1', 'c1', 'v1'
0 row(s) in 0.1000 seconds
hbase(main):012:0>put 't1', 'r1', 'c1', 'v11'
0 row(s) in 0.0180 seconds
hbase(main):013:0>put 't1', 'r1', 'c1', 'v111'
0 row(s) in 0.0140 seconds
hbase(main):014:0>put 't1', 'r1', 'c1', 'v1111'
0 row(s) in 0.0140 seconds
# 插入c2、c3的值
hbase(main):015:0>put 't1', 'r1', 'c2', 'v2'
0 row(s) in 0.0140 seconds
hbase(main):016:0>put 't1', 'r1', 'c3', 'v3'
0 row(s) in 0.0210 seconds
# 获取rowKey=r1的一行记录
hbase(main):017:0>get 't1', 'r1'
COLUMN CELL
c1:timestamp=1552819382575, value=v1111
c2:timestamp=1552819392398, value=v2
c3:timestamp=1552819398244, value=v3
3 row(s) in 0.0550 seconds
# 获取rowKey=r1并且 1552819392398 <= 时间戳范围 <1552819398244
hbase(main):018:0>get 't1', 'r1', {TIMERANGE =>[1552819392398, 1552819398244]}
COLUMN CELL
c2:timestamp=1552819392398, value=v2
1 row(s) in 0.0090 seconds
# 获取指定列的值
hbase(main):019:0>get 't1', 'r1', {COLUMN =>'c1'}
COLUMN CELL
c1:timestamp=1552819382575, value=v1111
1 row(s) in 0.0160 seconds
# 获取指定列的值,多个值使用数组表示
hbase(main):020:0>get 't1', 'r1', {COLUMN =>['c1', 'c2', 'c3']}
COLUMN CELL
c1:timestamp=1552819382575, value=v1111
c2:timestamp=1552819392398, value=v2
c3:timestamp=1552819398244, value=v3
3 row(s) in 0.0170 seconds
# 获取c1的值,获取4个版本的值,默认是按照时间戳降续排序的
hbase(main):021:0>get 't1', 'r1', {COLUMN =>'c1', VERSIONS =>4}
COLUMN CELL
c1:timestamp=1552819382575, value=v1111
c1:timestamp=1552819376343, value=v111
c1:timestamp=1552819368993, value=v11
c1:timestamp=1552819362975, value=v1
4 row(s) in 0.0180 seconds
# 获取c1的3个版本值
hbase(main):027:0* get 't1', 'r1', {COLUMN =>'c1', VERSIONS =>3}
COLUMN CELL
c1: timestamp=1552819382575, value=v1111
c1: timestamp=1552819376343, value=v111
c1: timestamp=1552819368993, value=v11
3 row(s) in 0.0090 seconds
# 获取指定时间戳版本的列
hbase(main):022:0>get 't1', 'r1', {COLUMN =>'c1', TIMESTAMP =>1552819376343}
COLUMN CELL
c1:timestamp=1552819376343, value=v111
1 row(s) in 0.0170 seconds
hbase(main):023:0>get 't1', 'r1', {COLUMN =>'c1', TIMESTAMP =>1552819376343, VERSIONS =>4}
COLUMN CELL
c1:timestamp=1552819376343, value=v111
1 row(s) in 0.0130 seconds
# 获取rowKey=r1中的值等于v2的所有列
hbase(main):024:0>get 't1', 'r1', {FILTER =>"ValueFilter(=, 'binary:v2')"}
COLUMN CELL
c2:timestamp=1552819392398, value=v2
1 row(s) in 0.0510 seconds
hbase(main):025:0>get 't1', 'r1', {COLUMN =>'c1', ATTRIBUTES =>{'mykey'=>'myvalue'}}
COLUMN CELL
c1:timestamp=1552819382575, value=v1111
1 row(s) in 0.0100 seconds
登录后复制
4. 删除某个列族中的某个列delete
# 语法
delete '表名', '行键', '列族名:列名'
create 'tbl_test', 'columnFamily1'
put 'tbl_test', 'rowKey1', 'columnFamily1:column1', 'value1'
put 'tbl_test', 'rowKey1', 'columnFamily1:column2', 'value2'
delete 'tbl_test', 'rowKey1', 'columnFamily1:column1'
登录后复制
5. 删除某行数据deleteall
# 语法
deleteall '表名', '行键'
# 示例
deleteall 'tbl_test', 'rowKey1'
登录后复制
6. 清空整个表的数据truncate
先disable表,然后再drop表,最后重新create表
truncate '表名'
登录后复制
7. 查询表中有多少行count
# 语法
count '表名'
# 示例
count 'tbl_user'
登录后复制
8. 自增incr
# 语法
incr '表名', '行键', '列族:列名', 步长值
# 示例
# 注意:incr 可以对不存的行键 *** 作,如果行键已经存在会报错,如果使用put修改了incr的值再使用incr也会报错
# ERROR: org.apache.hadoop.hbase.DoNotRetryIOException: Field is not a long, it's 2 bytes wide
incr 'tbl_user', 'xiaohong', 'info:age', 1
登录后复制
9. 计数器get_counter
# 点击量:日、周、月
create 'counters', 'daily', 'weekly', 'monthly'
incr 'counters', '20110101', 'daily:hits', 1
incr 'counters', '20110101', 'daily:hits', 1
get_counter 'counters', '20110101', 'daily:hits'
登录后复制
10. 修饰词
10.1 COLUMNS: 查询同一个列族的多个列
# 语法
scan '表名', {COLUMNS =>[ '列族名1:列名1', '列族名1:列名2', ...]}
# 示例
scan 'tbl_user', {COLUMNS =>[ 'info:id', 'info:age']}
登录后复制
10.2 TIMESTAMP 指定时间戳
scan 't1', {COLUMNS =>'c2', TIMESTAMP=>1552819392398}
登录后复制
10.3 TIMERANGE表示的是”>=开始时间 and <结束时间“
# 语法
scan '表名',{TIMERANGE=>[timestamp1, timestamp2]}
# 示例
scan 'tbl_user',{TIMERANGE=>[1551938004321, 1551938036450]}
登录后复制
10.4 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'
# 默认返回最新的一条数据
get 'tbl_test','rowKey1','columnFamily1:column1'
# 返回3个
get 'tbl_test','rowKey1',{COLUMN=>'columnFamily1:column1', VERSIONS=>3}
# 返回2个
get 'tbl_test','rowKey1',{COLUMN=>'columnFamily1:column1', VERSIONS=>2}
登录后复制
10.5 STARTROW
ROWKEY起始行。会先根据这个key定位到region,再向后扫描
# 语法
scan '表名', { STARTROW =>'行键名'}
# 示例
scan 'tbl_user', { STARTROW =>'vbirdbest'}
登录后复制
10.6 STOPROW :截止到STOPROW行,STOPROW行之前的数据,不包括STOPROW这行数据
# 语法
scan '表名', { STOPROW =>'行键名'}
# 示例
scan 'tbl_user', { STOPROW =>'vbirdbest'}
登录后复制
10.7 LIMIT 返回的行数
# 语法
scan '表名', { LIMIT =>行数}
# 示例
scan 'tbl_user', { LIMIT =>2 }
登录后复制
11. FILTER条件过滤器
过滤器之间可以使用AND、OR连接多个过滤器。
ValueFilter 值过滤器
# 语法:binary 等于某个值
scan '表名', FILTER=>"ValueFilter(=,'binary:列值')"
# 语法 substring:包含某个值
scan '表名', FILTER=>"ValueFilter(=,'substring:列值')"
# 示例
scan 'tbl_user', FILTER=>"ValueFilter(=, 'binary:26')"
scan 'tbl_user', FILTER=>"ValueFilter(=, 'substring:6')"
登录后复制
ColumnPrefixFilter 列名前缀过滤器
# 语法 substring:包含某个值
scan '表名', FILTER=>"ColumnPrefixFilter('列名前缀')"
# 示例
scan 'tbl_user', FILTER=>"ColumnPrefixFilter('birth')"
# 通过括号、AND和OR的条件组合多个过滤器
scan 'tbl_user', FILTER=>"ColumnPrefixFilter('birth') AND ValueFilter(=,'substring:26')"
登录后复制
rowKey字典排序
Table中的所有行都是按照row key的字典排序的
两种方式:一,建立一个hive和hbase公用的表,这样可以使用hive *** 作hbase的表,但是插入数据较慢,不建议这样做。 二,手写mapreduce,把hive里面的数据转换为hfile,然后倒入。hbase的mapreduce接口里面好像也有对应的api可以直接导入的。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)