26-hadoop-hbase簡介


hadoop的生態系統

 

1, hbase簡介

–HBase–HadoopDatabase,是一個高可靠性、高性能、面向列、可伸縮、實時讀寫的分布式數據庫
–利用HadoopHDFS作為其文件存儲系統,利用HadoopMapReduce來處理HBase中的海量數據,利用Zookeeper作為其分布式協同服務
–主要用來存儲非結構化和半結構化的松散數據(列存NoSQL數據庫)

  高可用; 多備份, 分布式

  高性能: 比mapreduce的性能高出許多

  面向列: 存儲模式是列族和列的存儲模型

  可伸縮: 集群可伸縮性

  實時讀寫: 可毫秒級的響應, 可做在線數據庫使用

  半結構化: 通過flume導入的都是半結構化的數據

2, hbase的數據模型

和關系型數據庫的對比, 按列存儲

關系型存儲模型: 

hbase存儲模型

 

1), rowkey: 相當於id

1, 決定一行數據 2, 按照字典順序排序 3, 只能存儲64k

因為每次存儲單元格時, rowkey都會被保存, 所以不要設置太大, 盡量為規則的數字最好, 長度相等

2), 列族(column family) , 列 (qualifier)

1, hbase中每個列都屬於某個列族, 列族必須作為表模式定義的一部分預先給出
2, 列名以列族為前綴, 每個列族有多個列成員, 新的列 (qualifier) 按需動態加入 3, 權限控制, 存儲及調優都是在列族層面進行的 4, hbase把同一列族的所有數據存儲在同一目錄下, 由幾個文件保存

使用注意:   列族一般控制在3個以內, 多了會影響效率

       一個列族可以包含百萬級別的列

3), Timestamp

1, hbase中每個cell存儲對同一份數據有多個版本, 根據時間戳來區分的, 不同版本按時間倒敘排列, 默認取最新的
2, 時間戳是64位整型
3, 時間戳可以由hbase賦值, 此時時間戳精確到毫秒
4, 時間戳可由客戶顯示復制, 如果程序要避免數據版本沖突, 必須生成唯一時間戳

4), hbase的Cell單元格 

1, 由行和列的坐標交叉決定 2, 單元格是有版本的, 一次存儲生成一個時間戳 3, 內容是未解析的字節數組

  由{rowkey,column(=<family> +<qualifier>),version}唯一確定的單元, cell中的數據都是字節碼形式

5), HLog( WAL log), 日志, 用來做數據恢復的

–HLog文件就是一個普通的HadoopSequence File,SequenceFile 的Key是HLogKey對象,
  HLogKey中記錄了寫入數據的歸屬信息,除了table和region名字外,
  同時還包括sequence number和timestamp,timestamp是” 寫入時間”,sequencenumber的起始值為0,
  或者是最近一次存入文件系統中sequence number。 –HLogSequeceFile的Value是HBase的KeyValue對象,即對應HFile中的KeyValue。

3, hbase的體系架構

client: 

 包含訪問hbase的接口並維護cache來加快對 hbase 的訪問

zookeeper

zookeeper自己的高可用, 通過zookeeper自己的選件機制進行的

1, 負責hbase節點的選取
2, client請求meta后, 根據存儲的region的尋址入口訪問具體的region
3, 實時健康那個regionserver的上線下線信息, 並通知master
4, 存儲hbase的schema和table的元數據

mater: 相當於namenode, 但不完全一樣, 不保存原數據信息

負責總體調度, 但元素據信息保存在zookeeper中

1, 分配region
2, regionserver的負載均衡 (region分裂后)
3, 發現失效的region server 並重新分配region
4, 管理用戶對table的增刪改操作

hMaster掛掉, 不會影響讀, 但會影響寫

regionServer: 相當於datanode

1, 維護region, 並處理region的io請求
2, 負責切分在運行過程中變得過大的region

region: 保存表的一部分(可能有多個region) 一個region由多個store組成,

1, HBase自動把表水平划分成多個區域(region),每個region會保存一個表里面某段連續的數據;
  每個表一開始只有一個region,隨着數據不斷插入表,region不斷增大,當增大到一個閥值的時候,region就會等分會兩個新的region(裂變);
2, 當table中的行不斷增多,就會有越來越多的region。這樣一張完整的表被保存在多個Regionserver上。

memstore: 內存中的臨時存儲

storefile: hdfs中存儲的文件,

一個store對應一個列族(CF), 一個region由多個sotre組成, 一個列族不只有一個store

1, store包括位於內存中的memstore和位於磁盤的storefile寫操作先寫入memstore,當memstore中的數據達到某個閾值,hregionserver會啟動flashcache進程寫入storefile,每次寫入形成單獨的一個storefile
2, 當storefile文件的數量增長到一定閾值后,系統會進行合並(minor、majorcompaction),在合並過程中會進行版本合並和刪除工作(majar),形成更大的storefile
3, 當一個region所有storefile的大小和超過一定閾值后,會把當前的region分割為兩個,並由hmaster分配到相應的regionserver服務器,實現負載均衡
4, 客戶端檢索數據,先在memstore找,找不到再找storefile

 

Hbase的數據模型

HRegion是HBase中分布式存儲和負載均衡的最小單元。最小單元就表示不同的Region可以分布在不同的HRegionserver上。
HRegion由一個或者多個Store組成,每個store保存一個columnsfamily。
每個Strore又由一個memStore和0至多個StoreFile組成。如圖:StoreFile以HFile格式保存在HDFS上

 

梳理:

訪問過程, client首先鏈接zookeeper, 然后轉接到HMaster, 返回具體的數據存儲節點HRegionServer, 每個regionserver有多個region, region包括一個HLog用來做數據恢復, 多個Store(對應一個列族), 每隔store包括一個內存文件存儲memstore, 存儲數據到達一定閾值以后, 存儲在文件 StoreFile中, storefile到達閾值后, 會進行合並, 一個region到達閾值后, 會分裂為2個, 所以一張表可能有多個region進行保存.

 

 系列來自尚學堂 極限班視頻  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM