中文文檔
來自於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
版本管理:hbase中的數據更新本質上是不斷追加新的版本,經過compact操做來作版本間的文件合併region的splitsql
集羣管理:zookeeper + hmaster + hregionservershell
web管理界面:http://host:60010/數據庫
row key是一張表中某一列數據的惟一標識。
時間戳,記錄數據的更新、版本。
column family是列簇(能夠有多個),cf包含一個或多個相關的列column01,column02,.....。apache
$ 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名稱,參數能夠是正則形式。後面參數放引號裏。數組
做用:顯示hbase表名稱,相似mysql中的show tables;
能夠經過指定命名空間來查看對應命名空間中的表,默認是顯示全部用戶表,也支持模糊匹配。相似命令list_namespace_tables查看對應命名空間內有那些表。
> 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
刪除用戶表以前須要將表設置爲disable的,而後才能夠刪除。
其實在hbase中若是須要對已有表進行ddl操做,均須要將其disable,在ddl操做完成後,再進行enable操做便可。> disable '[namespace_name:]table_name'
> drop '[namespace_name:]table_name'
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'
分別指定表名(能夠不帶命名空間),列簇名,列名(指定所在的列簇),值,默認時間戳
> t=get_table 'cyan:table2'
獲得了一個引用後t.put 'r3', 'f1:id', '9'
> t.get 'r3'
也能夠用這種方式建立表hbase> t1 = create 't1', 'f1'
刪除某列column數據,> delete '[namespace:]table_name', 'rowkey', 'family:column'
> delete 'user', '10001', 'info:age'
若是須要刪除固然rowkey的全部列數據,那麼能夠使用deleteall命令。> deleteall 'user', '10001'
10001的全沒了
是清空數據庫,當咱們數據庫中的數據比較多的時候,咱們能夠選擇該命令將數據庫清空。> truncate '[namespace_name:]table_name'
HBase數據查詢有三種方式:
依據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值
經過指定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 '[namespace_name:]table_name'
示例:> scan 'users'
是統計hbase錶行數的一個命令,因爲至關於一個內置的mapreduce程序,因此當數據量比較大的時候能夠選擇使用協處理器方式計算行數。> count '[namespace:]table_name' [INTERVAL => 1000,] [CACHE => 10]
默認狀況下INTERVAL是1000(間隔數),CACHE是10。
做用:查看hbase集羣狀態信息。
參數:simple,summary,detailed;默認是summary。
http://hbase.apache.org/apidocs/