HBase是一個構建在HDFS上的分佈式列存儲系統;數據庫
HBase是Apache Hadoop生態系統中的重要一員,主要用於海量結構化數據存儲服務器
從邏輯上講, HBase將數據按照表、行和列進行存儲。架構
Hbase是Hadoop生態系統的一個組成部分併發
Hbase與HDFS對比負載均衡
二者都具備良好的容錯性和擴展性,均可以擴展到成百上千個節點;分佈式
HDFS適合批處理場景
不支持數據隨機查找
不適合增量數據處理
不支持數據更新高併發
Hbase表的特色oop
大:一個表能夠有數十億行,上百萬列;大數據
無模式:每行都有一個可排序的主鍵和任意多的列,列能夠根據須要動態的增長,同一張表中不一樣的行能夠有大相徑庭的列;spa
面向列:面向列(族)的存儲和權限控制,列(族)獨立檢索;
稀疏:對於空( null)的列,並不佔用存儲空間,表能夠設計的很是稀疏;
數據多版本:每一個單元中的數據能夠有多個版本,默認狀況下版本號自動分配,是單元格插入時的時間戳;
數據類型單一: Hbase中的數據都是字符串,沒有類型
行存儲與列存儲
數據是按行存儲的
沒有索引的查詢使用大量I/O
創建索引須要花費大量時間和資源
數據是按列存儲-每一列單獨存放
數據便是索引
指訪問查詢涉及的列-大量下降系統I/O
每一列由一個線索來處理-查詢的併發處理
數據類型一致,數據特徵類似-高效壓縮
HBase是基於Google BigTable模型開發的, 典型的key/value系統;
Hbase邏輯視圖
Rowkey與Column Family
Hbase基本概念
Row Key
Byte array
表中每條記錄的「主鍵」
方便快速查找
Column Family
擁有一個名稱(string)
包含一個或者多個相關列
Column
屬於某一個column family
包含在某一列中
familyName:columnName
Version Number
默認值系統時間戳
Value(cell)
Byte array
Hbase數據模型
HBase schema能夠有多個相似Table
每一個表可由多個Column Family組成
Hbase能夠有Dynamic Column
version number 可由用戶提供
無需以遞增的順序插入
Table可能很是稀疏
不一樣的cell能夠擁有不一樣的列
Row Key是主鍵
Hbase與支持的操做
全部操做均是基於rowkey的;
支持CRUD(Create、Read、Update和Delete)和Scan;
單行操做
put
get
scan
多行操做
Scan
Multiput
沒有內置join操做,可以使用MapReduce解決
每一個column family存儲在HDFS上的一個單獨文件中;
Key 和 Version number在每一個 column family中均由一份;
空值不會被保存。
Hbase爲每一個值維護了多級索引
一個實例
物理存儲
一、 Table中的全部行都按照row key的字典序排列;
二、 Table 在行的方向上分割爲多個Region;
三、 Region按大小分割的,每一個表開始只有一個region,隨着數據增多, region不斷增大,當增大到一個閥值的時候,region就會等分會兩個新的region,以後會有愈來愈多的region;
4 、 Region是HBase中分佈式存儲和負載均衡的最小單元。不一樣Region分佈到不一樣RegionServer上;
5 、 Region雖然是分佈式存儲的最小單元,但並非存儲的最小單元
Region由一個或者多個Store組成,每一個store保存一個columns family
每一個Store又由一個memStore和0至多個StoreFile組成;
memStore存儲在內存中, StoreFile存儲在HDFS上。
Client
包含訪問Hbase的接口,並維護cache來加快對Hbase的訪問
ZooKeeper
保證任什麼時候候,集羣中只有一個master
存貯全部Region的尋址入口
實時監控Region server的上線和下線信息。並實時通知給Master
存儲HBase的schema和table元數據
Master
爲Region server分配region
負責Region server的負載均衡
發現失效的Region server並從新分配其上的region
管理用戶對table的增刪改查操做
Region Server
Region server維護region,處理對這些region的IO請求
Region server負責切分在運行過程當中變得過大的region
Zookeeper做用
HBase 依賴ZooKeeper
默認狀況下, HBase 管理ZooKeeper 實例
好比, 啓動或者中止ZooKeeper
Master與RegionServers啓動時會向ZooKeeper註冊
Zookeeper的引入使得Master再也不是單點故障
Write-Ahead-Log( WAL)
Hbase容錯性
Master容錯: Zookeeper從新選擇一個新的Master
無Master過程當中,數據讀取仍照常進行;
無master過程當中, region切分、負載均衡等沒法進行;
RegionServer容錯:定時向Zookeeper彙報心跳,若是一旦時間內未出現心跳
Master將該RegionServer上的Region從新分配到其餘RegionServer上;
失效服務器上「預寫」日誌由主服務器進行分割並派送給新的RegionServer
Zookeeper容錯: Zookeeper是一個可靠地服務
通常配置3或5個Zookeeper實例。
Region定位
尋找RegionServer
ZooKeeper
-ROOT-(單Region)
.META.
用戶表
-ROOT-表與.META.表
-ROOT-
表包含.META.表所在的region列表,該表只會有一個Region;
Zookeeper中記錄了-ROOT-表的location。
.META.
表包含全部的用戶空間region列表,以及RegionServer的服務器地址。
什麼時候使用Hbase
需對數據進行隨機讀操做或者隨機寫操做;
大數據上高併發操做,好比每秒對PB級數據進行上千次操做;
讀寫訪問均是很是簡單的操做。
什麼公司在使用Hbase
國外有facebook,twitter,yahoo等 國內有阿里巴巴,百度,360等一些公司
Hbase在淘寶的應用
交易歷史記錄查詢系統 百億行數據表,千億級二級索引表 天天千萬行更新 查詢場景簡單,檢索條件較少 關係型數據庫所帶來的問題 基於userId+time+id rowkey設計 成本考慮