1/5 HBase

一、了解HBase官方文檔:https://hbase.apache.org/book.html

1/5 HBase

文章插圖
1.1 HBase概述
HBase 是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統,用于存儲海量的結構化或者半結構化,非結構化的數據(底層是字節數組做存儲的)
HBase是Hadoop的生態系統之一,是建立在Hadoop文件系統(HDFS)之上的分布式、面向列的數據庫,通過利用Hadoop的文件系統提供容錯能力 。如果需要進行實時讀寫或者隨機訪問大規模的數據集的時候 , 會考慮使用HBase 。
HBase作為Google Bigtable的開源實現,Google Bigtable利用GFS作為其文件存儲系統類似,則HBase利用Hadoop HDFS作為其文件存儲系統;Google通過運行MapReduce來處理Bigtable中的海量數據,同樣,HBase利用Hadoop MapReduce來處理HBase中的海量數據;Google Bigtable利用Chubby作為協同服務,HBase利用Zookeeper作為對應 。在2010年5月,成為apache頂級項目

1/5 HBase

文章插圖
1.2 HBase處理數據
雖然Hadoop是一個高容錯、高延時的分布式文件系統和高并發的批處理系統,但是它不適用于提供實時計算;
HBase是可以提供實時計算的分布式數據庫,數據被保存在HDFS分布式文件系統上,由HDFS保證期高容錯性;
但是再生產環境中,HBase是如何基于hadoop提供實時性呢?
HBase上的數據是以StoreFile(HFile)二進制流的形式存儲在HDFS上block塊兒中;
但是HDFS并不知道的HBase用于存儲什么,它只把存儲文件認為是二進制文件,也就是說 , HBase的存儲數據對于HDFS文件系統是透明的 。
1.3 HBase與HDFS
在下面的表格中 , 我們對HDFS與HBase進行比較:
HDFSHBaseHDFS適于存儲大容量文件的分布式文件系統 。HBase是建立在HDFS之上的數據庫 。HDFS不支持快速單獨記錄查找 。HBase提供在較大的表快速查找HDFS提供了高延遲批量處理;沒有批處理概念 。HBase提供了數十億條記錄低延遲訪問單個行記錄(隨機存?。?。HDFS提供的數據只能順序訪問 。HBase內部使用哈希表和提供隨機接入,并且其存儲索引,可將在HDFS文件中的數據進行快速查找 。Hbase--->HashMap
二、HBase相關概念2.1 分布式數據庫
1、畫圖理解分布式是什么樣子(region)
2.2 列式存儲
2、畫圖理解列式存儲 拿與mysql(必須項:表+列)中的表做對比(必須項:表+列簇)
2.3 稀疏性
3、畫圖理解稀疏(rowkey)
HBase中需要根據行鍵、列族、列限定符和時間戳來確定一個單元格,因此,可以視為一個“四維坐標”,即[行鍵, 列族, 列限定符, 時間戳]
2.4 數據模型
HBase通過表格的模式存儲數據,每個表格由列和行組成,其中 , 每個列又被劃分為若干個列族(colnum family),請參考下面的圖:

1/5 HBase

文章插圖
? 表:HBase的數據同樣是用表來組織的,表由行和列組成,列分為若干個列族 , 行和列的坐標交叉決定了一個單元格 。
??行:每個表由若干行組成,每個行有一個行鍵作為這一行的唯一標識 。訪問表中的行只有三種方式:通過單個行鍵進行查詢、通過一個行鍵的區間來訪問、全表掃描 。
??列族:一個HBase表被分組成許多“列族”的集合,它是基本的訪問控制單元 。
【1/5 HBase】??列修飾符(列限定符):列族里的數據通過列限定符(或列)來定位
??單元格:在HBase表中,通過行、列族和列限定符確定一個“單元格”(cell) , 單元格中存儲的數據沒有數據類型,總被視為字節數組byte[]
??時間戳:每個單元格都保存著同一份數據的多個版本,這些版本采用時間戳進行索引
2.4.1 Hbase數據模型
HBase將數據存放在帶有標簽的表中 , 表由行和列組成,行和列交叉確定一個單元格,單元格有版本號,版本號自動分配,為數據插入該單元格時的時間戳 。單元格的內容沒有數據類型,所有數據都被視為未解釋的字節數組 。
??表格中每一行有一個行鍵(也是字節數組,任何形式的數據都可以表示成字符串,比如數據結構進行序列化之后),整個表根據行鍵的字節序來排序 , 所有對表的訪問必須通過行鍵 。
??表中的列又劃分為多個列族(column family),同一個列族的所有成員具有相同的前綴,具體的列由列修飾符標識,因此,列族和列修飾符合起來才可以表示某一列,比如:info:format、cotents:image

推薦閱讀