This page describes the JRuby IRB-based HBase Shell. It replaces the SQL-like HQL, the Shell found in HBase versions 0.1.x and previous. Some discussion of new shell requirements can be found in the Shell Replacementdocument.
To run the shell, do
- hadoop$redhat ${HBASE_HOME}/bin/hbase shell
You'll be presented with a prompt like the following:
- HBase Shell; enter 'help<RETURN>' for list of supported commands.
- Version: 0.2.0-dev, r670701, Mon Jun 23 17:26:36 PDT 2008
- hbase(main):001:0>
Type 'help' followed by a return to get a listing of commands
- hbase(main):001:0> help
- HBASE SHELL COMMANDS:
- alter Alter column family schema; pass table name and a dictionary
- specifying new column family schema. Dictionaries are described
- below in the GENERAL NOTES section. Dictionary must include name
- of column family to alter. For example,
- To change or add the 'f1' column family in table 't1' from defaults
- to instead keep a maximum of 5 cell VERSIONS, do:
- hbase> alter 't1', {NAME => 'f1', VERSIONS => 5}
- To delete the 'f1' column family in table 't1', do:
- hbase> alter 't1', {NAME => 'f1', METHOD => 'delete'}
- You can also change table-scope attributes like MAX_FILESIZE
- MEMSTORE_FLUSHSIZE and READONLY.
- For example, to change the max size of a family to 128MB, do:
- hbase> alter 't1', {METHOD => 'table_att', MAX_FILESIZE => '134217728'}
- count Count the number of rows in a table. This operation may take a LONG
- time (Run '$HADOOP_HOME/bin/hadoop jar hbase.jar rowcount' to run a
- counting mapreduce job). Current count is shown every 1000 rows by
- default. Count interval may be optionally specified. Examples:
- hbase> count 't1'
- hbase> count 't1', 100000
- create Create table; pass table name, a dictionary of specifications per
- column family, and optionally a dictionary of table configuration.
- Dictionaries are described below in the GENERAL NOTES section.
- Examples:
- hbase> create 't1', {NAME => 'f1', VERSIONS => 5}
- hbase> create 't1', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}
- hbase> # The above in shorthand would be the following:
- hbase> create 't1', 'f1', 'f2', 'f3'
- hbase> create 't1', {NAME => 'f1', VERSIONS => 1, TTL => 2592000, \
- BLOCKCACHE => true}
- describe Describe the named table: e.g. "hbase> describe 't1'"
- delete Put a delete cell value at specified table/row/column and optionally
- timestamp coordinates. Deletes must match the deleted cell's
- coordinates exactly. When scanning, a delete cell suppresses older
- versions. Takes arguments like the 'put' command described below
- deleteall Delete all cells in a given row; pass a table name, row, and optionally
- a column and timestamp
- disable Disable the named table: e.g. "hbase> disable 't1'"
- drop Drop the named table. Table must first be disabled. If table has
- more than one region, run a major compaction on .META.:
- hbase> major_compact ".META."
- enable Enable the named table
- exists Does the named table exist? e.g. "hbase> exists 't1'"
- exit Type "hbase> exit" to leave the HBase Shell
- get Get row or cell contents; pass table name, row, and optionally
- a dictionary of column(s), timestamp and versions. Examples:
- hbase> get 't1', 'r1'
- 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', TIMESTAMP => ts1, \
- VERSIONS => 4}
- list List all tables in hbase
- put Put a cell 'value' at specified table/row/column and optionally
- timestamp coordinates. To put a cell value into table 't1' at
- row 'r1' under column 'c1' marked with the time 'ts1', do:
- hbase> put 't1', 'r1', 'c1', 'value', ts1
- tools Listing of hbase surgery tools
- scan Scan a table; pass table name and optionally a dictionary of scanner
- specifications. Scanner specifications may include one or more of
- the following: LIMIT, STARTROW, STOPROW, TIMESTAMP, or COLUMNS. If
- no columns are specified, all columns will be scanned. To scan all
- members of a column family, leave the qualifier empty as in
- 'col_family:'. Examples:
- hbase> scan '.META.'
- hbase> scan '.META.', {COLUMNS => 'info:regioninfo'}
- hbase> scan 't1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, \
- STARTROW => 'xyz'}
- For experts, there is an additional option -- CACHE_BLOCKS -- which
- switches block caching for the scanner on (true) or off (false). By
- default it is enabled. Examples:
- hbase> scan 't1', {COLUMNS => ['c1', 'c2'], CACHE_BLOCKS => false}
- status Show cluster status. Can be 'summary', 'simple', or 'detailed'. The
- default is 'summary'. Examples:
- hbase> status
- hbase> status 'simple'
- hbase> status 'summary'
- hbase> status 'detailed'
- shutdown Shut down the cluster.
- truncate Disables, drops and recreates the specified table.
- version Output this HBase version
- GENERAL NOTES:
- Quote all names in the hbase shell such as table and column names. Don't
- forget commas delimit command parameters. Type <RETURN> after entering a
- command to run it. Dictionaries of configuration used in the creation and
- alteration of tables are ruby Hashes. They look like this:
- {'key1' => 'value1', 'key2' => 'value2', ...}
- They are opened and closed with curley-braces. Key/values are delimited by
- the '=>' character combination. Usually keys are predefined constants such as
- NAME, VERSIONS, COMPRESSION, etc. Constants do not need to be quoted. Type
- 'Object.constants' to see a (messy) list of all constants in the environment.
- In case you are using binary keys or values and need to enter them into the
- shell then use double-quotes to make use of hexadecimal or octal notations,
- for example:
- hbase> get 't1', "key\x03\x3f\xcd"
- hbase> get 't1', "key\003\023\011"
- hbase> put 't1', "test\xef\xff", 'f1:', "\x01\x33\x40"
- Using the double-quote notation you can directly use the values output by the
- shell for example during a "scan" call.
- This HBase shell is the JRuby IRB with the above HBase-specific commands added.
- For more on the HBase Shell, see <a href="http://wiki.apache.org/hadoop/Hbase/Shell">http://wiki.apache.org/hadoop/Hbase/Shell</a>
Example case:
1. 创建一张student表, ColumnFamily为name.
- create 'student','name'
2. 描述student表.
- hbase(main):004:0> describe 'student'
- DESCRIPTION ENABLED
- {NAME => 'student', FAMILIES => [{NAME => 'name', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', COMPRESSION => true
- 'NONE', VERSIONS => '3', TTL => '2147483647', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}]
- }
- 1 row(s) in 0.0710 seconds
- hbase(main):005:0>
3. 往表student插入数据
- hbase(main):017:0> put 'student','111','name:firstname','kim'
- 0 row(s) in 0.0380 seconds
4. 查询student, 键为111的value
- hbase(main):023:0> get 'student','111'
- COLUMN CELL
- name:firstname timestamp=1338877705167, value=kim
- 1 row(s) in 0.0190 seconds
- hbase(main):024:0>
5. 全部查询
- hbase(main):010:0> scan 'student'
- ROW COLUMN+CELL
- 111 column=name:firstname, timestamp=1338877705167, value=kim
- 1 row(s) in 0.4250 seconds
- hbase(main):011:0>
6. 查询
- hbase(main):019:0> get 'student','111',{COLUMN=>'name:firstname',VERSIONS=>10}
- COLUMN CELL
- name:firstname timestamp=1338877705167, value=kim
- 1 row(s) in 0.0250 seconds
- hbase(main):020:0>
7. 删除表
- disable 'tablename'
- drop 'tablename'