hbase梳理

what's

中文文檔
來自於BigTable。
HBase是參考google的bigtable的一個開源產品,創建在hdfs之上的一個提供高可靠性、高性能、列存儲、可伸縮、實時讀寫的數據庫系統。
是一種介於nosql和RDBMs之間的一種數據庫系統,僅支持經過rowkey和range進行數據的檢索,主要存儲非結構化數據和半結構化數據。html

HBase和Hadoop同樣,目標是經過橫向擴展,添加普通機器來增長存儲性能和計算性能。
HBase特色:大(一個表能夠有上億行以及百萬級的行)、面向行存儲、稀疏(因爲null不佔用存儲空間,全部表結果能夠設計的很是稀疏)。java

架構

HBase使用Zookeeper進行集羣節點管理,固然HBase自身集成了一個ZK系統,不過通常狀況在實際生產環境中不使用。
HBase由master和regionserver兩類節點(若是使用HBase自帶的zk服務,那麼還有HQuorumPeer進程)。
Hbase支持提供backup master進行master備份。其中master節點負責和zk進行通訊以及存儲regionserver的相關位置信息,regionserver節點實現具體對數據的操做,最終數據存儲在hdfs上。mysql

物理存儲:hbase的持久化數據是存放在hdfs上
存儲管理:一個表是劃分爲不少region的,這些region分佈式地存放在不少regionserver上(1臺機器對應一個regionServer)。region內部還能夠劃分爲store,store內部有memstore和storefileweb

clipboard.png

版本管理:hbase中的數據更新本質上是不斷追加新的版本,經過compact操做來作版本間的文件合併region的splitsql

集羣管理:zookeeper + hmaster + hregionservershell

web管理界面:http://host:60010/數據庫

hbase數據

HBase邏輯存儲結構

row key是一張表中某一列數據的惟一標識。
時間戳,記錄數據的更新、版本。
column family是列簇(能夠有多個),cf包含一個或多個相關的列column01,column02,.....。apache

clipboard.png

HBase物理存儲結構

clipboard.png

Hbase Shell操做

$ bin/hbase shell進入hbase的shell客戶端,對數據的操做主要分爲DDL和DML兩大類。不用";"。shift+delete才能前刪。api

命名空間

相似關係型數據庫中的database,做用是將hbase的表按照業務做用分割開,有益於維護。
Hbase默認有兩個命名空間,分別是hbase和default。其中hbase命名空間存儲hbase自身的表信息,default存儲用戶建立的表。
create_namespace建立命名空間,alter_namespace命名空間修改describe_namespace顯示命名空間描述信息,drop_namespace`刪除命名空間,注意刪除的命名空間內不能有table存在,也就是說只能刪除空的namespace。
list_namespace顯示全部命名空間,list_namespace_tables顯示對於命名空間中的table名稱,參數能夠是正則形式。後面參數放引號裏。數組

list

做用:顯示hbase表名稱,相似mysql中的show tables;
能夠經過指定命名空間來查看對應命名空間中的表,默認是顯示全部用戶表,也支持模糊匹配。相似命令list_namespace_tables查看對應命名空間內有那些表。

create

> help "create"可查看用法。
建立一個表,指定命名空間、表名
hbase> create 'ns1:t1'會提示表必須至少有一個列簇!

hbase> create 'ns1:table1', {NAME => 'f1', VERSIONS => 5}這裏指定了一個列簇f1,並增長版本信息。
還能夠加更多信息 hbase> create 't1', {NAME => 'f1', VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true}
hbase> create 't1', {NAME => 'f1', CONFIGURATION => {'hbase.hstore.blockingStoreFiles' => '10'}}

還能夠爲表加配置信息 hbase> create 't1', {NAME => 'f1', VERSIONS => 5}, METADATA => { 'mykey' => 'myvalue' }hbase> create 'ns1:t1', 'f1', SPLITS => ['10', '20', '30', '40']hbase> create 't1', 'f1', SPLITS_FILE => 'splits.txt', OWNER => 'johndoe'

hbase> create 'ns1:table2', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}指定了多個列簇。
簡寫:hbase> create 't1', 'f1', 'f2', 'f3'

>describe 'table1'查看錶的描述信息

建立預分區表

默認狀況的狀況下,建立一個HBase表,自動爲表分配一個Region。
create 'table_logs', 'info', SPLITS => ['20151001000000000', '20151011000000000', '20151021000000000']
3+1個region

drop

刪除用戶表以前須要將表設置爲disable的,而後才能夠刪除。
其實在hbase中若是須要對已有表進行ddl操做,均須要將其disable,在ddl操做完成後,再進行enable操做便可。
> disable '[namespace_name:]table_name'
> drop '[namespace_name:]table_name'

put

put命令是進行數據添加的命令。
> put '[namespace_name:]table_name', 'rowkey', 'family:[column]', 'value' [, timestamp] [, {ATTRIBUTES=>{'mykey'=>'myvalue'}, VISIBILITY=>'PRIVATE|SECRET'}]
示例:> put 'users','row1','f1:id','1'
>put 'user', '10001', 'info:name', 'zhangsan'
分別指定表名(能夠不帶命名空間),列簇名,列名(指定所在的列簇),值,默認時間戳

gives you a reference to the table named 't1', on which you can then call methods.

> t=get_table 'cyan:table2'獲得了一個引用後t.put 'r3', 'f1:id', '9'
> t.get 'r3'
也能夠用這種方式建立表hbase> t1 = create 't1', 'f1'

delete

刪除某列column數據,
> delete '[namespace:]table_name', 'rowkey', 'family:column'
> delete 'user', '10001', 'info:age'
若是須要刪除固然rowkey的全部列數據,那麼能夠使用deleteall命令。
> deleteall 'user', '10001' 10001的全沒了

truncate

是清空數據庫,當咱們數據庫中的數據比較多的時候,咱們能夠選擇該命令將數據庫清空。
> truncate '[namespace_name:]table_name'

查詢數據

HBase數據查詢有三種方式:

get

依據rowkey查詢,最快的。
獲取對應表中對應rowkey的數據。默認獲取最新版本的所有列數據,能夠經過時間戳指定版本信息,也能夠指定獲取的列。
> get '[namespace_name:]table_name', 'rowkey'
示例:> get 'users','row1'
>get 'user', '10001', 'info:name'獲得該row的name值
>get 'user', '10001', 'info:name', 'info:age'獲得該row的name值和age值

scan range

經過指定column和filter等相關信息進行數據的過濾。範圍查詢都寫在"{}"中。用的最多。

> scan 'users', {COLUMN=>['f1:id']} 會返回有列簇f1且列名爲id的row的條數,還有該列的值。

> scan 'users', {COLUMN=>['f1:id','f2:name']} 會返回有列簇f1且列名爲id的 或 會返回有列簇f2且列名爲name的 row的條數,還有該列的值。

> scan 'users', {STARTROW=>'row1',ENDROW=>'row2'}開始掃描的rowkey,結束掃描的rowkey,獲取行數等信息。包頭不包尾!

> scan 'users', {LIMIT=>1}返回前1條row。

經常使用filter命令有:ColumnPrefixFilter,MultipleColumnPrefixFilter,RowFilter,SingleColumnValueFilter,SingleColumnValueExcludeFilter等。
須要注意的是:在指定的value以前須要加'binary:'!最後會轉爲是二進制的字符串數組。
> scan 'users',{FILTER=>"SingleColumnValueFilter('f','id',=,'binary:1)"}指定了f列簇下列名爲id且值爲1
> scan 'users', {FILTER=>"RowFilter(>=,'binary:row8')"}
> scan 'users', {FILTER=>"SingleColumnValueFilter('f','id',=,'binary:2')"}
`> scan 'users', {FILTER=>"SingleColumnValueFilter('f','id',<,'binary:3') OR RowFilter(>,'binary:row7')"}

> scan 'users', {FILTER=>"ColumnPrefixFilter('id')"}
> scan 'users', {FILTER=>"MultipleColumnPrefixFilter('id', 'name')"}

各類條件均可以寫在"{}"中,用逗號隔開取交集。

scan

全表掃描。
> scan '[namespace_name:]table_name'
示例:> scan 'users'

count

是統計hbase錶行數的一個命令,因爲至關於一個內置的mapreduce程序,因此當數據量比較大的時候能夠選擇使用協處理器方式計算行數。
> count '[namespace:]table_name' [INTERVAL => 1000,] [CACHE => 10]
默認狀況下INTERVAL是1000(間隔數),CACHE是10。

status

做用:查看hbase集羣狀態信息。

參數:simple,summary,detailed;默認是summary。

Hbase java api

http://hbase.apache.org/apidocs/

HBase MapReduce

http://www.kuqin.com/database...

相關文章
相關標籤/搜索