# 簡介 HBase 是一個**面向列式存儲的分散式資料庫**,其設計思想來源於 Google 的 BigTable 論文。 HBase 底層存儲基於 HDFS 實現,集群的管理基於 ZooKeeper 實現。 HBase 良好的分散式架構設計為海量數據的快速存儲、隨機訪問提供了可能,基於數據副本機 ...
簡介
HBase 是一個面向列式存儲的分散式資料庫,其設計思想來源於 Google 的 BigTable 論文。
HBase 底層存儲基於 HDFS 實現,集群的管理基於 ZooKeeper 實現。
HBase 良好的分散式架構設計為海量數據的快速存儲、隨機訪問提供了可能,基於數據副本機制和分區機制可以輕鬆實現線上擴容、縮容和數據容災,是大數據領域中 Key-Value 數據結構存儲最常用的資料庫方案
特點
- 易擴展
Hbase 的擴展性主要體現在兩個方面,一個是基於運算能力(RegionServer) 的擴展,通過增加 RegionSever 節點的數量,提升 Hbase 上層的處理能力;另一個是基於存儲能力的擴展(HDFS),通過增加 DataNode 節點數量對存儲層的進行擴容,提升 HBase 的數據存儲能力。
- 海量存儲
HBase 作為一個開源的分散式 Key-Value 資料庫,其主要作用是面向 PB 級別數據的實時入庫和快速隨機訪問。這主要源於上述易擴展的特點,使得 HBase 通過擴展來存儲海量的數據。
- 列式存儲
Hbase 是根據列族來存儲數據的。列族下麵可以有非常多的列。列式存儲的最大好處就是,其數據在表中是按照某列存儲的,這樣在查詢只需要少數幾個欄位時,能大大減少讀取的數據量。
- 高可靠性
WAL 機制保證了數據寫入時不會因集群異常而導致寫入數據丟失,Replication 機制保證了在集群出現嚴重的問題時,數據不會發生丟失或損壞。而且 Hbase 底層使用 HDFS,HDFS 本身也有備份。
- 稀疏性
在 HBase 的列族中,可以指定任意多的列,為空的列不占用存儲空間,表可以設計得非常稀疏。
- 模塊組成
HBase 可以將數據存儲在本地文件系統,也可以存儲在 HDFS 文件系統。在生產環境中,HBase 一般運行在HDFS 上,以 HDFS 作為基礎的存儲設施。HBase 通過 HBase Client 提供的 Java API 來訪問 HBase 資料庫,以完成數據的寫入和讀取。HBase 集群主由HMaster、Region Server 和 ZooKeeper 組成。
架構
HBase 系統遵循 Master/Salve 架構,由三種不同類型的組件組成:
client
- 提供了訪問hbase的介面
- 提供cache緩存提高訪問hbase的效率 , 比如region的信息
Zookeeper
- 保證任何時候,集群中只有一個 Master;
- 存儲所有 Region 的定址入口;
- 實時監控 Region Server 的狀態,將 Region Server 的上線和下線信息實時通知給 Master;
- 存儲 HBase 的 Schema,包括有哪些 Table,每個 Table 有哪些 Column Family 等信息。
Master
- 為 Region Server 分配 Region;
- 負責 Region Server 的負載均衡 ;
- 發現失效的 Region Server 並重新分配其上的 Region;
- GFS 上的垃圾文件回收;
- 處理 Schema 的更新請求
Region Server
- Region Server 負責維護 Master 分配給它的 Region ,並處理髮送到 Region 上的 IO 請求;
- Region Server 負責切分在運行過程中變得過大的 Region
安裝
因為hbase需要依賴zookeeper和hdfs,所以在安裝hbase集群之前需要確保zookeeper和hdfs的環境正常
- 上傳壓縮包並解壓
- hbase配置
# 1.在conf目錄下找到hbase-env.sh
cd /opt/apps/hbase-2.2.5/conf
vi hbase-env.sh
# 修改的地方:
# 1.1 配置java的環境變數,註意需要將前面的註釋打開
export JAVA_HOME=/opt/apps/jdk1.8
#1.2 hbase中內嵌了一個zookeeper,預設使用的是內置的zoopkeeper,將等號後面的true改成false
export HBASE_MANAGES_ZK=false
# 2.在 conf目錄下找到hbase-site.xml
vi hbase-site.xml
# 在最下麵輸入下麵的配置文件
<configuration>
<!-- 指定hbase在HDFS上存儲的路徑 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://linux01:8020/hbase</value>
</property>
<!-- 指定hbase是分散式的 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 分散式中一定要配置該參數,否則可能會出現無法啟動HMaster的情況 -->
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
<!-- 指定zk的地址,多個用“,”分割 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>linux01:2181,linux02:2181,linux03:2181</value>
</property>
</configuration>
# 3.regionservers 配置 啟動集群中的Regionserver機器
vi regionservers
# 輸入自己的三台機器功能變數名稱
linux01
linux02
linux03
- 集群分發
for i in 2 3
do
scp -r hbase-2.2.5/ linux0$i:$PWD
done
- 啟動
單節點啟動:
bin/hbase-daemon.sh start master
bin/hbase-daemon.sh start regionserver
# 提示:如果regionserver無法啟動,請先檢查下集群之間的節點時間是否同步
一鍵啟動:
bin/start-hbase.sh
- 驗證啟動是否成功
# 1.jps查看
[root@linux01 conf]# jps
4305 Jps
2386 QuorumPeerMain
2051 DataNode
3747 HMaster # 查看HMaster有無進程
1898 NameNode
3934 HRegionServer # 查看HRegionServer有無進程
# 2.通過"linux01:16010"的方式來訪問HBase管理頁面,進得去代表啟動成功
數據模型
namespace:hbase中沒有資料庫的概念 , 是使用namespace來達到資料庫分類別管理表的作用
table:表,一個表包含多行數據
Row Key (行鍵):一行數據包含一個唯一標識rowkey、多個column以及對應的值。在HBase中,一張表中所有row都按照rowkey的字典序由小到大排序。
Column Family(列族):在建表的時候指定,不能夠隨意的刪減,一個列族下麵可以有多個列(類似於給列進行分組,相同屬性的列是一個組,給這個組取個名字叫列族)
Column Qualifier (列):列族下麵的列,一個列必然是屬於某一個列族的行
Cell:單元格,由(rowkey、column family、qualifier、type、timestamp,value)組成的結構,其中type表示Put/Delete操作類型,timestamp代表這個cell的版本。KV結構存儲,其中rowkey、column family、qualifier、type以及timestamp是K,value欄位對應KV結構的V。
Timestamp(時間戳):時間戳,每個cell在寫入HBase的時候都會預設分配一個時間戳作為該cell的版本,用戶也可以在寫入的時候自帶時間戳。HBase支持多版本特性,即同一rowkey、column下可以有多個value存在,這些value使用timestamp作為版本號,版本越大,表示數據越新。
shell客戶端
# 如果配置了環境變數:在任意地方敲 hbase shell
# 如果沒有配置環境變數,需要在bin目錄下./hbase shell
hbase shell
# 出現如下 代表成功進入了hbase的shell客戶端
hbase(main):001:0>
通用命令
status: 查看HBase的狀態,例如,伺服器的數量。
hbase(main):001:0> status
1 active master, 0 backup masters, 3 servers, 0 dead, 0.6667 average load
Took 0.3609 seconds
version: 提供正在使用HBase版本。
hbase(main):002:0> version
2.2.5, rf76a601273e834267b55c0cda12474590283fd4c, 2020年 05月 21日 星期四 18:34:40 CST
Took 0.0004 seconds
table_help: 表引用命令提供幫助。
關於表的一些命令參考
如:
To read the data out, you can scan the table:
hbase> t.scan
which will read all the rows in table 't'.
whoami: 提供有關用戶的信息。
hbase(main):004:0> whoami
root (auth:SIMPLE)
groups: root
Took 0.0098 seconds
命名空間相關命令
list_namespace:列出所有的命名空間
hbase(main):005:0> list_namespace
NAMESPACE
default
hbase
2 row(s)
Took 0.0403 seconds
create_namespace:創建一個命名空間
hbase(main):002:0> create_namespace doit
NameError: undefined local variable or method 'doit' for main:Object
# 名稱需要加上引號
hbase(main):003:0> create_namespace 'doit'
Took 0.2648 seconds
describe_namespace:描述一個命名空間
hbase(main):004:0> describe_namespace 'doit'
DESCRIPTION
{NAME => 'doit'}
Quota is disabled
Took 0.0710 seconds
drop_namespace:刪除一個命名空間
# 註意 :只能刪除空的命名空間,如果裡面有表是刪除不了的
hbase(main):005:0> drop_namespace 'doit'
Took 0.2461 seconds
# 命名空間不為空的話
hbase(main):035:0> drop_namespace 'doit'
ERROR: org.apache.hadoop.hbase.constraint.ConstraintException: Only empty namespaces can be removed. Namespace doit has 1 tables
at org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure.prepareDelete(DeleteNamespaceProcedure.java:217)
at org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure.executeFromState(DeleteNamespaceProcedure.java:78)
at org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure.executeFromState(DeleteNamespaceProcedure.java:45)
at org.apache.hadoop.hbase.procedure2.StateMachineProcedure.execute(StateMachineProcedure.java:194)
at org.apache.hadoop.hbase.procedure2.Procedure.doExecute(Procedure.java:962)
at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.execProcedure(ProcedureExecutor.java:1662)
at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.executeProcedure(ProcedureExecutor.java:1409)
at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.access$1100(ProcedureExecutor.java:78)
at org.apache.hadoop.hbase.procedure2.ProcedureExecutor$WorkerThread.run(ProcedureExecutor.java:1979)
For usage try 'help "drop_namespace"'
Took 0.1448 seconds
alter_namespace:修改namespace其中屬性
hbase(main):038:0> alter_namespace 'doit',{METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'}
Took 0.2491 seconds
list_namespace_tables:列出一個命名空間下所有的表
hbase(main):037:0> list_namespace_tables 'doit'
TABLE
user
1 row(s)
Took 0.0372 seconds
=> ["user"]
DDL相關命令
list:列舉出預設名稱空間下所有的表
hbase(main):001:0> list
TABLE
doit:user
1 row(s)
Took 0.3187 seconds
=> ["doit:user"]
create:建表
create ‘xx:t1’,{NAME=>‘f1’,VERSION=>5}
# 創建表t1並指明命名空間xx
# {NAME} f1指的是列族
# VERSION 表示版本數
# 多個列族f1、f2、f3
create ‘t2’,{NAME=>‘f1’},{NAME=>‘f2’},{NAME=>‘f3’}
hbase(main):003:0> create 'doit:student' 'f1','f2','f3'
Created table doit:studentf1
Took 1.2999 seconds
=> Hbase::Table - doit:studentf1
# 創建表得時候預分region
hbase(main):106:0> create 'doit:test','f1', SPLITS => ['rowkey_010','rowkey_020','rowkey_030','rowkey_040']
Created table doit:test
Took 1.3133 seconds
=> Hbase::Table - doit:test
drop:刪除表
hbase(main):006:0> drop 'doit:studentf1'
ERROR: Table doit:studentf1 is enabled. Disable it first.
For usage try 'help "drop"'
Took 0.0242 seconds
# 註意:刪除表之前需要禁用表
hbase(main):007:0> disable 'doit:studentf1'
Took 0.7809 seconds
hbase(main):008:0> drop 'doit:studentf1'
Took 0.2365 seconds
drop_all:丟棄在命令中給出匹配“regex”的表
hbase(main):023:0> disable_all 'doit:student.*'
doit:student1
doit:student2
doit:student3
doit:studentf1
Disable the above 4 tables (y/n)?
y
4 tables successfully disabled
Took 4.3497 seconds
hbase(main):024:0> drop_all 'doit:student.*'
doit:student1
doit:student2
doit:student3
doit:studentf1
Drop the above 4 tables (y/n)?
y
4 tables successfully dropped
Took 2.4258 seconds
disable:禁用表
# 刪除表之前必須先禁用表
hbase(main):007:0> disable 'doit:studentf1'
Took 0.7809 seconds
disable_all:禁用在命令中給出匹配“regex”的表
hbase(main):023:0> disable_all 'doit:student.*'
doit:student1
doit:student2
doit:student3
doit:studentf1
Disable the above 4 tables (y/n)?
y
4 tables successfully disabled
Took 4.3497 seconds
enable:啟用表
hbase(main):007:0> enable 'doit:student'
Took 0.7809 seconds
enable_all:啟用在命令中給出匹配“regex”的表
hbase(main):032:0> enable_all 'doit:student.*'
doit:student
doit:student1
doit:student2
doit:student3
doit:student4
Enable the above 5 tables (y/n)?
y
5 tables successfully enabled
Took 5.0114 seconds
is_enabled:判斷該表是否是啟用的表
hbase(main):034:0> is_enabled 'doit:student'
true
Took 0.0065 seconds
=> true
is_disabled:判斷該表是否是禁用的表
hbase(main):035:0> is_disabled 'doit:student'
false
Took 0.0046 seconds
=> 1
describe:描述這張表
hbase(main):038:0> describe 'doit:student'
Table doit:student is ENABLED
doit:student
COLUMN FAMILIES DESCRIPTION
{NAME => 'f1', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLO
CK_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'}
{NAME => 'f2', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLO
CK_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'}
{NAME => 'f3', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLO
CK_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'}
3 row(s)
QUOTAS
0 row(s)
Took 0.0349 seconds
# 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' -- 塊大小
alter:修改表裡面的屬性
hbase(main):040:0> alter 'doit:student', NAME => 'cf1', VERSIONS => 5, TTL => 10
Updating all regions with the new schema...
1/1 regions updated.
Done.
Took 2.1406 seconds
alter_async:直接操作不等待,和上面的alter功能一樣
hbase(main):059:0> alter_async 'doit:student', NAME => 'cf1', VERSIONS => 5, TTL => 10
Took 1.0268 seconds
alter_status:獲取alter命令的執行狀態
hbase(main):060:0> alter_status 'doit:student'
1/1 regions updated.
Done.
Took 1.0078 seconds
list_regions:列出一個表中所有的region
Examples:
hbase> list_regions 'table_name'
hbase> list_regions 'table_name', 'server_name'
hbase> list_regions 'table_name', {SERVER_NAME => 'server_name', LOCALITY_THRESHOLD => 0.8}
hbase> list_regions 'table_name', {SERVER_NAME => 'server_name', LOCALITY_THRESHOLD => 0.8}, ['SERVER_NAME']
hbase> list_regions 'table_name', {}, ['SERVER_NAME', 'start_key']
hbase> list_regions 'table_name', '', ['SERVER_NAME', 'start_key']
hbase(main):045:0> list_regions 'doit:student'
SERVER_NAME | REGION_NAME | START_KEY | END_KEY | SIZE | REQ | LOCALITY |
--------------------------- | ------------------------------------------------------------- | ---------- | ---------- | ----- | ----- | ---------- |
linux02,16020,1683636566738 | doit:student,,1683642944714.39f7c8772bc476c4d38c663e879d50da. | | | 0 | 0 | 0.0 |
1 rows
Took 0.0145 seconds
locate_region:通過表名和row名方式獲取region
hbase(main):062:0> locate_region 'doit:student', 'key0'
HOST REGION
linux02:16020 {ENCODED => 39f7c8772bc476c4d38c663e879d50da, NAME => 'doit:student,,1683642944714.39f7c8772bc476c4d38c663e879d50da.', STARTKEY => '', ENDK
EY => ''}
1 row(s)
Took 0.0027 seconds
show_filters:顯示hbase的所有的過濾器
hbase(main):058:0> show_filters
DependentColumnFilter
KeyOnlyFilter
ColumnCountGetFilter
SingleColumnValueFilter
PrefixFilter
SingleColumnValueExcludeFilter
FirstKeyOnlyFilter
ColumnRangeFilter
ColumnValueFilter
TimestampsFilter
FamilyFilter
QualifierFilter
ColumnPrefixFilter
RowFilter
MultipleColumnPrefixFilter
InclusiveStopFilter
PageFilter
ValueFilter
ColumnPaginationFilter
Took 0.0035 seconds
DML相關命令
put插入/更新數據【某一行的某一列】(如果不存在,就插入,如果存在就更新)
hbase(main):007:0> put 'doit:user_info' ,'rowkey_001','f1:name','zss'
Took 0.0096 seconds
hbase(main):008:0> put 'doit:user_info' ,'rowkey_001','f1:age','1'
Took 0.0039 seconds
hbase(main):009:0> put 'doit:user_info' ,'rowkey_001','f1:gender','male'
Took 0.0039 seconds
hbase(main):010:0> put 'doit:user_info' ,'rowkey_001','f2:phone_num','98889'
Took 0.0040 seconds
hbase(main):011:0> put 'doit:user_info' ,'rowkey_001','f2:gender','98889'
# 註意:put中需要指定哪個命名空間的那個表,然後rowkey是什麼,哪個列族下麵的哪個列名,然後值是什麼
# 一個個的插入,不能一下子插入多個列名的值
get:獲取一個列族中列這個cell
hbase(main):015:0> get 'doit:user_info' ,'rowkey_001','f2:gender'
COLUMN CELL
f2:gender timestamp=1683646645379, value=123
1 row(s)
Took 0.0242 seconds
hbase(main):016:0> get 'doit:user_info' ,'rowkey_001'
COLUMN CELL
f1:age timestamp=1683646450598, value=1
f1:gender timestamp=1683646458847, value=male
f1:name timestamp=1683646443469, value=zss
f2:gender timestamp=1683646645379, value=123
f2:phone_num timestamp=1683646472508, value=98889
1 row(s)
Took 0.0129 seconds
# 如果遇到中文亂碼的問題怎麼辦呢?在最後加上{'FORMATTER'=>'toString'}參數即可
hbase(main):137:0> get 'doit:student','rowkey_001',{'FORMATTER'=>'toString'}
COLUMN CELL
f1:name timestamp=1683864047691, value=張三
1 row(s)
Took 0.0057 seconds
# 註意:get是hbase中查詢數據最快的方式,但是只能每次返回一個rowkey的數據
scan:掃描表中的所有數據
hbase(main):012:0> scan 'doit:user_info'
ROW COLUMN+CELL
rowkey_001 column=f1:age, timestamp=1683646450598, value=1
rowkey_001 column=f1:gender, timestamp=1683646458847, value=male
rowkey_001 column=f1:name, timestamp=1683646443469, value=zss
rowkey_001 column=f2:gender, timestamp=1683646483495, value=98889
rowkey_001 column=f2:phone_num, timestamp=1683646472508, value=98889
1 row(s)
Took 0.1944 seconds
scan 'tbname',{Filter(過濾器)}
scan 'itcast:t2'
#rowkey首碼過濾器
scan 'itcast:t2', {ROWPREFIXFILTER => '2021'}
scan 'itcast:t2', {ROWPREFIXFILTER => '202101'}
#rowkey範圍過濾器
#STARTROW:從某個rowkey開始,包含,閉區間
#STOPROW:到某個rowkey結束,不包含,開區間
scan 'itcast:t2',{STARTROW=>'20210101_000'}
scan 'itcast:t2',{STARTROW=>'20210201_001'}
scan 'itcast:t2',{STARTROW=>'20210101_000',STOPROW=>'20210201_001'}
scan 'itcast:t2',{STARTROW=>'20210201_001',STOPROW=>'20210301_007'}
# 在Hbase數據檢索,==儘量走索引查詢:按照Rowkey條件查詢==
# 儘量避免走全表掃描
# 索引查詢:有一本新華字典,這本字典可以根據拼音檢索,找一個字,先找目錄,找字
# 全表掃描:有一本新華字典,這本字典沒有檢索目錄,找一個字,一頁一頁找
# ==Hbase所有Rowkey的查詢都是首碼匹配==
# 如果遇到中文亂碼的問題在最後加上{'FORMATTER'=>'toString'}參數即可
hbase(main):130:0> scan 'doit:student',{'FORMATTER'=>'toString'}
ROW COLUMN+CELL
rowkey_001 column=f1:name, timestamp=1683863389259, value=張三
1 row(s)
Took 0.0063 seconds
incr:一般用於自動計數的,不用記住上一次的值,直接做自增
# 註意:因為shell往米面設置的value的值是String類型的
hbase(main):005:0> incr 'doit:student','rowkey002', 'f1:age'
COUNTER VALUE = 1
Took 0.1877 seconds
hbase(main):006:0> incr 'doit:student','rowkey002', 'f1:age'
COUNTER VALUE = 2
Took 0.0127 seconds
hbase(main):007:0> incr 'doit:student','rowkey002', 'f1:age'
COUNTER VALUE = 3
Took 0.0079 seconds
hbase(main):011:0> incr 'doit:student','rowkey002', 'f1:age'
COUNTER VALUE = 4
Took 0.0087 seconds
count:統計一個表裡面有多少行數據
hbase(main):031:0> count 'doit:user_info'
1 row(s)
Took 0.0514 seconds
=> 1
delete刪除某一行中列對應的值
# 刪除某一行中列對應的值
hbase(main):041:0> delete 'doit:student' ,'rowkey_001','f1:id'
Took 0.0152 seconds
deleteall:刪除一行數據
# 根據rowkey刪除一行數據
hbase(main):042:0> deleteall 'doit:student','rowkey_001'
Took 0.0065 seconds
append:追加,假如該列不存在添加新列,存在將值追加到最後
# 再原有值得基礎上追加值
hbase(main):098:0> append 'doit:student','rowkey_001','f1:name','hheda'
CURRENT VALUE = zsshheda
Took 0.0070 seconds
hbase(main):100:0> get 'doit:student','rowkey_001','f1:name'
COLUMN CELL
f1:name timestamp=1683861530789, value=zsshheda
1 row(s)
Took 0.0057 seconds
#註意:如果原來沒有這個列,會自動添加一個列,然後將值set進去
hbase(main):101:0> append 'doit:student','rowkey_001','f1:name1','hheda'
CURRENT VALUE = hheda
Took 0.0063 seconds
hbase(main):102:0> get 'doit:student','rowkey_001','f1:name1'
COLUMN CELL
f1:name1 timestamp=1683861631392, value=hheda
1 row(s)
Took 0.0063 seconds
truncate:清空表裡面所有的數據
# 執行流程
# 先disable表
# 然後再drop表
# 最後重新create表
hbase(main):044:0> truncate 'doit:student'
Truncating 'doit:student' table (it may take a while):
Disabling table...
Truncating table...
Took 2.5457 seconds
truncate_preserve:清空表但保留分區
hbase(main):008:0> truncate_preserve 'doit:test'
Truncating 'doit:test' table (it may take a while):
Disabling table...
Truncating table...
Took 4.1352 seconds
hbase(main):009:0> list_regions 'doit:test'
SERVER_NAME | REGION_NAME | START_KEY | END_KEY | SIZE | REQ | LOCALITY |
--------------------------- | -------------------------------------------------------------------- | ---------- | ---------- | ----- | ----- | ---------- |
linux03,16020,1684200651855 | doit:test,,1684205468848.920ae3e043ad95890c4f5693cb663bc5. | | rowkey_010 | 0 | 0 | 0.0 |
linux01,16020,1684205091382 | doit:test,rowkey_010,1684205468848.f8a21615be51f42c562a2338b1efa409. | rowkey_010 | rowkey_020 | 0 | 0 | 0.0 |
linux02,16020,1684200651886 | doit:test,rowkey_020,1684205468848.25d62e8cc2fdaecec87234b8d28f0827. | rowkey_020 | rowkey_030 | 0 | 0 | 0.0 |
linux03,16020,1684200651855 | doit:test,rowkey_030,1684205468848.2b0468e6643b95159fa6e210fa093e66. | rowkey_030 | rowkey_040 | 0 | 0 | 0.0 |
linux01,16020,1684205091382 | doit:test,rowkey_040,1684205468848.fb12c09c7c73cfeff0bf79b5dda076cb. | rowkey_040 | | 0 | 0 | 0.0 |
5 rows
Took 0.1019 seconds
get_counter:獲取計數器
hbase(main):017:0> incr 'doit:student','rowkey_001','f1:name2'
COUNTER VALUE = 1
Took 0.0345 seconds
hbase(main):018:0> incr 'doit:student','rowkey_001','f1:name2'
COUNTER VALUE = 2
Took 0.0066 seconds
hbase(main):019:0> incr 'doit:student','rowkey_001','f1:name2'
COUNTER VALUE = 3
Took 0.0059 seconds
hbase(main):020:0> incr 'doit:student','rowkey_001','f1:name2'
COUNTER VALUE = 4
Took 0.0061 seconds
hbase(main):021:0> incr 'doit:student','rowkey_001','f1:name2'
COUNTER VALUE = 5
Took 0.0064 seconds
hbase(main):022:0> incr 'doit:student','rowkey_001','f1:name2'
COUNTER VALUE = 6
Took 0.0062 seconds
hbase(main):023:0> incr 'doit:student','rowkey_001','f1:name2'
COUNTER VALUE = 7
Took 0.0066 seconds
hbase(main):024:0> incr 'doit:student','rowkey_001','f1:name2'
COUNTER VALUE = 8
Took 0.0059 seconds
hbase(main):025:0> incr 'doit:student','rowkey_001','f1:name2'
COUNTER VALUE = 9
Took 0.0063 seconds
hbase(main):026:0> incr 'doit:student','rowkey_001','f1:name2'
COUNTER VALUE = 10
Took 0.0061 seconds
hbase(main):027:0> get_counter 'doit:student','rowkey_001','f1:name2'
COUNTER VALUE = 10
Took 0.0040 seconds
get_splits:用於獲取表所對應的region數個數
hbase(main):148:0> get_splits 'doit:test'
Total number of splits = 5
rowkey_010
rowkey_020
rowkey_030
rowkey_040
Took 0.0120 seconds
=> ["rowkey_010", "rowkey_020", "rowkey_030", "rowkey_040"]