1. Hbase簡介
Habse全稱為Hadoop Database,是一個高可靠、高性能、面向列、可伸縮的分布式非結構化數據庫。用來存儲大規模的半結構化和非結構化的松散數據。生產上通常是利用廉價的pc server搭建大規模的hbase集群。Hbase的底層是依賴hdfs作為文件存儲系統,zookeeper為其提供協同服務,可以使用mapreduce、hive等對hbase的表數據進行分析處理。
1.1 habse的表結構模型
在hbase中,數據是以表的形式存在的,表內由行和列族組成,列族里可以是一列也可以是若干列。
表格 1.1 hbase表格式
Row Key column-family1 column-family2 column-family3
column1 column2 column1 column2 column3 column1
Row key1 t1:abc
t2:gdxdf t4:dfads
t3:hello
t2:world
Row key2 t3:abc
t1:gdxdf t4:dfads
t3:hello t2:dfdsfa
t3:dfdf
Row key3 t2:dfadfasd
t1:dfdasddsf t2:dfxxdfasd
t1:taobao.com
row key1,row key2,row key3是三條記錄的唯一的row key值,column-family1,column-family2,column-family3是三個列族,每個列族下又包括幾列。比如 column-family1這個列族下包括兩列,名字是column1和column2,t1:abc,t2:gdxdf是由row key1和column-family1-column1唯一確定的一個單元cell。這個cell中有兩個數據,abc和gdxdf。兩個值的時間戳不一樣,分別是t1,t2, hbase會返回新時間的值給請求者。
Row key:行鍵,是表用來檢索數據記錄的主鍵,表數據的查詢是按照row key的值來排序的。它可以是任意的字符串,大長度為64KB,通常設計rowkey的長度在10-100bytes。內容可以由使用的用戶自定義。它在hbase里被保存為字節數組。Row key設計必須滿足業務的需求,能夠確保查詢能更加方便快捷。
訪問hbase table的行,有三種方式:
1.通過單個的row key訪問
2.通過row key的rang
3.全表掃描
Column family:habse表里的每一個列都是歸屬于某個列族,列族是表chema的一部分(而列不是),列名都是以列族為前綴。例如courses:arts,courses:english 都是屬于courses這個列族。也就是說列族由若干列組成,列族支持動態擴展,所以跟關系型數據庫不同的是無需預先定義列的數量以及類型,所有的column都是以二進制格式存儲,用戶需要自行進行類型轉換。對于為空(null)的列,并不占用存儲空間,因此,表可以設計的非常稀疏。
單元Cell:hbase中通過row和columns確定為一個存儲單元稱為cell。由{row key,column(=<family>+<label>),version}確定唯一的單元。Cell中的數據是沒有類型的,全部都是字節碼形式存儲的。
時間戳:每個cell都保存著同一份數據的多個版本。版本通過時間戳來索引。時間戳的類型是64位整數。時間戳可以由hbase在數據寫入時自動賦值,此時時間戳是精確到毫秒的當前系統時間。時間戳也可以由客戶顯式賦值。
1.2 單機模式搭建與測試
該模式下,Hbase使用的是本地文件系統,而非Hdfs,所有的服務和zookeeper(hbase里面帶有內置的zookeeper)都運行在JVM中。Zookeeper監聽一個端口,這樣客戶端就可以連接Hbase了。
(1)解壓hbase包到當前用戶家目錄
Shell Code
清單 0 1
$ cd ~
$ tar zxvf hbase-1.0.0-cdh5.5.2.tar.gz
(2)修改配置文
Shell Code
清單 0 2
vim conf/hbase-site.xml
<configuration>
<property>
<!—region server的共享目錄,單機模式是在本地。-->
<name>hbase.rootdir</name>
<value>file:////home/hadoop/hbase-1.0.0-cdh5.5.2/data</value>
</property>
</configuration>
在hbase-env.sh里將JAVA_HOME指向到你Java的安裝目錄。
Shell Code
清單 0 3
$ vim conf/hbase-env.sh
export JAVA_HOME=/usr/local/share/jdk1.7.0_25
export HBASE_MANAGES_ZK=true
(3)啟動Hbase 進入hbase的bin目錄里開啟hbase服務
Shell Code
清單 0 4
$ cd bin
$ ./start-hbase.sh
圖 0 1
(4)用shell連接hbase
Shell Code
清單 0 5
$ ./hbase shell
圖 0 2
(5)測試
創建表aaa,列族為people。
Shell Code
清單 0 6
create 'aaa','people'
圖 0 3
插入數據 put ‘表名’,’rowkey’,’列族名:列名’,’值’。
Shell Code
清單 0 7
put 'aaa','row1','people:cn','12333'
put 'aaa','row2','people:us','133'
put 'aaa','row3','people:uk','2133'
圖 0 4
全局瀏覽表aaa。
Shell Code
清單 0 8
scan 'aaa'
圖 0 5
通過rowkey get一行數據。
Shell Code
清單 0 9
get 'aaa','row2'
圖 0 6
禁止操作表aaa,禁止之后,就不能再操作該表否則會報錯。
Shell Code
清單 0 10
disable 'aaa'
圖 0 7
刪除表,先使用disable禁止表之后再使用drop刪除表。
Shell Code
清單 0 11
drop 'aaa'
圖 0 8
關閉shell
Shell Code
清單 0 12
exit
停止hbase服務
Shell Code
清單 0 13
./stop-hbase.sh