HBase是一個分佈式的、面向列的開源數據庫,該技術來源於 Fay Chang 所撰寫的Google論文「Bigtable:一個結構化數據的分佈式存儲系統」。就像Bigtable利用了Google文件系統(File System)所提供的分佈式數據存儲同樣,HBase在Hadoop之上提供了相似於Bigtable的能力。HBase是Apache的Hadoop項目的子項目。HBase不一樣於通常的關係數據庫,它是一個適合於非結構化數據存儲的數據庫。另外一個不一樣的是HBase基於列的而不是基於行的模式。數據庫
一、Hadoop生太圈數組
經過Hadoop生態圈,能夠看到HBase的身影,可見HBase在Hadoop的生態圈是扮演這一個重要的角色那就是 實時、分佈式、高維數據 的數據存儲;服務器
二、HBase簡介 架構
– HBase – Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮、 實時讀寫的分佈式數據庫 負載均衡
– 利用Hadoop HDFS做爲其文件存儲系統,利用Hadoop MapReduce來處理 HBase中的海量數據,利用Zookeeper做爲其分佈式協同服務分佈式
– 主要用來存儲非結構化和半結構化的鬆散數據(列存NoSQL數據庫)oop
三、HBase數據模型性能
以關係型數據的思惟下會感受,上面的表格是一個5列4行的數據表格,可是在HBase中這種理解是錯誤的,其實在HBase中上面的表格只是一行數據;spa
Row Key:3d
– 決定一行數據的惟一標識
– RowKey是按照字典順序排序的。
– Row key最多隻能存儲64k的字節數據。
Column Family列族(CF一、CF二、CF3) & qualifier列:
– HBase表中的每一個列都歸屬於某個列族,列族必須做爲表模式(schema) 定義的一部分預先給出。如create ‘test’, ‘course’;
– 列名以列族做爲前綴,每一個「列族」均可以有多個列成員(column,每一個列族中能夠存放幾千~上千萬個列);如 CF1:q1, CF2:qw,
新的列族成員(列)能夠隨後按需、動態加入,Family下面能夠有多個Qualifier,因此能夠簡單的理解爲,HBase中的列是二級列,
也就是說Family是第一級列,Qualifier是第二級列。兩個是父子關係。
– 權限控制、存儲以及調優都是在列族層面進行的;
– HBase把同一列族裏面的數據存儲在同一目錄下,由幾個文件保存。
– 目前爲止HBase的列族能可以很好處理最多不超過3個列族。
Timestamp時間戳:
– 在HBase每一個cell存儲單元對同一份數據有多個版本,根據惟一的時間 戳來區分每一個版本之間的差別,不一樣版本的數據按照時間倒序排序,
最新的數據版本排在最前面。
– 時間戳的類型是64位整型。
– 時間戳能夠由HBase(在數據寫入時自動)賦值,此時時間戳是精確到毫 秒的當前系統時間。
– 時間戳也能夠由客戶顯式賦值,若是應用程序要避免數據版本衝突, 就必須本身生成具備惟一性的時間戳。
Cell單元格:
– 由行和列的座標交叉決定;
– 單元格是有版本的(由時間戳來做爲版本);
– 單元格的內容是未解析的字節數組(Byte[]),cell中的數據是沒有類型的,所有是字節碼形式存貯。
• 由{row key,column(=<family> +<qualifier>),version}惟一肯定的單元。
四、HBase體系架構
Client
• 包含訪問HBase的接口並維護cache來加快對HBase的訪問
Zookeeper
• 保證任什麼時候候,集羣中只有一個master
• 存貯全部Region的尋址入口。
• 實時監控Region server的上線和下線信息。並實時通知Master
• 存儲HBase的schema和table元數據
Master
• 爲Region server分配region
• 負責Region server的負載均衡
• 發現失效的Region server並從新分配其上的region
• 管理用戶對table的增刪改操做
RegionServer
• Region server維護region,處理對這些region的IO請求
• Region server負責切分在運行過程當中變得過大的region
HLog(WAL log):
– HLog文件就是一個普通的Hadoop Sequence File,Sequence File 的Key是 HLogKey對象,HLogKey中記錄了寫入數據的歸屬信息,
除了table和 region名字外,同時還包括sequence number和timestamp,timestamp是」 寫入時間」,sequence number的起始值爲0,
或者是最近一次存入文件系 統中sequence number。
– HLog SequeceFile的Value是HBase的KeyValue對象,即對應HFile中的 KeyValue
Region
– HBase自動把表水平劃分紅多個區域(region),每一個region會保存一個表 裏面某段連續的數據;每一個表一開始只有一個region,隨着數據不斷插 入表,
region不斷增大,當增大到一個閥值的時候,region就會等分會 兩個新的region(裂變);
– 當table中的行不斷增多,就會有愈來愈多的region。這樣一張完整的表 被保存在多個Regionserver上。
Memstore 與 storefile
– 一個region由多個store組成,一個store對應一個CF(列族)
– store包括位於內存中的memstore和位於磁盤的storefile寫操做先寫入 memstore,當memstore中的數據達到某個閾值,
hregionserver會啓動 flashcache進程寫入storefile,每次寫入造成單獨的一個storefile
– 當storefile文件的數量增加到必定閾值後,系統會進行合併(minor、 major compaction),在合併過程當中會進行版本合併和刪除工做 (majar),
造成更大的storefile。
– 當一個region全部storefile的大小和超過必定閾值後,會把當前的region 分割爲兩個,並由hmaster分配到相應的regionserver服務器,實現負載均衡。
– 客戶端檢索數據,先在memstore找,找不到再找storefile
– HRegion是HBase中分佈式存儲和負載均衡的最小單元。最小單元就表 示不一樣的HRegion能夠分佈在不一樣的HRegion server上。
– HRegion由一個或者多個Store組成,每一個store保存一個columns family。
– 每一個Strore又由一個memStore和0至多個StoreFile組成。
如圖:StoreFile 以HFile格式保存在HDFS上。