大數據(HBase-應用場景、原理與基本架構)

Hbase概述

     HBase是一個構建在HDFS上的分佈式列存儲系統;數據庫

     HBase是Apache Hadoop生態系統中的重要一員,主要用於海量結構化數據存儲服務器

     從邏輯上講, HBase將數據按照表、行和列進行存儲。架構

Hbase是Hadoop生態系統的一個組成部分併發

Hbase與HDFS對比負載均衡

二者都具備良好的容錯性和擴展性,均可以擴展到成百上千個節點;分佈式

HDFS適合批處理場景
   不支持數據隨機查找
   不適合增量數據處理
   不支持數據更新高併發

Hbase表的特色oop

     大:一個表能夠有數十億行,上百萬列;大數據

     無模式:每行都有一個可排序的主鍵和任意多的列,列能夠根據須要動態的增長,同一張表中不一樣的行能夠有大相徑庭的列;spa

     面向列:面向列(族)的存儲和權限控制,列(族)獨立檢索;

     稀疏:對於空( null)的列,並不佔用存儲空間,表能夠設計的很是稀疏;

     數據多版本:每一個單元中的數據能夠有多個版本,默認狀況下版本號自動分配,是單元格插入時的時間戳;

     數據類型單一: Hbase中的數據都是字符串,沒有類型

行存儲與列存儲

   數據是按行存儲的
   沒有索引的查詢使用大量I/O 
   創建索引須要花費大量時間和資源

    數據是按列存儲-每一列單獨存放
    數據便是索引
    指訪問查詢涉及的列-大量下降系統I/O 
    每一列由一個線索來處理-查詢的併發處理
    數據類型一致,數據特徵類似-高效壓縮

 

Hbase數據模型

     HBase是基於Google BigTable模型開發的, 典型的key/value系統;

Hbase邏輯視圖

 

Rowkey與Column Family

 

Hbase基本概念

Row Key
  Byte array
  表中每條記錄的「主鍵」
  方便快速查找

Column Family
  擁有一個名稱(string)
  包含一個或者多個相關列

Column
  屬於某一個column family
  包含在某一列中
    familyName:columnName

Version Number
默認值系統時間戳

Value(cell)
  Byte array

Hbase數據模型

     HBase schema能夠有多個相似Table 
     每一個表可由多個Column Family組成
     Hbase能夠有Dynamic Column

version number 可由用戶提供
   無需以遞增的順序插入
Table可能很是稀疏
   不一樣的cell能夠擁有不一樣的列
Row Key是主鍵

Hbase與支持的操做

全部操做均是基於rowkey的;
支持CRUD(Create、Read、Update和Delete)和Scan;
單行操做
   put
   get
   scan
多行操做
   Scan
   Multiput
沒有內置join操做,可以使用MapReduce解決
 

Hbase物理模型

  每一個column family存儲在HDFS上的一個單獨文件中;
  Key 和 Version number在每一個 column family中均由一份;
  空值不會被保存。
  Hbase爲每一個值維護了多級索引

一個實例

物理存儲

一、 Table中的全部行都按照row key的字典序排列;
二、 Table 在行的方向上分割爲多個Region;

三、 Region按大小分割的,每一個表開始只有一個region,隨着數據增多, region不斷增大,當增大到一個閥值的時候,region就會等分會兩個新的region,以後會有愈來愈多的region;

4 、 Region是HBase中分佈式存儲和負載均衡的最小單元。不一樣Region分佈到不一樣RegionServer上;

5 、 Region雖然是分佈式存儲的最小單元,但並非存儲的最小單元
   Region由一個或者多個Store組成,每一個store保存一個columns family
   每一個Store又由一個memStore和0至多個StoreFile組成;
   memStore存儲在內存中, StoreFile存儲在HDFS上。

 

HBase架構

 

Hbase基本組件

Client
   包含訪問Hbase的接口,並維護cache來加快對Hbase的訪問
ZooKeeper
   保證任什麼時候候,集羣中只有一個master
   存貯全部Region的尋址入口
   實時監控Region server的上線和下線信息。並實時通知給Master
   存儲HBase的schema和table元數據
Master
   爲Region server分配region
   負責Region server的負載均衡
   發現失效的Region server並從新分配其上的region
   管理用戶對table的增刪改查操做
Region Server
   Region server維護region,處理對這些region的IO請求
   Region server負責切分在運行過程當中變得過大的region
 

Zookeeper做用

HBase 依賴ZooKeeper
默認狀況下, HBase 管理ZooKeeper 實例
   好比, 啓動或者中止ZooKeeper
Master與RegionServers啓動時會向ZooKeeper註冊
Zookeeper的引入使得Master再也不是單點故障

Write-Ahead-Log( WAL)

Hbase容錯性

Master容錯: Zookeeper從新選擇一個新的Master
   無Master過程當中,數據讀取仍照常進行;
   無master過程當中, region切分、負載均衡等沒法進行;
RegionServer容錯:定時向Zookeeper彙報心跳,若是一旦時間內未出現心跳
   Master將該RegionServer上的Region從新分配到其餘RegionServer上;
   失效服務器上「預寫」日誌由主服務器進行分割並派送給新的RegionServer
Zookeeper容錯: Zookeeper是一個可靠地服務
   通常配置3或5個Zookeeper實例。

Region定位

尋找RegionServer
   ZooKeeper
   -ROOT-(單Region)
   .META.
   用戶表

-ROOT-表與.META.表

-ROOT-
   表包含.META.表所在的region列表,該表只會有一個Region;
   Zookeeper中記錄了-ROOT-表的location。
 .META.
   表包含全部的用戶空間region列表,以及 RegionServer的服務器地址。

 

HDFS與Hbase比較

 

關係數據庫與Hbase比較

 

什麼時候使用Hbase

     需對數據進行隨機讀操做或者隨機寫操做;
     大數據上高併發操做,好比每秒對PB級數據進行上千次操做;
     讀寫訪問均是很是簡單的操做。

什麼公司在使用Hbase

    國外有facebook,twitter,yahoo等 國內有阿里巴巴,百度,360等一些公司

Hbase在淘寶的應用

交易歷史記錄查詢系統    百億行數據表,千億級二級索引表    天天千萬行更新    查詢場景簡單,檢索條件較少    關係型數據庫所帶來的問題    基於userId+time+id rowkey設計    成本考慮

相關文章
相關標籤/搜索