1.基礎
Shell操作第一步是啟動Shell,使用以下命令:
hbase shell
離開可以輸入:
exit或者quit
2.命令
在輸入命令的時候必須遵循一定的規則:
- 參考名:命令列要求在使用表名和列名時,必須通過單引號或者雙引號對其參考,
- 參考值:命令列支持二進制、八進制、十六進制的輸入和輸出,用戶在參考時必須使用雙引號,否則會被當做檔案進行處理,
- 使用逗號分隔引數:引數之間需要使用逗號進行分隔,
- 散列屬性:一些命令需要使用鍵值對屬性,要按照以下格式來完成: {‘key1’ => ‘value1’, ‘key2’ => ‘value2’, …} 鍵值對需要包含在大括號中,鍵值對之間使用“=>”分隔,使用鍵值對模式賦值的key通常是NAME、VERSION或COMPRESSION,并且不需要引號,
3.使用create命令創建表
在HBase Shell執行以下命令:
create 'user', 'cf1'
這句話的意思是建立一個叫user的表,里面有一個叫做cf1的列族,
輸出結果:
Created table user
Took 4.6033 seconds
=> Hbase::Table – user
4.使用list命令查看有哪些表
在HBase Shell執行以下命令:
list
輸出結果:
TABLE
user
1 row(s)
Took 0.0890 seconds
=> ["user"]
5.使用describe命令來查看表屬性
在HBase Shell執行以下命令:
describe 'user'
輸出結果:
Table user is ENABLED
user
COLUMN FAMILIES DESCRIPTION
{NAME => 'cf1', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '65536'}
1 row(s)
QUOTAS
0 row(s)
Took 1.4010 second
6.使用put命令來插入資料
在HBase Shell執行以下命令:
put 'user', 'rk0001', 'cf1:name', 'zhangsan'
這條陳述句的意思是:
(1)向user表插入一個單元格
(2)這個單元格的row key為rk0001
(3)這個單元格的列族是cf1
(4)這個單元格的列名是name
(5)這個單元格的資料值是zhangsan
輸出結果:
Took 0.0364 seconds
7.使用scan來查看表資料
scan是最常用的查詢表資料的命令,這個命令相當于傳統資料庫的select,通過以下命令就可以遍歷出user表的資料:
scan 'user'
輸出結果:
ROW COLUMN+CELL
rk0001 column=cf1:age, timestamp=1594263341992, value=24
rk0001 column=cf1:name, timestamp=1594262772226, value=zhangsan
rk0002 column=cf1:gender, timestamp=1594263392732, value=man
rk0002 column=cf1:name, timestamp=1594263341800, value=lisi
rk0003 column=cf1:name, timestamp=1594263341860, value=wangwu
rk0004 column=cf1:name, timestamp=1594263341924, value=zhaoliu
4 row(s)
Took 0.0606 seconds
ROW列顯示的就是row key,COLUMN+CELL列顯示的就是這個記錄的列族(column冒號前的部分)、列(column冒號后的部分)、時間戳(timestamp)和值(value)等資訊
(STARTROW)和結束行(ENDROW)來限制顯示記錄的條數,STARTROW和ENDROW都是可選引數,可以不輸入,如果ENDROW不輸入的話,就從STARTROW開始一直顯示下去直到表的結尾;如果STARTROW不輸入的話,就從表頭開始一直顯示到ENDROW為止,
例:
下面這條命令會顯示所有row key大于且等于rk0002的記錄:
scan 'user', {STARTROW => 'rk0002'}
下面這條命令會顯示所有row key小于rk0004的記錄:
scan 'user', {ENDROW => 'rk0004'}
下命這條命令會顯示所有row key大于且等于rk0002并且小于rk0004的記錄:
scan 'user', {STARTROW => 'rk0002', ENDROW => 'rk0004'}
8.使用get來獲取單元格資料
get最簡單的用法就是查詢某個單元格的記錄:
get 'user', 'rk0001', 'cf1:name'
輸出結果:
COLUMN CELL
cf:name timestamp=1594262772226, value=zhangsan
1 row(s)
Took 1.1362 seconds
當使用scan或者get命令的時候默認會顯示擁有最大timestamp值的資料,
9.使用delete來洗掉單元格資料
有增就有刪,接下來我們看看如何洗掉資料,最簡單的例子如下:
delete 'user', 'rk0002', 'cf1:age'
執行的結果就是user表中rk0002行的cf1:age單元格被洗掉了,
delete命令也可以跟上時間戳(timestamp)引數,就像這樣:
delete 'user', 'rk0002', 'cf1:name', 1594262772226
需要注意的是,HBase洗掉記錄并不是真的立即洗掉了資料,而是放置了一個墓碑標記(tombstone marker),把這個版本資料標記為不可見,被打上tombstone marker的記錄還是可以被查詢到的,只需要使用scan命令時設定RAW引數的值為true即可,例子如下:
scan 'user', {RAW => true, VERSIONS => 5}
在結果我們可以找到這樣一條記錄:
rk0002 column=cf1:age, timestamp=1594263341992, type=Delete
那些type=Delete的列就是被打上墓碑標記的記錄,
10.使用deleteall洗掉整行記錄
deleteall 'user', 'rk0001'
11.使用disable來停用表
在洗掉表之前需要先做一個下線(disable)操作,把表停用,停用user表的命令如下:
disable 'user'
當你停用掉一個表后,你可以用scan測驗一下表是不是真的被關閉了:
scan 'user'
你會發現無法使用scan命令,并且會輸出一個錯誤資訊ERROR: user is disabled,意思是表已經被關閉了,不能scan了,
如果需要啟用user表,使用以下命令:
enable 'user'
12.使用drop來洗掉表
drop 'user'
然后在使用list命令查看下資料還有什么表,發現資料庫中user表已經被洗掉,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/379435.html
標籤:其他
上一篇:【hadoop】mysql安裝
下一篇:實習踩坑之路:ElasticSearch搜索出來了不是自己的資料?Elastic會像MyBatisPlus一樣會幫我們做判斷null的操作么?
