Hbase 常用Shell命令
一:Hbase常用Shell命令表
help | 查看命令的使用描述 | help \’命令名\’ |
whoami | 身份(root、user) | whoami |
version | 返回hbase版本信息 | version |
status | 返回hbase集群的状态信息 | status |
table_help | 查看如何操作表 | table_help |
create | 创建表 | create \’表名\’, \’列族名1\’, \’列族名2\’, \’列族名N\’ |
alter | 修改列族 | 添加列族:alter \’表名\’, NAME=>\’列族名\’ 删除列族:alter \’表名\’, {NAME=> \’列族名\’, METHOD=> \’delete\’} |
describe | 显示表相关的详细信息 | describe \’表名\’ |
list | 列出hbase中存在的所有表 | list |
exists | 测试表是否存在 | exists \’表名\’ |
put | 添加或修改的表的值 | put \’表名\’, \’行键\’, \’列族名\’, \’列值\’ put \’表名\’, \’行键\’, \’列族名:列名\’, \’列值\’ |
scan | 通过对表的扫描来获取对用的值 | scan \’表名\’ 扫描某个列族:scan \’表名\’,{COLUMN=>\’列族名\’,FORMATTER =>\’toString\’} 扫描某个列族的某个列:scan \’表名\’, {COLUMN=>\’列族名:列名\’} 查询同一个列族的多个列: scan \’表名\’, {COLUMNS => [ \’列族名1:列名1\’, \’列族名1:列名2\’ …]} |
get | 获取行或单元(cell)的值 | get \’表名\’, \’行键\’ get \’表名\’, \’行键\’, \’列族名\’ |
count | 统计表中行的数量 | count \’表名\’ |
incr | 增加指定表行或列的值 | incr \’表名\’, \’行键\’, \’列族:列名\’, 步长值 |
get_counter | 获取计数器 | get_counter \’表名\’, \’行键\’, \’列族:列名\’ |
delete | 删除指定对象的值(可以为表,行,列对应的值,另外也可以指定时间戳的值) | 删除列族的某个列: delete 表名\’, \’行键\’, \’列族名:列名\’ |
deleteall | 删除指定行的所有元素值 | deleteall \’表名\’, \’行键\’ |
truncate | 重新创建指定表(清空表) | truncate \’表名\’ |
enable | 使表有效 | enable \’表名\’ |
is_enabled | 是否启用 | is_enabled \’表名\’ |
disable | 使表无效(删除表之前先禁用) | disable \’表名\’ |
is_disabled | 是否无效 | is_disabled \’表名\’ |
drop | 删除表 | drop的表必须是disable的 disable \’表名\’ drop \’表名\’ |
shutdown | 关闭hbase集群(与exit不同) | |
tools | 列出hbase所支持的工具 | |
exit | 退出hbase shell |
二:Hbase操作
DDL操作
(1) 查看数据库中有哪些表
hbase(main):005:0> list TABLE person
(2) 查看表属性信息
hbase(main):007:0> describe \'person\' # 或者 hbase(main):007:0> desc \'person\' Table person is ENABLED person COLUMN FAMILIES DESCRIPTION { NAME => \'age\', BLOOMFILTER => \'ROW\', VERSIONS => \'1\', IN_MEMORY => \'false\', KEEP_DELETED_CELLS => \'FALSE\', DATA_BLOCK_ENCODING => \'NONE\', TTL => \'FOREVER\', COMPRESSION => \'NONE\', MIN_VERSIONS => \'0\', BLOCKCACHE => \'true\', BLOCKSIZE => \'65536\', REPLICATION_SCOPE => \'0\' } # 其中的属性的意义: NAME:列族名 VERSIONS:最大版本号 MIN_VERSIONS:最小版本号 TTL(Time To Live):存活时间 IN_MEMORY:是否开启缓存,默认false,应该开启,否则与BLOCKCACHE冲突 BLOCKCACHE:读缓存是否开启,默认开启,64M
(3) 建表
# create \'表名\', \'列族1\', \'列族2\'... hbase(main):002:0> create \'person\', \'name\', \'age\' # 等价于 hbase(main):002:0> create \'person\',{NAME=>\'name\' },{NAME=>\'age\'} # 建表时可以指定表属性信息 hbase(main):005:0> create \'user_info\',{NAME=>\'base_info\',VERSIONS=>3 },{NAME=>\'extra_info\',IN_MEMORY=>\'true\'}
(4) alter 修改表
--(1) 增加列族 alter \'table_name\', \'add_family\' # 或者 alter \'table_name\', {NAME => \'add_family\'} # 当然,新增加的列可以设置属性,比如 alter \'table_name\', {NAME => \'add_family\', VERSIONS => 3} --(2) 删除列族 alter \'table_name\', {NAME => \'delete_family\', METHOD => \'delete\'} 或者 alter \'table_name\', \'delete\' => \'delete_family\' --(3) 添加列族f1同时删除列族f2 alter \'user\', {NAME => \'f1\'}, {NAME => \'f2\', METHOD => \'delete\'} --(4) 修改列族 # 将user表的f1列族版本号改为5 alter \'user\', NAME => \'f1\', VERSIONS => 5
(5) 判断表是否存在
exists \'table_name\'
(6) 禁用表与启用表
--(1) 禁用表 disable \'table_name\' --(2) 查看表是否禁用 is_disabled \'table_name\' --(3) 启用表 enable \'table_name\' --(4) 查看表是否启用 is enabled \'table_name\'
(7) 删除表
# hbase的某些版本,在删除表前,需要先禁用表 disable \'table_name\' drop \'table_name\'
DML 操作
(1) 插入数据
--(1) # put \'表名\',\'rowkey\',\'列族名:列名\',\'值\' put \'person\',\'0001\',\'name:firstname\', \'Jed\' --(2) 可以指定时间戳,否则默认为系统当前时间 put \'person\',\'0002\',\'info:age\',20,1482077777778
(2) 查询某行
--(1) get \'person\', \'0001\' --(2) 查询某行,指定列名 get \'person\', \'0001\', \'name:firstname\' --(3) 查询某行,添加其他限制条件 # 查询person表中,rowkey为\'0001\'的这一行,只显示name:firstname这一列,并且只显示最新的3个版本 get \'person\', \'0001\', {COLUMNS => \'name:firstname\', VERSIONS => 3} # 查看指定列的内容,并限定显示最新的3个版本和时间范围 get \'person\', \'0001\', {COLUMN => \'name:first\', VERSIONS => 3, TIMERANGE => [1392368783980, 1392380169184]} # 查询person表中,rowkey为\'rk0001\',且某列的内容为\'中国\'的记录 scan\'person\', \'rk0001\', {FILTER => "ValueFilter(=, \'binary:中国\')"}
(3) 全表扫描
--(1) 扫描全表 scan \'person\' --(2) 扫描时指定列族 scan \'person\', {COLUMNS => \'name\'} --(3) 扫描时指定列族,并限定显示最新的5个版本的内容 scan \'person\', {COLUMNS => \'name\', VERSIONS => 5} --(4) 设置开启Raw模式,开启Raw模式会把那些已添加删除标记但是未实际删除的数据也显示出来 scan \'person\', {COLUMNS => \'name\', RAW => true} --(5) 列的过滤 # 查询user表中列族为info和data的信息 scan \'user\', {COLUMNS => [\'info\', \'data\']} # 查询user表中列族为info,列名为name、列族为data,列名为pic的信息 scan \'user\', {COLUMNS => [\'info:name\', \'data:pic\']} # 查询user表中列族为info,列名为name的信息,并且版本最新的5个 scan \'user\', {COLUMNS => \'info:name\', VERSIONS => 5} # 查询user表中列族为info和data且列名含有a字符的信息 scan \'user\', {COLUMNS => [\'info\', \'data\'], FILTER => "(QualifierFilter(=,\'substring:a\'))"} # 查询user表中列族为info,rk范围是[rk0001, rk0003)的数据 scan \'people\', {COLUMNS => \'info\', STARTROW => \'rk0001\', ENDROW => \'rk0003\'} # 查询user表中row key以rk字符开头的 scan \'user\',{FILTER=>"PrefixFilter(\'rk\')"} # 查询user表中指定时间范围的数据 scan \'user\', {TIMERANGE => [1392368783980, 1392380169184]} scan的用法很多,参数,过滤条件可以很多,各种组合, 在此不列举过多的例子,参考 help \'scan\'
(4) 删除数据
delete \'table_name\', \'rowkey\', \'family:column\'
(5) 清空表
truncate \'table_name\'