Hbase入門(一)——Hbase簡介

一、應用場景及特點

1. HBase能做什麼

海量數據存儲(百億*百萬)

準實時查詢(百毫秒查詢)-->1秒內完成查詢

2. 實際業務場景中的應用

交通:長江航道中船舶的GPS信息;路口攝像頭違章拍照

金融:存取款,借還款

電商:淘寶-》訂單,物流,瀏覽記錄

移動端:通話記錄等等

3.特點

海量存儲:(百億*百萬)傳統數據(單表500w,30列)

面向列:動態增加列;存儲和權限控制面向列--》只需要少數幾個字段的話,大大減少讀取的數據量

多版本:每一列的數據存儲有多個Version

稀疏性:爲空的列不佔用存儲空間,表可以很稀疏

擴展性:線性擴展,隨着數據量增多可以通過節點擴展進行支撐

高性能:

①底層LSM數據結構和Rowkey有序排列等架構上的獨特設計,使得HBase具有非常高的寫入能力。

②region切分、主鍵索引和緩存機制使得Hbase在海量數據下具備一定的隨機讀取性能,改性能針對Rowkey的查詢能夠到達毫秒級別

高可靠性:

4.優勢

不同點

傳統數據庫

Hbase

海量存儲

500w*30時健康

百億*百萬

安全

不自帶備份

數據存儲在hdfs上,備份機制健全

準實時查詢

數據達到一定數量開始緩慢,很大的話基本無法支撐

通過zookeeper協調查找數據,訪問速度快

存儲方式

行存儲

列存儲

動態增加列

存儲和權限控制面向列

只需要少數幾個字段的話,大大減少讀取的數據量

數據較大時候的切分

人工第三方插件

自動(Region),也支持手動指定Region

高併發讀寫

支持

不支持

5.劣勢

只支持rowkey匹配查詢,不支持條件查詢等複雜查詢

二、概念以及在Hadoop生態中的定義

1. HBase簡介

HBASE是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用HBASE技術可在廉價PC Server上搭建起大規模結構化存儲集羣。

HBASE的目標是存儲並處理大型的數據,更具體來說是僅需使用普通的硬件配置,就能夠處理由成千上萬的行和列所組成的大型數據。

HBASE是Google Bigtable的開源實現,但是也有很多不同之處。

不同點

Google Bigtable

HBASE

文件存儲系統

GFS

Hadoop HDFS

協同服務

Chubby

Zookeeper

相同點

都採用Hadoop MapReduce來處海量數據

 

2. 概念介紹

1.1 Cell

由{row key,columnFamily,version} 唯一確定的單元。HBASE中通過rowkey和columns確定的爲一個存儲單元稱爲cell

cell中的數據是沒有類型的,全部是字節碼形式存儲。

關鍵字:無類型、字節碼

1.2 HRegionServer管理一系列HRegion(每個HRegion對應了Table中的一個Region)

HRegion中由多個HStore組成(每個HStore對應了Table中的一個Column Family的存儲)——可以看出每個ColumnFamily其實就是一個集中的存儲單元,因此最好將具備共同IO特性的column放在一個Column Family中,這樣最高效。

HStore存儲時HBas存儲的核心了,其中由兩部分組成,一部分是MemStore,一部分是StoreFiles。MemStore*是Sorted Memory Buffer,

①用戶寫入數據首先會放入MemStore,

②當MemStore滿了以後會flush成一個*StoreFile(底層是HFile)

③當StoreFile文件數增長到一定閾值,會觸發Compact合併操作,將多個StoreFile合併成一個StoreFile,合併過程中會進行版本合併和數據刪除,因此可以看出HBase其實只有增加數據,所有的更新和刪除操作都是後續的compact過程中進行的,這使得用戶的寫操作只要進入內存中就可以立刻返回,保證了HBase IO的高性能

④當StoreFiles Compact後,會逐步形成越來越大的StoreFile,當單個StoreFile大小超過一定的閾值後,會觸發Split操作,同時,會把當前的Region Split成2個Region,父Region會下線,新Split出的2個孩子Region會被HMaster分配到響應的HRegion Server上,使得原先1個Region的壓力得以分流道2個Region上

1.3 Hlog

HStore在系統正常工作的前提下是沒有問題的,但是在分佈式系統環境中,無法避免系統出錯或者宕機,一次一旦HRegion Server意外退出,MemStore中的內存數據將會丟失,這就需要引入HLog了

每一個HRegionServer中都有一個HLog對象,HLog是一個實現Write Ahead Log的類,在每次用戶操作寫入MemStore的同時,也會寫一份數據到HLog文件中,HLog文件定期會滾動出新的,並刪除舊的文件,當HRegionServer意外終止後,HMaster會通過Zookeeper感知到,HMaster首先會處理遺留的HLog文件,將其中不同Region的Log數據進行拆分,分別放到相應Region的目錄下,然後再將失效的Region重新分配,領取到這些Region的HRegionServer在LoadRegion過程中,會發現有歷史HLog需要處理,因此會Replay HLog中的數據到MemStore中,然後flush到StoreFiles,完成數據恢復。

1.4 ROOT表和META表

HBase中有兩張特殊的Table,-ROOT-和.META.

l .META.:記錄了用戶表的Region信息,.META.可以有多個regoin

l -ROOT-:記錄了.META.表的Region信息,-ROOT-只有一個region

用戶表的Regions元數據被存儲在.META.表中,隨着Region的增多,.META.表中的數據也會增大,並分裂成多個Regions。爲了定位.META.表中各個Regions的位置,把.META.表中的所有Regions的元數據保存在-ROOT-表中,最後由Zookeeper記錄-ROOT-表的位置信息。所有客戶端訪問用戶數據前,需要首先訪問Zookeeper獲得-ROOT-的位置,然後方位-ROOT-表獲得.META.表的位置,最後根據.META.表中的信息確定用戶數據存放的位置,-ROOT-表永遠不會被分割,它只有一個Region,這樣可以保證最多需要三次跳轉就可以定位任意一個Region。爲了加快訪問速度,.META.表的Regions全部保存在內存中,如果.META.表中的每一行在內存中佔大約1KB,且每個Region限制爲128M,下圖中的三層結構可以保存Regions的數目爲(128M/1KB)*(128/1KB)=2^34個。

1.5 Zookeeper:

Zookeeper Quorum存儲-ROOT-表地址、HMaster地址

HRegionServer把自己以Ephedral方式註冊到Zookeeper中,HMaster隨時感知各個HRegionServer的健康狀況

Zookeeper避免HMaster單點問題

Zookeeper的主要作用:客戶端首先聯繫ZooKeeper子集羣(quorum)(一個由ZooKeeper節點組成的單獨集羣)查找行健。上述過程是通過ZooKeeper獲取含有-ROOT-的region服務器名(主機名)來完成的。通過含有-ROOT-的region服務器可以查詢到含有.META.表中對應的region服務器名,其中包含請求的行健信息。這兩處的主要內容都被緩存下來了,並且都只查詢一次。最終,通過查詢.META服務器來獲取客戶端查詢的行健數據所在region的服務器名。一旦知道了數據的實際位置,即region的位置,HBase會緩存這次查詢的信息,同時直接聯繫管理實際數據的HRegionServer。所以,之後客戶端可以通過緩存信息很好地定位所需的數據位置,而不用再次查找.META.表。

1.6 master

爲HRegionServer分配HRegion

平衡RegionServer的負載,使各個RegionServer管理的region個數大致相等

發現失效的RegionServer並重新分配失效上面的region到別的Regionserver

處理Schema更新請求(建表、刪表)

1.7

注意:region雖然是分佈式存儲的最小單元,但並不是存儲的最小單元。region是由一個或者多個store組成的,每個store就是一個column family。每個store又由memStore和1至多個store file 組成(memstore到一個閥值會刷新,寫入到storefile,有hlog來保證數據的安全性,一個regionServer有且只有一個hlog)  

 

2. 選擇合適的版本

官方版本:http://archive.apache.org/dist/hbase/

CDH版本:http://archive.cloudera.com/cdh5/

三、Hbase架構服務體系與設計模型

1. 服務體系:服務包含哪些進程,進程與進程之間的關係,以及hbase在生態中的關係)

 

RegionServer向Master彙報:

①健康狀態②管理哪些Region(表大的時候進行分區,一個分區就是一個Region)

注意:Zookeeper也知道RegionServer的以上信息

2. 設計模型:表結構模型 和 表數據模型

表結構模型

建表時候定列簇,不用定列

數據模型

  • 一張表的列簇不會超過5個
  • 每個列簇的列數沒有限制
  • 列只有插入數據後存在
  • 列在列簇中是有序的

四、安裝部署

參照《HBase安裝部署》

1. 先決條件

  • JDK1.7 +
  • Hadoop-2.5.0 +
  • Zookeeper-3.4.5 +

五、HBase shell使用

參照《HBase遠程連接+常用命令》

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章