共計 2621 個字符,預計需要花費 7 分鐘才能閱讀完成。
本篇文章為大家展示了如何理解大數據時代的結構化存儲數據庫 HBase,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
Hbase 非常適合于非結構化數據存儲的數據庫,2006 年底由 PowerSet 的 Chad Walters 和 Jim Kellerman 發起,2008 年成為 Apache Hadoop 的一個子項目。現已作為產品在多家企業被使用。
分布式數據庫 HBase
授權協議:Apache
開發語言:Java
操作系統:跨平臺
項目地址:https://github.com/apache/hbase
HBase 項目簡介
HBase ndash; Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統,利用 HBase 技術可在廉價 PC Server 上搭建起大規模結構化存儲集群。
HBase 是 Google Bigtable 的開源實現,類似 Google Bigtable 利用 GFS 作為其文件存儲系統,HBase 利用 Hadoop HDFS 作為其文件存儲系統;Google 運行 MapReduce 來處理 Bigtable 中的海量數據,HBase 同樣利用 Hadoop MapReduce 來處理 HBase 中的海量數據;Google Bigtable 利用 Chubby 作為協同服務,HBase 利用 Zookeeper 作為對應。
Hbase 特性
大表:數十億行 * 數百萬列 * 數千個版本 = TB 級或 PB 級的存儲
面向列:面向列 (族) 的存儲和權限控制,列 (族) 獨立檢索。
稀疏:對于為空 (null) 的列,并不占用存儲空間,因此,表可以設計的非常稀疏。
數據多版本:每個單元中的數據可以有多個版本,默認情況下版本號自動分配,是單元格插入時的時間戳;
數據類型單一:Hbase 中的數據都是字符串,沒有類型
HBase 系統架構
HBase 中的組件包括 Client、Zookeeper、HMaster、HRegionServer、HRegion、Store、MemStore、StoreFile、HFile、HLog 等,HBase 中的每張表都通過行鍵按照一定的范圍被分割成多個子表(HRegion),默認一個 HRegion 超過 256M 就要被分割成兩個,這個過程由 HRegionServer 管理,而 HRegion 的分配由 HMaster 管理。
相關名詞介紹
RowKey:是 Byte array,是表中每條記錄的“主鍵”,方便快速查找,Rowkey 的設計非常重要。表中的行根據行的鍵值進行排序,數據按照 RowKey 的字典序排序存儲
Column Family:列族,擁有一個名稱 (string),包含一個或者多個相關列。列族須作為表模式(schema) 定義的一部分預先定義。如 create alarmInfo , i
Column:屬于某一個 columnfamily,familyName:columnName,每條記錄可動態添加
Version Number:類型為 Long,默認值是系統時間戳,可由用戶自定義
Value(Cell):由{row key, column(= family + label), version} *** 確定的單元。cell 中的數據是沒有類型的,全部是字節碼形式存貯。
HBase 邏輯模型
HBase 以表的形式存儲數據。表有行和列組成。列劃分為若干個列族(row family)
Hbase 物理模型
Table 中所有行都按照 row key 的字典序排列;Table 在行的方向上分割為多個 Region;Region 按大小分割的,每個表開始只有一個 region,隨著數據增多,region 不斷增大,當增大到一個閥值的時候,region 就會等分會兩個新的 region,之后會有越來越多的 region;Region 是 Hbase 中分布式存儲和負載均衡的最小單元,不同 Region 分布到不同 RegionServer 上。
Region 雖然是分布式存儲的最小單元,但并不是存儲的最小單元。Region 由一個或者多個 Store 組成,每個 store 保存一個 columns family;每個 Strore 又由一個 memStore 和 0 至多個 StoreFile 組成,StoreFile 包含 HFile;memStore 存儲在內存中,StoreFile 存儲在 HDFS 上。
Hbase 請求過程
HBase 是一個分布式數據庫,因此一張表的數據可能會分布在不同的節點中。需要注意的是 region 是 Hbase 分布式存儲的最小單位,但 region 不是 HBase 存儲的最小單位。在 HBase 中,一張表會被根據行鍵值的范圍劃分為幾個 region,然后不同的 region 將會放在不同的 region 服務器上,被服務器上的 HRegionServer 所管理和維持。
因此我們可以推斷出,當我們發送一個查找(插入、刪除)請求時,首先客戶端能根據請求中的行鍵值去確定該行鍵值應該存儲在哪一個 region 上,并且該 region 在哪一個 region 服務器上(該查詢過程主要使用 -ROOT- 表、和.meta 表,當定位到操作的 region 服務器的位置以后,客戶端(Client)會將該操作發送到 region 服務器上,然后請求操作可能會被直接執行,也可能會進入任務隊列等待
Hbase 與 RDBMS 對比
為什么采用 HBase?
HBase 不同于一般的關系數據庫, 它是一個適合于非結構化數據存儲的數據庫. 所謂非結構化數據存儲就是說 HBase 是基于列的而不是基于行的模式,這樣方面讀寫你的大數據內容。
HBase 是介于 Map Entry(key value)和 DB Row 之間的一種數據存儲方式。就點有點類似于現在流行的 Memcache,但不僅僅是簡單的一個 key 對應一個 value,你很可能需要存儲多個屬性的數據結構,但沒有傳統數據庫表中那么多的關聯關系,這就是所謂的松散數據。
簡單來說,你在 HBase 中的表創建的可以看做是一張很大的表,而這個表的屬性可以根據需求去動態增加,在 HBase 中沒有表與表之間關聯查詢。你只需要 告訴你的數據存儲到 Hbase 的那個 column families 就可以了,不需要指定它的具體類型:char,varchar,int,tinyint,text 等等。但是你需要注意 HBase 中不包含事務此類的功能。
上述內容就是如何理解大數據時代的結構化存儲數據庫 HBase,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注丸趣 TV 行業資訊頻道。