HBase-操作命令詳解
阿新 • • 發佈:2019-01-02
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操作進階
我們還可以在建立表的同時給這個表分配一個變數,通過這個表裡來間接操作表:
- 建立表時,給表賦予一個變數:
t = create 'test','cf'
- 也可以給已存在的表賦予一個變數:
t = get_table 'test'
- 插入資料:
t.put 'row1','cf:a','value'
- 掃描資料:
t.scan
- 獲取一個表的描述:
t.describe
- 禁用:
t.disable
- 刪除:
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執行了檔案當中的命令