HBase簡介(一)

HBase屬於列式非關係型婁據庫(NoSQL),在介紹HBse則先了解NoSQL。
 
 
一、關於NoSQL
 
什麼是NoSQL?
NoSQL(Not Only SQL),它是一個通用的述語,也就是非關係型數據庫,它並不是以sql作爲它的主要訪問語言。
現在有比較多的NoSQL數據庫,BerkeleyDB是一個本地NoSQL數據庫;HBase是一個分佈式數據庫(從技術上說它是一個數據存儲而不是數據庫)
 
NoSQL產生的主要背景
隨着互聯網的發展,傳統的關係型數據庫在應付超大規模和高併發的系統上已經“力不從心”,而非關係型數據庫則在這一方面有優勢。
 
NoSQL數據庫的分類
  1. 鍵值(Key-Value)存儲數據庫
        它是以鍵值對的格式進行存儲的,類似於Java中的Map,在數據庫中有一個特定的key鍵和鍵所指向的value值。
        優勢:簡單且易於部署,可以把程序中的數據直接映射到數據庫中,使得程序中的數據和數據庫中的數據存儲方式很相近。如:Redis
  1. 列存儲數據庫
        傳統的關係型數據庫是按行進行存儲的,而列數據庫則是每一列單獨存儲。
        優勢:僅僅查詢所需要的列,可以大大提高查詢的速度。如:HBase
  1. 文檔型數據庫
        這種類型數據庫與鍵值存儲類似,這個類型的數據模型是把內容按照某些特定的格式進行存儲(如:JSON格式)。如:MongoDB
  1. 圖形數據庫
        它與關係型數據庫和列式數據庫不同,它是基於靈活的圖型模型,並且可以擴展到多個服務器上
 
NoSQL數據庫的應用
主要應用於如下場景:
  1. 數據量大、數據模型比較簡單
  2. 對數據庫的性能要求比較高,需要節省開發及維護成本
  3. 不需要高度的數據一致性
  4. 對於給定的吸,比較容易映射覆雜值的環境,數據之間關係性不強
 
關係型數據庫與非關係型數據庫的區別
 
對比項
關係型數據庫
非關係型數據庫
成本
相對非關係型數據庫可能存在軟件購買費用
易於部署
基本是開源軟件
查詢速度
查詢速度慢(存儲於硬盤中)
查詢速度快(存儲於緩存中)
數據格式
基礎類型
key-value形式、文檔形式、圖形形式……
可以存儲基礎類型、對象、集合……
擴展性
有類似join這樣的多表查詢機制限制,擴展難
擴展相對容易
 
二、HBse簡單介紹
       HDFS是大型數據集分析處理的文件系統,具有高延遲的特點,它傾向於讀取整個數據集而不是指定的某個記錄,因而在處理低延的用戶請求時,HBase則爲更好的選擇,它可以實現某條數據的快速定位,提供實時的讀寫功能。
 
HBase:HadoopDataBase,一個基於HDFS和Zookeeper的列式數據庫。是一個高可靠、高性能、面向列、可伸縮、實時讀寫的分佈式數據庫。
HBase利用HDFS作爲它的文件存儲系統;利用基於YARN的MapReduce處理HBase的海量數據;利用Zookeeper作爲其分佈式協同服務。
它主要用來存儲非結構化和半結構化的鬆散數據
注意:並不是所有的情況都適用於HBase。
  1. 當數據量達到數億或數十億則是一個好的選擇,原因是當數據量不大時,所有的數據可能在HBase的單個節點上,而其它的集羣則可能處於空閒的狀態。
  2. HBase並沒有RDBMS所提供的索引、事務、高級查詢語言等功能,不可以把RDBMS構建的應用直接移植到HBase上
 
HBase的數據模型
HBase的數據模型主要包含:行鍵、列族、時間戳、單元格、HLog(WAL log)
  1. 行鍵(Row Key)
        行鍵是一個字節數組,任何的字符串都可以作爲行鍵,注意:行鍵只可以存儲64KB的字節數據。要對錶進行訪問,需要通過行鍵進行。
  1. 列族/列標籤
        HBase中的每個列都是歸屬於某個列族的,列表則以列族作爲前綴,每個列族都可以有多個列成員,通過列標籤來表示,新的列族成員可以動態增加。HBase中會把同一列族裏面的數據存儲在同一目錄下,在幾個文件中保存。
  1. 時間戳
        HBase中的每個cell存儲單元,會以同一份數據存儲多個版本,HBase引入時間戳區分每個版本之間的差異,時間戳的類型是64位整數,不同版本的數據根據時間戳倒序排序。時間戳可以在HBase寫入數據時自己動賦值也可以由客戶指定顯示賦值。
  1. 單元格
        它的內容是沒有解析的字節數組。由行和列座標交叉決定,同時單元格是有版本的,數據沒有數據類型的都是由二進制字節碼形式存儲。
 
HBase體系架構及組件
 
如下圖爲HBase的體系架構圖
 
 
  1. Zookeeper
        這個組件主要用來存儲HBase的Schema和Table元數據,它可以保障在任何時間,集羣中只有一個Master。同時來存儲所有Region的尋址入口,進行實時監控RegionServer的上線和下線信息,並且實時通知HMaster
  1. HMaster
        它類似於HDFS中的NameNode,它的主要作用是爲RegionServer分配Region,同時負責RegionServer的負載均衡。它也會管理用戶對Table的增、刪、改操作
  1. ​HRegionServer
        它類似於HDFS中的DataNode,它負責維護Region,處理對Region的I/O請求。同時會負責切分在運行過程中變得過大的Region
  1. ​Client
        它包含了訪問HBase的接口,同時維護Cache來加快對HBase的訪問性能。
  1. ​Region
        Region是HBase中分佈式存儲和負載均衡的最小單元。HBase會自動把表水平切分爲多個區域,也就是多個Region,每一個Region會保存一個表裏某段連續的數據。每個表一開始只有一個Region,當數據越來越多從而達到一個閥值的時候,這個Region會等分成兩個Region(這個過程也稱爲裂變)
  1. ​MemStore和StoreFile
        一個Region會由多個Store組成,一個Store包含內存中的MemStore和磁盤StoreFile
 
HBase的執行原理
從上面的圖可以看到,一個Table包含了多個Region,每一個Region又包含了多個Store,同時每個Store又由一個MemStore和0至多個StoreFile組成。
StoreFile是以HFile的格式保存在HDFS上的
寫入操作的執行
  1. 把數據寫入到MemStore中
  2. 當MemStroe中的數據達到一定的閥值時,HRegionServer啓動FlashCache進程寫入StoreFile,每次寫入會形成一個單獨的StoreFile
  3. 當StoreFile文件數量達到一定閥值時,系統會進行合併,在合併過程中會進行版本合併和刪除工作,形成更大的StoreFile
  4. 當一個Region中所有的StoreFile大小之和超過一定閥值時,會把當前的Region分割爲兩個,並由HMaster分配到相應的RegionServer服務器上,以實現負載均衡
查找數據
        會先從MemStroe中查找,如果從MemStore中找不到數據,會再從StoreFile上查找
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章