1. 程式人生 > >HBase-操作命令詳解

HBase-操作命令詳解

HBase是一個分散式的、面向列的開源資料庫,該技術來源於 Fay Chang 所撰寫的Google論文“Bigtable:一個結構化資料的分散式儲存系統”。就像Bigtable利用了Google檔案系統(File System)所提供的分散式資料儲存一樣,HBase在Hadoop之上提供了類似於Bigtable的能力。HBase是Apache的Hadoop專案的子專案。HBase不同於一般的關係資料庫,它是一個適合於非結構化資料儲存的資料庫。另一個不同的是HBase基於列的而不是基於行的模式。接下來記錄一下HBase的一些基本的使用:

基本命令

  • 在Hbase安裝目錄下的bin目錄,執行如下命令,進入互動式環境:
./hbase shell
  • 退出互動式環境
quit

通用命令

  • status:HBase的狀態,例如伺服器的數量
hbase(main):001:0> status
1 active master, 1 backup masters, 2 servers, 0 dead, 1.0000 average load
  • version:獲取正在使用的HBase版本
hbase(main):002:0> version
1.2.6, rUnknown, Mon May 29 02:25:32 CDT 2017
  • table_help:表引用命令提供幫助
hbase(main):003
:0> table_help Help for table-reference commands. You can either create a table via 'create' and then manipulate the table via commands like 'put', 'get', etc. See the standard help information for how to use each of these commands. ...
  • whoami:提供有關使用者的資訊
hbase(main):004:0> whoami
root (auth
:SIMPLE) groups: root

資料定義語言

  • create:建立表
# test為表名,cf為列族
create 'test','cf'
  • list:列出HBase的所有表
list
  • disable:禁用表
disable 'test'
  • is_disabled:驗證表是否被禁用
is_disabled 'test'
  • enable: 啟用表
enable 'test'
  • is_enabled:驗證表是否被啟用
is_enabled 'test'
  • describe:提供了一個表的描述
describe 'test'
  • alter:修改表結構
# 新增一個列族df
alter 'test','df'
  • exists:驗證表是否存在
exists 'test'
  • drop:刪除表,需先禁用才能刪除
drop 'test'
  • disable_all:禁用多個表
# 禁用表明以te開頭的所有表
disable_all 'te.*'
  • drop_all:刪除多個表,需先禁用才能刪除
# 刪除表明以te開頭的所有表
drop_all 'te.*'
  • Java Admin API:在此之前所有的上述命令,Java提供了一個通過API程式設計來管理實現DDL功能

資料操縱語言

  • put:插入資料
# 'test'表名,'row1'行,'cf:a'列(由列族加冒號再拼接一個字尾形成),value值
put 'test','row1','cf:a','value'
  • get:獲取資料
# 獲取row1行的所有資料
get 'test','row1'

# 獲取row1行,cf:a列的資料
get 'test','row1','cf:a'
  • delete:刪除表中單元格的資料
# 刪除row1行,cf:a列的資料
delete 'test','row1','cf:a'
  • deleteall:刪除一行的資料
deleteall 'test','row1'
  • scan:掃描並返回表資料
scan 'test'
  • count:計數並返回表中行的數量
count 'test'
  • truncate:禁用、刪除和重新建立一個具有預設選項的表。注意,該表必須先存在才能執行此操作!!!類似於清空表的資料
truncate 'test'
  • Java client API:在此之前所有上述命令,Java提供了一個客戶端API來實現DML功能,CRUD(建立檢索更新刪除)操作更多的是通過程式設計,在org.apache.hadoop.hbase.client包下

HBase操作進階

我們還可以在建立表的同時給這個表分配一個變數,通過這個表裡來間接操作表:

  1. 建立表時,給表賦予一個變數:
t = create 'test','cf'
  1. 也可以給已存在的表賦予一個變數:
t = get_table 'test'
  1. 插入資料:
t.put 'row1','cf:a','value'
  1. 掃描資料:
t.scan
  1. 獲取一個表的描述:
t.describe
  1. 禁用:
t.disable
  1. 刪除:
t.drop

讀寫HBase配置

hbase(main):002:0> @shell.hbase.configuration.get('hbase.rpc.timeout')
=> "60000"

更改遠端連線超時時間:

hbase(main):001:0> @shell.hbase.configuration.setInt('hbase.rpc.timeout',61010)
hbase(main):002:0> @shell.hbase.configuration.get('hbase.rpc.timeout')
=> "61010"

以命令讀取並執行檔案中HBase Shell的命令

我們可以將HBase Shell 命令輸入到文字檔案當中,每一行為一個命令,假設有這樣一個檔案test

create 'user','cf'
put 'user','row1','cf:a','zhangsan'
scan 'user'

此時我們使用命令讀取並執行這個檔案中儲存的命令,首先我們先進入到HBase的存放目錄,進入bin目錄,執行下面命令:

[email protected]:/usr/local/hbase/bin# ./hbase shell ~/test 
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.25.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]
0 row(s) in 3.0610 seconds

0 row(s) in 0.3280 seconds

ROW                                        COLUMN+CELL                                                                                                                 
 row1                                      column=cf:a, timestamp=1512723251727, value=zhangsan                                                                           
1 row(s) in 0.1680 seconds

可以看出,HBase執行了檔案當中的命令