重溫大數據——Hbase部署以及架構分析

作者:攻城蝨
原文:https://blog.csdn.net/u011583316/article/details/84445735


Hbase



重溫大數據——Hbase部署以及架構分析


HBase是一個分佈式的、面向列的開源數據庫,該技術來源於 Fay Chang 所撰寫的Google論文“Bigtable:一個結構化數據的分佈式存儲系統”。就像Bigtable利用了Google文件系統(File System)所提供的分佈式數據存儲一樣,HBase在Hadoop之上提供了類似於Bigtable的能力。HBase是Apache的Hadoop項目的子項目。HBase不同於一般的關係數據庫,它是一個適合於非結構化數據存儲的數據庫。另一個不同的是HBase基於列的而不是基於行的模式。-- 百度百科


簡單的說HBase就是一個分佈式的可擴展的大數據量的非關係型數據庫(NoSQL)。它具有一般的關係型數據Oracle/MySQL的基礎功能如:

  • 存儲數據
  • 檢索數據
  • 查詢數據


Hbase能做的什麼

Hbase 作為一個非關係型數據庫,首先就是對數據的基礎的存儲,其次是可以提供傳統關係型數據庫達不到的億級數據量實時的查詢。

  • 海量數據的存儲
  • 海量數據的查詢


Hbase在上億的數據表裡能做到秒級別查詢(實時查詢)

Hbase使用場景


  • 交通數據
  • 賬單數據
  • 遊戲數據
  • 電商交易數據


一切大數據量的,對實時查詢依賴高的的場景都能解決。

Hbase在生態圈中的位置


圖中可見,Hbase是基於HDFS的,也就是說Hbase的數據是存儲在HDFS上面的,它可以很好地繼承MapReduce和Hive來進行數據的處理。



重溫大數據——Hbase部署以及架構分析



Hbase數據存儲方式存儲


Hbase是非關係型數據庫中典型的列式存儲數據庫



重溫大數據——Hbase部署以及架構分析



Hbase數據的組成元素


Hbase中數據是以字節數組進行存儲,不存在數據類型。默認數據三份(HDFS)並且每條數據有唯一的標識符。

rowkey + columnfamily(列蔟) + column01(列名) + timestamp(時間戳) : value (值) => cell (單元)


  • Row Key: 行鍵,Table的主鍵,Table中的記錄按照Row Key排序
  • Timestamp: 時間戳,每次數據操作對應的時間戳,可以看作是數據的version number
  • Column Family:列簇,Table在水平方向有一個或者多個Column Family組成,一個Column Family中可以由任意多個Column組成,即Column Family支持動態擴展,無需預先定義Column的數量以及類型,所有Column均以二進制格式存儲,用戶需要自行進行類型轉換。


為什麼Hbase能這麼快呢?


關鍵點在於表中rowkey的設計。


1、hbase是可劃分成多個region。

2、rowkey是排好序了的。

3、數據是按列存儲的。

  • 首先,能快速找到行所在的region(分區),假設表有10億條記錄,佔空間1TB, 分列成了500個region, 1個region佔2個G. 最多讀取2G的記錄,就能找到對應記錄
  • 其次,是按列存儲的,其實是列族,假設分為3個列族,每個列族就是666M, 如果要查詢的東西在其中1個列族上,1個列族包含1個或者多個HStoreFile,假設一個HStoreFile是128M, 該列族包含5個HStoreFile在磁盤上. 剩下的在內存中。
  • 再次,是排好序了的,你要的記錄有可能在最前面,也有可能在最後面,假設在中間,我們只需遍歷2.5個HStoreFile共300M
  • 最後,每個HStoreFile(HFile的封裝),是以鍵值對(key-value)方式存儲,只要遍歷一個個數據塊中的key的位置,並判斷符合條件可以了。 一般key是有限的長度,假設跟value是1:19(忽略HFile上其它塊),最終只需要15M就可獲取的對應的記錄,按照磁盤的訪問100M/S,只需0.15秒。 加上塊緩存機制(LRU原則),會取得更高的效率。


Hbase的數據模型



重溫大數據——Hbase部署以及架構分析




重溫大數據——Hbase部署以及架構分析



Hbase架構



重溫大數據——Hbase部署以及架構分析



圖中可見HDFS,Zookeeper。Hbase有多少個RS,其管理的內容都存在ZK的ZNode上面,ZK可以幫助用戶找到某張表在哪個RS,做一個檢索功能。架構的詳細,請往後面看。

Hbase安裝部署


  • 解壓安裝,不必多說
  • 配置hbase-env.sh 配置JDK



重溫大數據——Hbase部署以及架構分析



  • 配置hbase-site.xml 設置HDFS上hbase數據存儲目錄,



重溫大數據——Hbase部署以及架構分析



同時關閉默認ZK管理,由我們啟動自己安裝的ZK。註釋掉就行。

hbase-env.sh


重溫大數據——Hbase部署以及架構分析



# export HBASE_MANAGES_ZK=true

  • 修改 regionservers



重溫大數據——Hbase部署以及架構分析



* zookeeper
* namenode

* datanode
* HM


  • 訪問Web頁面 端口號60010



重溫大數據——Hbase部署以及架構分析



重溫大數據——Hbase部署以及架構分析


各個目錄的含義(官方文檔):

1./.tmp 這個目錄用來存儲臨時文件,當對錶進行操作的時候,首先會將表移動到該目錄下,然後再進行操作。 
2./WALs WAL意為Write ahead log用來做災難恢復。被HLog實例管理的WAL文件。
3./data hbase 的核心目錄,系統會預置兩個 namespace 即:hbase和default。/data/hbase 存儲了存儲了 HBase 的 namespace、meta 兩個系統級表。namespace 中存儲了 HBase 中的所有 namespace 信息,包括預置的hbase 和 default。/data/default/ 存儲所有用戶數據表/data/default/表名。

4./hbase.id 存儲集群唯一的 cluster id 號,是一個 uuid。
5./hbase.version 同樣也是一個文件,存儲集群的版本號,貌似是加密的,看不到,只能通過web-ui 才能正確顯示出來。 6./oldWALs 當/WALs 中的HLog文件被持久化到存儲文件中,不再需要日誌文件時,它們會被移動到/oldWALs目錄。


注意 :如果有需要的話就換hadoop的jar,替換Hadoop的版本。


重溫大數據——Hbase部署以及架構分析



Hbase Shell使用



重溫大數據——Hbase部署以及架構分析



  • list 查看錶
  • help ‘’查看幫助細節 help ‘create’
  • 創建表 create ‘user’,‘info’
  • 描述表 describe ‘user’
  • 插數據 put ‘user’,‘1001’,‘info:name’,‘xianglei’ (表名,rowkey,列蔟:列名,值)
  • 查看數據(三種方式)
  • 依據rowkey查詢,最快的
  • 從memstore寫到storefile flush ‘user’
  • 手動compact compact ‘user’


查看數據

get


重溫大數據——Hbase部署以及架構分析




重溫大數據——Hbase部署以及架構分析



範圍查詢(用的最多)

scan ‘user’,{STARTROW=>‘1002’}


重溫大數據——Hbase部署以及架構分析



全表掃描

scan

重溫大數據——Hbase部署以及架構分析


重溫大數據——Hbase部署以及架構分析


刪除數據

delete ‘user’,‘1001’,‘info:name’

deleteall ‘user’,‘1001’

刪除所有數據


重溫大數據——Hbase部署以及架構分析



刪除表

刪除前,必須先disable


重溫大數據——Hbase部署以及架構分析



表的啟用禁用

禁用


重溫大數據——Hbase部署以及架構分析



啟用


重溫大數據——Hbase部署以及架構分析



Hbase 物理模型


說說Hbase中數據存儲的物理模型。數據是怎麼在Hbase中存儲的。簡單來說是按rowkey來進行動態分區(region)存儲的。


細節說明:

重溫大數據——Hbase部署以及架構分析


重溫大數據——Hbase部署以及架構分析


重溫大數據——Hbase部署以及架構分析


重溫大數據——Hbase部署以及架構分析


每個columnfamily存儲在HDFS上的一個單獨文件中;Key 和 Version number在每個 column family中均由一份;空值不會被保存。


HBase數據寫入流程



重溫大數據——Hbase部署以及架構分析



put —> cell - wal(預寫日誌) -> hdfs- memstore(溢寫)- storefile -> hdfs


細節描述


  • Client通過Zookeeper的調度,向RegionServer發出寫數據請求,在Region中寫數據;
  • 數據被寫入Region的MemStore,知道MemStore達到預設閥值(即MemStore滿);
  • MemStore中的數據被Flush成一個StoreFile;
  • 隨著StoreFile文件的不斷增多,當其數量增長到一定閥值後,觸發Compact合併操作,將多個StoreFile合併成一個StoreFile,同時進行版本合併和數據刪除;
  • StoreFiles通過不斷的Compact合併操作,逐步形成越來越大的StoreFile;
  • 單個StoreFile大小超過一定閥值後,觸發Split操作,把當前Region Split成2個新的Region。父Region會下線,新Split出的2個子Region會被HMaster分配到相應的RegionServer上,使得原先1個Region的壓力得以分流到2個Region上。


可以看出HBase只有增添數據,所有的更新和刪除操作都是在後續的Compact歷程中舉行的,使得用戶的寫操作只要進入內存就可以立刻返回,實現了HBase I/O的高性能。

HBase數據讀取流程


數據讀取:先到memstore讀(沒有溢寫到)再到storefile最後合併。


細節描述

  • Client訪問Zookeeper,獲取.META.表信息;
  • 從.META.表查找,獲取存放目標數據的Region信息,從而找到對應的RegionServer;
  • 通過RegionServer獲取需要查找的數據;
  • RegionServer的內存分為MemStore和BlockCache兩部分,MemStore主要用於寫數據,BlockCache主要用於讀數據。讀請求先到MemStore中查數據,查不到就到BlockCache中查,再查不到就會到StoreFile上讀,並把讀的結果放入BlockCache。


尋址過程:client—>Zookeeper–>.META. 表–>RegionServer—>Region–>User Table—>client

Hbase Region理解



重溫大數據——Hbase部署以及架構分析



Hbase 架構細節


這張圖有一個缺陷就是,Hbase中一個Hlog是管理的一個HRegionServer的,不是一個HRegion。



重溫大數據——Hbase部署以及架構分析



Hbase讀取數據流程說明:


客戶端讀取數據首先連接ZK,他需要去ZK找到這個表(region)所在的位置。

這裡Zk存儲了下圖內容:

重溫大數據——Hbase部署以及架構分析


然後去meta表掃描信息,比如找到user的rowkey然後找到他對應的region,得到管理他的regionserver。

Master需要連接ZK是因為他需要知道哪些RS是活著的。

特殊說明:

  • 有幾個列蔟就有幾個Store,Store裡面有一個memstore和很多個storeFile。
  • Hlog存在的意義是,當集群突然掛掉memstore數據丟失後,當重啟機器時Hlog重新讀取文件系統的數據,並且恢復回來。



重溫大數據——Hbase部署以及架構分析



RS->一個RS對應一個目錄


meta-region-server

存儲meta表對應的region被哪個regionserver管理的信息


重溫大數據——Hbase部署以及架構分析



HBase新版本中,有了類似於RDBMS中DataBase的概念


重溫大數據——Hbase部署以及架構分析



命令空間

- 用戶自定義的表,默認情況下命名空間

default

- 系統自帶的元數據表的命名空間

hbase


重溫大數據——Hbase部署以及架構分析



總結


Hbase這一塊需要學習的內容很多很多。這一節主要就是說說Hbase的一些基礎特性,shell,以及Hbase的架構分析。內容雖然看著比較多,但是肯定也不全,暫時就記錄這麼多,如有需要再去看官方文檔。深入學習必不可少。


分享到:


相關文章: