結構化儲存數據庫——HBase
概述
HBase是一個分佈式的、面向列的開源數據庫,該技術來源於 Fay Chang 所撰寫的Google論文"Bigtable:一個結構化數據的分佈式存儲系統"。就像Bigtable利用了Google文件系統(File System)所提供的分佈式數據存儲一樣,HBase在Hadoop之上提供了類似於Bigtable的能力。HBase是Apache的Hadoop項目的子項目。HBase不同於一般的關係數據庫,它是一個適合於非結構化數據存儲的數據庫。另一個不同的是HBase基於列的而不是基於行的模式。
搭建環境
部署節點操作系統為CentOS,防火牆和SElinux禁用,創建了一個shiyanlou用戶並在系統根目錄下創建/app目錄,用於存放Hadoop等組件運行包。因為該目錄用於安裝hadoop等組件程序,用戶對shiyanlou必須賦予rwx權限(一般做法是root用戶在根目錄下創建/app目錄,並修改該目錄擁有者為shiyanlou(chown –R shiyanlou:shiyanlou /app)。
Hadoop搭建環境:
l 虛擬機操作系統: CentOS6.6 64位,單核,1G內存
l JDK:1.7.0_55 64位
l Hadoop:1.1.2
HBase特性
- 強讀寫一致性:適合高速計數聚合操作
- 自動切分數據:分佈式存儲數據,隨著數據增長進行自動切片
- RegionServer自動失效備援
- 與HDFS集成
- 支持MapReduce執行大規模並行操作
- 提供Java Client API
- 提供Thrift/REST API
- 針對大容量查詢優化的塊緩存和Bloom Fliter
- 可視化管理界面
劣勢
- WAL的重新執行速度緩慢
- 故障恢復緩慢且複雜
- 主壓縮會引起 I/O風暴
HBase使用場景
- 互聯網搜索問題:爬蟲收集網頁,存儲到BigTable裡,MapReduce計算作業掃描全表生成搜索索引,從BigTable中查詢搜索結果,展示給用戶。
- 抓取增量數據:例如,抓取監控指標,抓取用戶交互數據,遙測技術,定向投放廣告等
- 內容服務
- 信息交互
HBase Shell命令行交互
啟動Shell $ hbase shell
列出所有的表 hbase > list
創建名為mytable的表,含有一個列族hb hbase > create ' mytable' , 'hb'
在‘mytable’表的'first'行中的‘hb:data’列對應的數據單元中插入字節數組‘hello HBase’
hbase > put 'mytable' , 'first' , 'hb:data' , 'hello HBase'
讀取mytable表 ‘first’行的內容 hbase > get 'mytable' , 'first'
讀取mytable表所有的內容 hbase > scan ‘mytable'
示例
- HBase的RowKey設計
電信公司rowKey設計實例:
0.區域劃分:劃分100個區域,從00到99
CallerId + 201703 :hashcode % 100 = 00 -99
1.rowKey設計:rno + callerid + calltime[201702011212] + calleeid + duration ,這個地方注意:rno 等於callerid + calltime 的一部分
2.通話記錄:
1)創建表:$hbase>create 'ns1:calllogs','f1'
2)創建單元測試。向表中添加數據。