文章目录
- 一,具体实践
- 二,官方命令介绍
- shell中所有命令
- help:查看帮助命令
- list:查看当前数据库中有哪些表
- create:创建表
- put:插入(更新)数据到表
- scan:扫描查看表数据
- desc/describe:查看表结构
- get:获取指定行或单元格内容
- alter:变更表信息
- delete:删除数据
- deleteall:删除所有单元格
- drop/drop_all: 删除指定的表
- count:统计表数据行数
- truncate:清空表数据
- status: 显示集群状态
- table_help: 表引用命令的帮助
- whoami: 显示当前的hbase用户
- disable/disable_all : 禁用指定表
- enable/enable_all:启用指定表
- exists:查看指定表是否存在
- append:追加值
- incr:递增单元格值
一,具体实践
1.1 基本操作
1.进入HBase客户端命令行
[root@node1 hbase]$ bin/hbase shell
2.查看帮助命令
hbase(main):001:0> help
# 查看指定命令帮助
help "命令名"
3.查看当前数据库中有哪些表
hbase(main):002:0> list
1.2 表的操作
1.创建表
hbase(main):002:0> create 'student','info'
2.插入数据到表
hbase(main):003:0> put 'student','1001','info:sex','male'
hbase(main):004:0> put 'student','1001','info:age','18'
hbase(main):005:0> put 'student','1002','info:name','Janna'
hbase(main):006:0> put 'student','1002','info:sex','female'
hbase(main):007:0> put 'student','1002','info:age','20'
3.扫描查看表数据
hbase(main):008:0> scan 'student'
hbase(main):009:0> scan 'student',{STARTROW => '1001', STOPROW => '1001'}
hbase(main):010:0> scan 'student',{STARTROW => '1001'}
4.查看表结构
hbase(main):011:0> describe 'student'
5.更新指定字段的数据
hbase(main):012:0> put 'student','1001','info:name','Nick'
hbase(main):013:0> put 'student','1001','info:age','100'
6.查看“指定行”或“指定列族:列”的数据
hbase(main):014:0> get 'student','1001'
hbase(main):015:0> get 'student','1001','info:name'
7.统计表数据行数
hbase(main):021:0> count 'student'
8.删除数据
删除某rowkey的全部数据:
hbase(main):016:0> deleteall 'student','1001'
删除某rowkey的某一列数据:
hbase(main):017:0> delete 'student','1002','info:sex'
9.清空表数据
hbase(main):018:0> truncate 'student'
提示:清空表的操作顺序为先disable,然后再truncate。
10.删除表
首先需要先让该表为disable状态:
hbase(main):019:0> disable 'student'
然后才能drop这个表:
hbase(main):020:0> drop 'student'
提示:如果直接drop表,会报错:ERROR: Table student is enabled. Disable it first.
11.变更表信息
将info列族中的数据存放3个版本:
hbase(main):022:0> alter 'student',{NAME=>'info',VERSIONS=>3}
hbase(main):022:0> get 'student','1001',{COLUMN=>'info:name',VERSIONS=>3}
二,官方命令介绍
shell中所有命令
Group name: general
Commands: status, table_help, version, whoami
Group name: ddl
Commands: alter, alter_async, alter_status, create, describe, disable, disable_all, drop, drop_all, enable, enable_all, exists, get_table, is_disabled, is_enabled, list, locate_region, show_filters
Group name: namespace
Commands: alter_namespace, create_namespace, describe_namespace, drop_namespace, list_namespace, list_namespace_tables
Group name: dml
Commands: append, count, delete, deleteall, get, get_counter, get_splits, incr, put, scan, truncate, truncate_preserve
Group name: tools
Commands: assign, balance_switch, balancer, balancer_enabled, catalogjanitor_enabled, catalogjanitor_run, catalogjanitor_switch, close_region, compact, compact_mob, compact_rs, flush, is_in_maintenance_mode, major_compact, major_compact_mob, merge_region, move, normalize, normalizer_enabled, normalizer_switch, split, splitormerge_enabled, splitormerge_switch, trace, unassign, wal_roll, zk_dump
Group name: replication
Commands: add_peer, append_peer_tableCFs, disable_peer, disable_table_replication, enable_peer, enable_table_replication, get_peer_config, list_peer_configs, list_peers, list_replicated_tables, remove_peer, remove_peer_tableCFs, set_peer_tableCFs, show_peer_tableCFs, update_peer_config
Group name: snapshots
Commands: clone_snapshot, delete_all_snapshot, delete_snapshot, list_snapshots, restore_snapshot, snapshot
Group name: configuration
Commands: update_all_config, update_config
Group name: quotas
Commands: list_quotas, set_quota
Group name: security
Commands: grant, list_security_capabilities, revoke, user_permission
Group name: procedures
Commands: abort_procedure, list_procedures
Group name: visibility labels
Commands: add_labels, clear_auths, get_auths, list_labels, set_auths, set_visibility
Group name: rsgroup
Commands: add_rsgroup, balance_rsgroup, get_rsgroup, get_server_rsgroup, get_table_rsgroup, list_rsgroups, move_servers_rsgroup, move_tables_rsgroup, remove_rsgroup
help:查看帮助命令
输入“help”命令,例如:help “get” (引号是必须的) 查看指定命令帮助
hbase(main):001:0> help
list:查看当前数据库中有哪些表
list: 列出hbase中的所有表。可以使用正则表达式参数来过滤输出
hbase> list
hbase> list 'abc.*'
hbase> list 'ns:abc.*'
hbase> list 'ns:.*'
create:创建表
创建一个表。传递一个表名、一组列族规范(至少一个)和表的配置(可选)。
列规范可以是一个简单的字符串(名称),也可以是一个字典(字典在下面的主帮助输出中进行了描述),其中必须包含name属性
ns:namespace
t:table
r:rowkey
f:colume family
c:colume
创建一个具有名称空间=ns1和表限定符=t1的表
hbase> create 'ns1:t1', {NAME => 'f1', VERSIONS => 5}
创建一个名称空间为默认,表限定符为t1的表
hbase> create 't1', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}
# 以上简略地说,如下:
hbase> create 't1', 'f1', 'f2', 'f3'
hbase> create 't1', {NAME => 'f1', VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true}
hbase> create 't1', {NAME => 'f1', CONFIGURATION => {'hbase.hstore.blockingStoreFiles' => '10'}}
hbase> create 't1', {NAME => 'f1', IS_MOB => true, MOB_THRESHOLD => 1000000, MOB_COMPACT_PARTITION_POLICY => 'weekly'}
表配置选项可以放在最后。
hbase> create 'ns1:t1', 'f1', SPLITS => ['10', '20', '30', '40']
hbase> create 't1', 'f1', SPLITS => ['10', '20', '30', '40']
hbase> create 't1', 'f1', SPLITS_FILE => 'splits.txt', OWNER => 'johndoe'
hbase> create 't1', {NAME => 'f1', VERSIONS => 5}, METADATA => { 'mykey' => 'myvalue' }
# 可选择使用SPLITALGO ("HexStringSplit", "UniformSplit" or classname)将表预先分割为NUMREGIONS
hbase> create 't1', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}
hbase> create 't1', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit', REGION_REPLICATION => 2, CONFIGURATION => {'hbase.hregion.scan.loadColumnFamiliesOnDemand' => 'true'}}
hbase> create 't1', {NAME => 'f1', DFS_REPLICATION => 1}
您还可以保留对所创建表的引用
hbase> t1 = create 't1', 'f1'
它为你提供对名为’t1’的表的引用,然后您可以在上面调用方法。
put:插入(更新)数据到表
将单元格“值”放在指定的表/行/列和时间戳坐标(可选)。
若要将单元格值放入标有时间’ts1’的列’c1’下的行’r1’的表’ns1:t1’或’t1’中,请执行以下操作:
put ‘表名’,‘rowkey’,‘列簇:列名’,‘value’
hbase> put 'ns1:t1', 'r1', 'c1', 'value'
hbase> put 't1', 'r1', 'c1', 'value'
hbase> put 't1', 'r1', 'c1', 'value', ts1
hbase> put 't1', 'r1', 'c1', 'value', {ATTRIBUTES=>{'mykey'=>'myvalue'}}
hbase> put 't1', 'r1', 'c1', 'value', ts1, {ATTRIBUTES=>{'mykey'=>'myvalue'}}
hbase> put 't1', 'r1', 'c1', 'value', ts1, {VISIBILITY=>'PRIVATE|SECRET'}
同样的命令也可以在表引用上运行。假设您有一个对表“t1”的引用t,那么相应的命令将是
hbase> t.put 'r1', 'c1', 'value', ts1, {ATTRIBUTES=>{'mykey'=>'myvalue'}}
scan:扫描查看表数据
扫描一个表;传递表名和扫描仪规范的字典(可选)。
扫描仪的规格可能包括一个或多个:TIMERANGE( 时间范围 ), FILTER( 过滤器 ), LIMIT, STARTROW( 起始行 ), STOPROW(结束行), ROW PREFIX FILTER(行前缀过滤器),TIMESTAMP(时间戳),MAXLENGTH or COLUMNS, CACHE or RAW, VERSIONS, ALL_METRICS or METRICS
如果没有指定列,则扫描所有列。
要扫描列族的所有成员,将限定符留空,如’col_family’。
过滤器可以通过两种方式指定:
-
使用filterString——有关这方面的更多信息可以在附加到HBASE-4176 JIRA的过滤器语言文档中找到
-
使用筛选器的整个包名。
如果您希望看到有关扫描执行的指标,ALL_METRICS布尔值应该设置为true。或者,如果您希望只看到度量的一个子集,那么可以定义度量数组来只包含您关心的度量的名称。
hbase> scan 'hbase:meta'
hbase> scan 'hbase:meta', {COLUMNS => 'info:regioninfo'}
hbase> scan 'ns1:t1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => 'xyz'}
hbase> scan 't1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => 'xyz'}
hbase> scan 't1', {COLUMNS => 'c1', TIMERANGE => [1303668804, 1303668904]}
hbase> scan 't1', {REVERSED => true}
hbase> scan 't1', {ALL_METRICS => true}
hbase> scan 't1', {METRICS => ['RPC_RETRIES', 'ROWS_FILTERED']}
hbase> scan 't1', {ROWPREFIXFILTER => 'row2', FILTER => "(QualifierFilter (>=, 'binary:xyz')) AND (TimestampsFilter ( 123, 456))"}
hbase> scan 't1', {FILTER =>org.apache.hadoop.hbase.filter.ColumnPaginationFilter.new(1, 0)}
hbase> scan 't1', {CONSISTENCY => 'TIMELINE'}
设置操作属性
hbase> scan 't1', { COLUMNS => ['c1', 'c2'], ATTRIBUTES => {'mykey' => 'myvalue'}}
hbase> scan 't1', { COLUMNS => ['c1', 'c2'], AUTHORIZATIONS => ['PRIVATE','SECRET']}
desc/describe:查看表结构
hbase(main):011:0> describe 'student'
hbase(main):011:0> desc 'student'
get:获取指定行或单元格内容
获取指定行或单元格内容;传递表名、行和 列、时间戳、时间范围和版本的字典(可选)
hbase> get 'ns1:t1', 'r1'
hbase> get 't1', 'r1'
hbase> get 't1', 'r1', {TIMERANGE => [ts1, ts2]}
hbase> get 't1', 'r1', {COLUMN => 'c1'}
hbase> get 't1', 'r1', {COLUMN => ['c1', 'c2', 'c3']}
hbase> get 't1', 'r1', {COLUMN => 'c1', TIMESTAMP => ts1}
hbase> get 't1', 'r1', {COLUMN => 'c1', TIMERANGE => [ts1, ts2], VERSIONS => 4}
hbase> get 't1', 'r1', {COLUMN => 'c1', TIMESTAMP => ts1, VERSIONS => 4}
hbase> get 't1', 'r1', {FILTER => "ValueFilter(=, 'binary:abc')"}
hbase> get 't1', 'r1', 'c1'
hbase> get 't1', 'r1', 'c1', 'c2'
hbase> get 't1', 'r1', ['c1', 'c2']
hbase> get 't1', 'r1', {COLUMN => 'c1', ATTRIBUTES => {'mykey'=>'myvalue'}}
hbase> get 't1', 'r1', {COLUMN => 'c1', AUTHORIZATIONS => ['PRIVATE','SECRET']}
hbase> get 't1', 'r1', {CONSISTENCY => 'TIMELINE'}
hbase> get 't1', 'r1', {CONSISTENCY => 'TIMELINE', REGION_REPLICA_ID => 1}
alter:变更表信息
改变一个表。如果hbase.online.schema.update
属性设置为false,则必须禁用该表
如果hbase.online.schema.update
属性设置为true,可以更改表而不需要先禁用它们
更改启用的表会导致一些问题,所以要谨慎使用,并在生产环境中使用之前进行测试。
可以使用alter命令添加、修改或删除列族或更改表配置选项。
列族的工作方式与“创建”命令类似。
列族规范可以是名称字符串,也可以是具有name属性的字典。
字典是在“帮助”命令的输出中描述的,没有参数。
举例
从当前值更改或添加表“t1”中的“f1”列族,以保持最多5个单元格版本
hbase> alter 't1', NAME => 'f1', VERSIONS => 5
可以对多个列族进行操作
hbase> alter 't1', 'f1', {NAME => 'f2', IN_MEMORY => true}, {NAME => 'f3', VERSIONS => 5}
删除表’ns1:t1’中的’f1’列族
hbase> alter 'ns1:t1', NAME => 'f1', METHOD => 'delete'
hbase> alter 'ns1:t1', 'delete' => 'f1'
您还可以更改表范围的属性,如MAX_FILESIZE、READONLY、MEMSTORE_FLUSHSIZE、持久性等。
这些可以放在最后;例如,将一个区域的最大大小更改为128MB
hbase> alter 't1', MAX_FILESIZE => '134217728'
可以通过设置表协处理器属性来添加表协处理器
hbase> alter 't1',
'coprocessor'=>'hdfs:///foo.jar|com.foo.FooRegionObserver|1001|arg1=1,arg2=2'
由于可以为一个表配置多个协处理器,因此将自动将序列号附加到属性名以惟一地标识它
为了让框架理解如何加载协处理器类,协处理器属性必须与下面的模式匹配
[coprocessor jar file location] | class name | [priority] | [arguments]
您还可以为指定表和列族进行配置设置
hbase> alter 't1', CONFIGURATION => {'hbase.hregion.scan.loadColumnFamiliesOnDemand' => 'true'}
hbase> alter 't1', {NAME => 'f2', CONFIGURATION => {'hbase.hstore.blockingStoreFiles' => '10'}}
您还可以删除表范围属性
hbase> alter 't1', METHOD => 'table_att_unset', NAME => 'MAX_FILESIZE'
hbase> alter 't1', METHOD => 'table_att_unset', NAME => 'coprocessor$1'
您还可以设置region副本数
hbase> alter 't1', {REGION_REPLICATION => 2}
可以在一个命令中进行多次修改
hbase> alter 't1', {NAME => 'f1', VERSIONS => 3 },{MAX_FILESIZE => '134217728' }, {METHOD => 'delete', NAME => 'f2' },OWNER => 'johndoe', METADATA => { 'mykey' => 'myvalue' }
delete:删除数据
在指定的表/行/列和可选的时间戳坐标上放置一个delete单元格值。
删除操作必须与被删除的单元格的坐标完全匹配。
当扫描时,删除单元格将取消旧版本。
在表t1中从标有时间’ts1’的列’c1’下’行’r1’中删除一个单元格
hbase> delete 'ns1:t1', 'r1', 'c1', ts1
hbase> delete 't1', 'r1', 'c1', ts1
hbase> delete 't1', 'r1', 'c1', ts1, {VISIBILITY=>'PRIVATE|SECRET'}
同样的命令也可以在表引用上运行。
假设您有一个对表“t1”的引用t,那么相应的命令将是
hbase> t.delete 'r1', 'c1', ts1
hbase> t.delete 'r1', 'c1', ts1, {VISIBILITY=>'PRIVATE|SECRET'}
deleteall:删除所有单元格
删除给定行中的所有单元格;传递一个表名、行,也可以传递一个列和时间戳
hbase> deleteall 'ns1:t1', 'r1'
hbase> deleteall 't1', 'r1'
hbase> deleteall 't1', 'r1', 'c1'
hbase> deleteall 't1', 'r1', 'c1', ts1
hbase> deleteall 't1', 'r1', 'c1', ts1, {VISIBILITY=>'PRIVATE|SECRET'}
同样的命令也可以在表引用上运行。假设你有一个参考t到表“t1”,对应的命令是
hbase> t.deleteall 'r1'
hbase> t.deleteall 'r1', 'c1'
hbase> t.deleteall 'r1', 'c1', ts1
hbase> t.deleteall 'r1', 'c1', ts1, {VISIBILITY=>'PRIVATE|SECRET'}
drop/drop_all: 删除指定的表
drop 删除指定的表。必须首先禁用表
hbase> drop 't1'
hbase> drop 'ns1:t1'
drop_all 删除所有与给定正则表达式匹配的表
hbase> drop_all 't.*'
hbase> drop_all 'ns:t.*'
hbase> drop_all 'ns:.*'
count:统计表数据行数
计算表中的行数。返回值是行数。
这个操作可能需要很长时间(运行’$HADOOP_HOME/bin/hadoop jar hbase.jar rowcount’来运行一个计数mapreduce作业)。
默认情况下,每1000行显示当前计数。
计数间隔可以指定。
默认情况下,在计数扫描时启用扫描缓存。
默认缓存大小为10行。
如果您的行数量比较少,您可能需要增加这个参数
hbase> count 'ns1:t1'
hbase> count 't1'
hbase> count 't1', INTERVAL => 100000
hbase> count 't1', CACHE => 1000
hbase> count 't1', INTERVAL => 10, CACHE => 1000
同样的命令也可以在表引用上运行。
假设您有一个对表“t1”的引用t,那么相应的命令将是如下
hbase> t.count
hbase> t.count INTERVAL => 100000
hbase> t.count CACHE => 1000
hbase> t.count INTERVAL => 10, CACHE => 1000
truncate:清空表数据
禁用、删除和重新创建指定的表。
status: 显示集群状态
可以是“”、“简单”、“详细”或“复制”。
默认是’summary’
hbase> status
hbase> status 'simple'
hbase> status 'summary'
hbase> status 'detailed'
hbase> status 'replication'
hbase> status 'replication', 'source'
hbase> status 'replication', 'sink'
table_help: 表引用命令的帮助
从0.96开始,您还可以获得对表的引用,您可以在该表上调用命令。
例如,您可以创建一个表,并通过
hbase> t = create 't', 'cf'
如果您已经创建了表,您可以获得对它的引用
hbase> t = get_table 't'
你可以通过引用做一些事情,如同put命令
将列族为“cf”、限定符为“q”和值为“v”的行“r”放入表t中
hbase> t.put 'r', 'cf:q', 'v'
为了读取数据,可以扫描表
hbase> t.scan
它将读取表t中的所有行
本质上,任何接受表名的命令也可以通过表引用来执行。
其他命令包括:get、delete、deleteall、get_all_columns、get_counter、count、incr。这些函数以及标准的JRuby对象方法也可以通过选项卡完成
有关如何使用这些命令的更多信息,也可以输入
hbase> t.help 'scan'
这将输出更多关于如何使用该命令的信息
您还可以直接对表执行一般管理操作;例如启用、禁用、刷新和删除等操作只需输入以下命令即可
hbase> t.enable
hbase> t.flush
hbase> t.disable
hbase> t.drop
请注意,删除表之后,对它的引用将变得无用,并且没有定义进一步的用法
whoami: 显示当前的hbase用户
hbase(main):017:0> whoami
root (auth:SIMPLE)
groups: root
disable/disable_all : 禁用指定表
hbase> disable 't1'
hbase> disable 'ns1:t1'
禁用所有与给定正则表达式匹配的表
hbase> disable_all 't.*'
hbase> disable_all 'ns:t.*'
hbase> disable_all 'ns:.*'
enable/enable_all:启用指定表
hbase> enable 't1'
hbase> enable 'ns1:t1'
启用所有与给定正则表达式匹配的表
hbase> enable_all 't.*'
hbase> enable_all 'ns:t.*'
hbase> enable_all 'ns:.*'
exists:查看指定表是否存在
hbase> exists 't1'
hbase> exists 'ns1:t1'
append:追加值
在指定的表/行/列坐标处附加一个单元格’值’
hbase> append 't1', 'r1', 'c1', 'value', ATTRIBUTES=>{'mykey'=>'myvalue'}
hbase> append 't1', 'r1', 'c1', 'value', {VISIBILITY=>'PRIVATE|SECRET'}
incr:递增单元格值
在指定的表/行/列坐标上递增单元格’值’
将表’ns1:t1’或’t1’中的列’c1’下的行’r1’中的单元格值增加1(可省略,不写为1)或10
hbase> incr 'ns1:t1', 'r1', 'c1'
hbase> incr 't1', 'r1', 'c1'
hbase> incr 't1', 'r1', 'c1', 1
hbase> incr 't1', 'r1', 'c1', 10
hbase> incr 't1', 'r1', 'c1', 10, {ATTRIBUTES=>{'mykey'=>'myvalue'}}
hbase> incr 't1', 'r1', 'c1', {ATTRIBUTES=>{'mykey'=>'myvalue'}}
hbase> incr 't1', 'r1', 'c1', 10, {VISIBILITY=>'PRIVATE|SECRET'}