客戶端API可以管理HBase的集群、 表、 列族等元數(shù)據(jù)。大多數(shù)管理功能通過Admin來實現(xiàn),標簽除外。
1.列族管理 HColumnDescriptor
列族常見的屬性管理:
- 數(shù)據(jù)生存時間:通過設(shè)置數(shù)據(jù)生存時間(TimeToLive, 縮寫為TTL) , HBase可以自動幫你清空超過生存時間的過期數(shù)據(jù)。
- 版本數(shù):設(shè)置列族存儲的最大和最小版本數(shù)(Versions), 當某個單元格的數(shù)據(jù)存儲達到了最大版本數(shù)的數(shù)據(jù)的時候, 再插入新數(shù)據(jù)會將舊數(shù)據(jù)刪除。
- 布隆過濾器:可以知道元素在HFile中是否“ 不存在” 或者“ 可能存在”
- 塊緩存:使用內(nèi)存來記錄數(shù)據(jù), 適用于提升讀取性能。
- 大字段(BOM):當文件大于100KB小于10MB, 即可以被視為MOB。 HBase存儲MOB字段的時候其實也是把該文件直接存儲到HDFS上, 而在表中只存儲了該文件的鏈接。
2.表管理HTableDescriptor
- 最大文件尺寸(maxFileSize):設(shè)置該表的Region的最大尺寸。 如果有Region的大小超過了定義值, 則會觸發(fā)Region拆分
- 只讀模式
- Memstore刷寫值:設(shè)置Memstore刷寫值( memStoreFlushSize) 的最大值, 當Memstore存儲的數(shù)據(jù)大于該值就會觸發(fā)刷寫( flush)
3.Region管理
獲取服務(wù)器信息和region信息
Collection<ServerName> serverNames= admin.getClusterStatus().getServers();
Iterator<ServerName> it=serverNames.iterator();
while(it.hasNext()) {
ServerName serverName=it.next();
System.out.println("\nServer="+serverName.getServerName()+"擁有以下region:");
List<HRegionInfo> regions =admin.getOnlineRegions(serverName);
for(HRegionInfo region:regions) {
System.out.println(region.getRegionNameAsString());
}
4.快照管理
快照就是表在某個時刻的結(jié)構(gòu)和數(shù)據(jù)。 可以使用快照來將某個表快速恢復(fù)到某個時刻的結(jié)構(gòu)和數(shù)據(jù)。
原理:快照并不實際地復(fù)制數(shù)據(jù), 而是保存一份文件列表, 通過修改表所鏈接的文件來改變表的數(shù)據(jù)。
恢復(fù)快照操作包括:停用表-》恢復(fù)快照-》啟用表,例如:
admin.disableTable(TableName.valueOf("mytable"));
admin.restoreSnapshot("test_snapshot_1");
admin.enableTable(TableName.valueOf("mytable"));
5.維護工具管理
Admin提供了針對常見的HBase維護工具的調(diào)用方法,主要介紹:
- 均衡器:HBase提供了一個均衡器用于自動均衡各個RegionServer之間的壓力
- 規(guī)整器:用于規(guī)整Region的尺寸,自動調(diào)整Region的尺寸。
- 目錄管理器:所謂的目錄指的就是hbase:meta表中存儲的Region信息。 當HBase在拆分( Split) 或者合并( merge) 的時候, 使用目錄管理器( catalog janitor) 來清理這些原來的Region信息
6.可見性標簽管理
介紹一個不由Admin接口提供的管理功能。通過給數(shù)據(jù)加上可見性標簽可以實現(xiàn)簡單的用戶,用戶組的權(quán)限控制。