1.2 Hbase命令行客户端

2016-03-14 22:20:10 6,983 0

通过输入hbase shell既可以登录Hbase命令行客户端

[hadoop@iZ28csbxcf3Z conf]$ hbase shell
2016-03-14 21:30:35,007 INFO  [main] Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/hbase/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
2016-03-14 21:30:39,030 WARN  [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.0.0-cdh5.4.7, rUnknown, Thu Sep 17 02:19:27 PDT 2015

hbase(main):001:0>


查看hbase 命令行客户端支持的操作,输入"help"

hbase(main):001:0> help
HBase Shell, version 1.0.0-cdh5.4.7, rUnknown, Thu Sep 17 02:19:27 PDT 2015
Type 'help "COMMAND"', (e.g. 'help "get"' -- the quotes are necessary) for help on a specific command.
Commands are grouped. Type 'help "COMMAND_GROUP"', (e.g. 'help "general"') for help on a command group.

COMMAND GROUPS:
  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, 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, incr, put, scan, truncate, truncate_preserve

  Group name: tools
  Commands: assign, balance_switch, balancer, catalogjanitor_enabled, catalogjanitor_run, catalogjanitor_switch, close_region, compact, compact_mob, compact_rs, flush, major_compact, major_compact_mob, merge_region, move, split, trace, unassign, wal_roll, zk_dump

  Group name: replication
  Commands: add_peer, append_peer_tableCFs, disable_peer, enable_peer, list_peers, list_replicated_tables, remove_peer, remove_peer_tableCFs, set_peer_tableCFs, show_peer_tableCFs

  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, revoke, user_permission

  Group name: visibility labels
  Commands: add_labels, clear_auths, get_auths, list_labels, set_auths, set_visibility

Hbase将命令行操作按组进行了划分。以下着重讲解ddl和DML

一、DDL

Group name: namespace

namespace的概念相当于传统关系型数据库软件中库的概念。

查看hbase中namespace

hbase(main):002:0> list_namespace
NAMESPACE                                                                                                                 
default                                                                                               
hbase                                                                  
2 row(s) in 0.6770 seconds

hbase自带了2个命名空间hbasedefault。hbase命名空间类似于Mysql中的information_schema库,下面存储的是hbase自身运行需要的相关元数据。

default命名空间,主要用户,当我们创建一个表时,如果没有指定namespace,那么默认就属于default命名空间。

查看namespace下面的表

hbase(main):004:0> list_namespace_tables 'hbase' #参数一定要包含在引号中
TABLE                                                      
meta                                                              
namespace                                                        
2 row(s) in 0.0510 seconds

hbase命名空间下默认有2张表,meta表和namespace表。meta中记录了region的元数据,namespace中记录了命名空间的元数据。

创建命名空间

hbase(main):001:0> create_namespace 'hbase_study'
0 row(s) in 0.5720 seconds
hbase(main):002:0> list_namespace
NAMESPACE                                                                  
default                                                                 
hbase                                                             
hbase_study                                                           
3 row(s) in 0.0320 seconds
hbase(main):003:0>

创建表

hbase中,创建表时,必须要指定表名(table name)、列簇(column family,至少一个)和可选的配置信息(table configuration)。

语法:

create ‘<table name>’,’<column family>’

下面给出的是一个表名为emp的样本模式。它有两个列族:“personal data”和“professional data”。

Row keypersonal dataprofessional data






在HBase shell创建该表如下所示。

hbase(main):001:0> create 'hbase_study:emp', 'personal data', 'professional data'#列簇名中间可以有空格
0 row(s) in 1.4410 seconds

=> Hbase::Table - emp

二 DML

插入数据

语法:

put ’<table name>’,’rowkey’,’<colfamily:colname>’,’<value>’

插入数据

put 'hbase_study:emp','1','personal data:name','raju'
put 'hbase_study:emp','1','personal data:city','hyderabad'
put 'hbase_study:emp','1','professional data:designation','manager'
put 'hbase_study:emp','1','professional data:salary','50000'

查看所有数据

hbase(main):013:0> scan 'hbase_study:emp'
ROW               COLUMN+CELL                                                                 
 1               column=personal data:city, timestamp=1457963973149, value=hyderabad         
 1               column=personal data:name, timestamp=1457963932064, value=raju           
 1               column=professional data:designation, timestamp=1457964044186,value=manager     
 1               column=professional data:salary, timestamp=1457964045645,value=50000                                                                        
1 row(s) in 0.0610 seconds

查看某一行的数据

语法

get ’<table name>’,’rowkey’

查询

hbase(main):014:0> get 'hbase_study:emp','1'
COLUMN                                           CELL                                                                                                                                          
 personal data:city                              timestamp=1457963973149, value=hyderabad                                                                                                      
 personal data:name                              timestamp=1457963932064, value=raju                                                                                                           
 professional data:designation                   timestamp=1457964044186, value=manager                                                                                                        
 professional data:salary                        timestamp=1457964045645, value=50000

读取指定列

语法

get 'table name', ‘rowid’, {COLUMN => ‘column family:column name ’}

查询

hbase(main):015:0> get 'hbase_study:emp','1',{COLUMN=>'personal data:city'}
COLUMN                                           CELL                                                                                                                                          
 personal data:city                              timestamp=1457963973149, value=hyderabad                                                                                                      
1 row(s) in 0.0420 seconds

删除数据

使用“deleteall”命令,可以删除一行中所有单元格。下面给出是 deleteall 命令的语法。

deleteall ‘<table name>’, ‘<row>’

删除

hbase(main):016:0> deleteall 'hbase_study:emp','1'
0 row(s) in 0.0700 seconds

使用 delete 命令,可以在一个表中删除特定单元格。 delete 命令的语法如下:

delete ‘<table name>’, ‘<row>’, ‘<column name >’, ‘<time stamp>’