天天看點

HBase入門介紹(從基礎到架構)

本篇部落格,小菌為大家帶來的是關于HBase的入門介紹!

1.HBase 基本介紹

簡介

hbase是bigtable的開源java版本。是建立在hdfs之上,提供高可靠性、高性能、列存儲、可伸縮、實時讀寫nosql的資料庫系統。

它介于nosql和RDBMS之間,僅能通過主鍵(row key)和主鍵的range來檢索資料,僅支援單行事務(可通過hive支援來實作多表join等複雜操作)。

主要用來存儲結構化和半結構化的松散資料。

Hbase查詢資料功能很簡單,不支援join等複雜操作,不支援複雜的事務(行級的事務)

Hbase中支援的資料類型:byte[]

與hadoop一樣,Hbase目标主要依靠橫向擴充,通過不斷增加廉價的商用伺服器,來增加計算和存儲能力。

HBase中的表一般有這樣的特點:

  • 大:一個表可以有上十億行,上百萬列
  • 面向列:面向列(族)的存儲和權限控制,列(族)獨立檢索。
  • 稀疏:對于為空(null)的列,并不占用存儲空間,是以,表可以設計的非常稀疏。

傳統的資料表

HBase入門介紹(從基礎到架構)
HBase入門介紹(從基礎到架構)
HBase入門介紹(從基礎到架構)
HBase入門介紹(從基礎到架構)

HBase 的表模型

HBase入門介紹(從基礎到架構)

HBase的發展曆程

HBase的原型是Google的BigTable論文,受到了該論文思想的啟發,目前作為Hadoop的子項目來開發維護,用于支援結構化的資料存儲。

官方網站:http://hbase.apache.org

  • 2006年Google發表BigTable白皮書
  • 2006年開始開發HBase
  • 2008 HBase成為了 Hadoop的子項目
  • 2010年HBase成為Apache頂級項目

2、HBase與Hadoop的關系

<1>HDFS

  • 為分布式存儲提供檔案系統
  • 針對存儲大尺寸的檔案進行優化,不适用對HDFS上的檔案進行随機讀寫
  • 直接使用檔案
  • 資料模型不靈活
  • 使用檔案系統和處理架構
  • 優化一次寫入,多次讀取的方式

<2>HBase

  • 提供表狀的面向列的資料存儲
  • 針對表狀資料的随機讀寫進行優化
  • 使用key-value操作資料
  • 提供靈活的資料模型
  • 使用表狀存儲,支援MapReduce,依賴HDFS
  • 優化了多次讀,以及多次寫

3.RDBMS與HBase的對比

<1>RDBM(關系型資料庫)

結構:
  • 資料庫以表的形式存在
  • 支援FAT、NTFS、EXT、檔案系統
  • 使用Commit log存儲日志
  • 參考系統是坐标系統
  • 使用主鍵(PK)
  • 支援分區
  • 使用行、列、單元格
功能:
  • 支援向上擴充
  • 使用SQL查詢
  • 面向行,即每一行都是一個連續單元
  • 資料總量依賴于伺服器配置
  • 具有ACID支援
  • 适合結構化資料
  • 傳統關系型資料庫一般都是中心化的
  • 支援事務
  • 支援Join

<2>HBase

結構:
  • 資料庫以region的形式存在
  • 支援HDFS檔案系統
  • 使用WAL(Write-Ahead Logs)存儲日志
  • 參考系統是Zookeeper
  • 使用行鍵(row key)
  • 支援分片
  • 使用行、列、列族和單元格
功能:
  • 支援向外擴充
  • 使用API和MapReduce來通路HBase表資料
  • 面向列,即每一列都是一個連續的單元
  • 資料總量不依賴具體某台機器,而取決于機器數量
  • HBase不支援ACID(Atomicity、Consistency、Isolation、Durability原子性、一緻性、隔離性、耐久性)
  • 适合結構化資料和非結構化資料
  • 一般都是分布式的
  • HBase不支援事務
  • 不支援SQL
  • 不支援Join

4、HBase特征簡要

<1>海量存儲

Hbase适合存儲PB級别的海量資料,在PB級别的資料以及采用廉價PC存儲的情況下,能在幾十到百毫秒内傳回資料。這與Hbase的極易擴充性息息相關。正式因為Hbase良好的擴充性,才為海量資料的存儲提供了便利。

<2>列式存儲

這裡的列式存儲其實說的是列族存儲,Hbase是根據列族來存儲資料的。列族下面可以有非常多的列,列族在建立表的時候就必須指定。需要注意的是,列族理論上可以很多,但實際上建議不要超過6個

<3>極易擴充

Hbase的擴充性主要展現在兩個方面,一個是基于上層處理能力(RegionServer)的擴充,一個是基于存儲的擴充(HDFS)。

通過橫向添加RegionSever的機器,進行水準擴充,提升Hbase上層的處理能力,提升Hbsae服務更多Region的能力。

備注:RegionServer的作用是管理region、承接業務的通路,這個後面會詳細的介紹通過橫向添加Datanode的機器,進行存儲層擴容,提升Hbase的資料存儲能力和提升後端存儲的讀寫能力。

<4>高并發

由于目前大部分使用Hbase的架構,都是采用的廉價PC,是以單個IO的延遲其實并不小,一般在幾IO延遲下降并不多。能獲得高并發、低延遲的服務。

<5>稀疏

稀疏主要是針對Hbase列的靈活性,在列族中,你可以指定任意多的列,在列資料為空的情況下,是不會占用存儲空間的。

5、HBase的基礎架構

HBase入門介紹(從基礎到架構)

<1>HMaster

功能:

  1. 監控RegionServer
  2. 處理RegionServer故障轉移
  3. 進行中繼資料的變更
  4. 處理region的配置設定或移除
  5. 在空閑時間進行資料的負載均衡
  6. 通過Zookeeper釋出自己的位置給用戶端

<2>RegionServer

功能:

  1. 負責存儲HBase的實際資料
  2. 處理配置設定給它的Region
  3. 重新整理緩存到HDFS
  4. 維護HLog
  5. 執行壓縮
  6. 負責處理Region分片
HBase入門介紹(從基礎到架構)

元件:

<1>Write-Ahead logs

HBase的修改記錄,當對HBase讀寫資料的時候,資料不是直接寫進磁盤,它會在記憶體中保留一段時間(時間以及資料量門檻值可以設定)。但把資料儲存在記憶體中可能有更高的機率引起資料丢失,為了解決這個問題,資料會先寫在一個叫做Write-Ahead logfile的檔案中,然後再寫入記憶體中。是以在系統出現故障的時候,資料可以通過這個日志檔案重建。

<2>StoreFile(HFile)

這是在磁盤上儲存原始資料的實際的實體檔案,是實際的存儲檔案。

<3>Store

HFile存儲在Store中,一個Store對應HBase表中的一個列族。

<4>MemStore

顧名思義,就是記憶體存儲,位于記憶體中,用來儲存目前的資料操作,是以當資料儲存在WAL中之後,RegsionServer會在記憶體中存儲鍵值對。

<5>Region

Hbase表的分片,HBase表會根據RowKey值被切分成不同的region存儲在RegionServer中,在一個RegionServer中可以有多個不同的region。

本次的分享就到這裡了,受益的小夥伴或對大資料技術感興趣的朋友記得關注小菌喲(^U^)ノ~YO,點贊加關注,小白不迷路!!!