1. 程式人生 > 其它 >關閉頁面向後臺傳送訊息

關閉頁面向後臺傳送訊息

適用場景

HBase支援海量資料儲存。適合寫密集型應用,每天寫入量巨大,而相對讀數量較小的應用
不需要複雜查詢條件來查詢資料的應用,HBase只支援基於rowkey的查詢
對效能和可靠性要求非常高的應用,由於HBase本身沒有單點故障,可用性非常高
HBASE與關係型資料庫
  MySQL:關係型資料庫,行式儲存,主要面向OLTP,支援事務,支援二級索引,支援SQL,支援主從。
  Hbase:基於HDFS,支援海量資料讀寫(尤其是寫),面向列的分散式NoSql資料庫,適合OLAP業務。天然分散式,主從架構,不支援事務,不支援二級索引,不支援sql。不能支援條件查詢,只支援按照Row key來查詢。

HBASE與Hive
  Hive和Hbase是兩種基於Hadoop的不同技術–Hive是一種類SQL的引擎,並且執行MapReduce任務,HBASE是一種面向列的、在HDFS之上的NoSQL 的Key-value資料庫。Hive適合用來對一段時間內的資料進行分析查詢。表在HBase中是物理表,而不是邏輯表,提供一個超大的記憶體hash表,搜尋引擎使用它來儲存索引,以滿足查詢的實時性需求,Hive本身不儲存和計算資料,它完全依賴於HDFS和MapReduce,Hive中的表純邏輯,Hive不應該用來進行實時的查詢。Hive和Hbase有各自不同的特徵:Hive是高延遲、結構化和麵向分析的,Hbase是低延遲、非結構化和麵向程式設計的。

HBASE表結構

 HBASE表結構:建表時,不需要限定表中的欄位,只需要指定若干個列族。插入資料時,列族中可以儲存任意多個列(k-v,列名-列值)。HBASE去更改一個欄位的時候,不會把原來的值給刪除掉,而是通過版本號去區分。要查詢某一具體欄位的值,需要指定表名->行鍵->列族(ColumnFamily):列名(Qualifier)->版本。
  與nosql資料庫一樣,row key是用來檢索記錄的主鍵。訪問HBASE table中的行,只有三種方式:
 1)通過單個row key訪問
 2)通過row key的range
 3)全表掃描
  在HBASE內部,row key儲存為位元組陣列。儲存時,資料按照row key的字典序(byte order)排序儲存。設計key時,要充分利用排序儲存這個特性,將經常一起讀取的行儲存放到一起。
  Cell是由(row key,columnFamily,version)唯一確定的單元。cell中的資料是沒有型別的,全部是位元組碼形式存貯。每個cell中都儲存著同一份資料的多個版本。版本通過時間戳來索引。每個cell中,不同版本的資料按照時間戳排序,即最新的資料排在最前面。為了避免資料存在過多版本造成的管理(包括存貯和索引)負擔,HBASE提供了兩種資料版本回收方式,一是儲存資料的最後n個版本,二是儲存最近一段時間內的版本。

HBASE叢集架構及表儲存機制HBASE將一個使用者的資料分為很多的Region,Region是分散式儲存的,存放在不同的Region Server上。Region Server會把Region中的資料形成一些檔案HFile,存在HDFS中。Region Server物理上通常跟DataNode在一臺機器上,可以免除網路傳輸。

HBASE表的若干行就是一個region,每個region有一個起始行鍵、終止行鍵。還有一個系統表(META表)不需要我們建,META表的行鍵:表-行鍵範圍,value:主機(192.168.1.35)。然後還會有一個Root表,存在region server上(凡是表都存在region server上),在zookeeper中存放root表的資訊。HBASE依賴Zookeeper儲存Hmaster的地址和backup-master地址。儲存表-ROOT-的地址。HMaster用於管理HregionServer;做增刪該查表的節點;管理HregionServer中的表分配。
  如果要查詢table_1第10020010行資料,先去Zookeeper上找到/hbase/ROOT,然後找到ROOT表裡的某一行,就能定位到META表的Region,定義到Region再從META表的行鍵找到某一行,找到某一臺主機,再找某一個Region,再找Region Server就可以把某一行拿到。這個就是它的定址——三級機制。定址的過程,客戶端去查資料之後,並不用每次都去找,客戶端會把找過一次的路徑快取起來,如果下次找的還是同樣的region則直接找region server,因為查資料經常會查一些連續的資料。
  Hlog記錄了一些對錶的最新操作。一個region在region server中存成很多store,一個store對應一個列族。每一個store不光存了檔案,還有一個MemStore,會把訪問頻次較高或最熱的資料放在MemStore中。這樣查詢的時候就不用讀取磁碟檔案,在記憶體中就可以。關鍵是把大量的hot資料放在MemStore中,所以它才能支援高速的隨機訪問。

寫流程:
 1、client向HRegionserver傳送寫請求
 2、HRegionserver將資料寫到HBlog(write ahead log)。為了資料的持久化和恢復
 3、HRegionserver將資料寫到記憶體(Memstore)
 4、反饋client寫成功
資料更新過程:
 1、當Memstore資料達到閾值(預設是64M),將資料刷到硬碟,將記憶體中的資料刪除,同時刪除HLog中的歷史資料,並將資料儲存到HDFS中
 2、在HLog中做標記點
資料合併過程:
 1、當資料快達到4塊,HMaster將資料塊載入到本地,進行合併
 2、當合並的資料超過256M,進行拆分,將拆分後的region分配給不同的HRegionServer管理
 3、當HRegionServer宕機後,將HRegionServer上的HLog拆分,然後分配給不同的HRegionServer載入,修改_META_
 4、注意:HLog會同步到HDFS
HBASE的讀流程
 1、通過ZooKeeper和_ROOT_,_META_表定位HRegionServer
 2、資料從記憶體和硬碟合併後返回給client
 3、資料塊會快取
  HMaster的職責是管理使用者對Table的增、刪、改、查操作;記錄region在哪臺HRegionServer上;在Region Split後,負責新Region的分配;新機器加入時,管理HRegionServer的負載均衡,調整Regions分佈;在HRegionServer宕機後,負責失效HRegionServer上的遷移。HRegionServer主要負責響應使用者I/O請求,向HDFS檔案系統中讀寫資料,是HBASE中最核心的模組。HRegionServer管理了很多table的分割槽,也就是region。HBASE client使用HBASE的RPC機制與HMaster和RegionServer進行通訊。管理類操作——client與HMaster進行RPC;資料讀寫類操作:client與HRegionServer進行RPC。

HFile儲存格式
HFile是HBase儲存資料的檔案組織形式。HFile檔案的特點:
1)HFile由DataBlock、Meta資訊(Index、BloomFilter)、Info等資訊組成
2)整個DataBlock由一個或者多個KeyValue組成
3)在檔案內按照Key排序

HFile V1的資料組織格式:
HFile內容是按照從上到下的順序寫入的(Data Block、Meta Block、File Info、Data Block Index、Meta Block Index、Fixed File Trailer)。如下圖所示:

HFile V1的資料格式在0.92版本升級到V2版本,HFile V2的資料組織格式如下圖所示:

與V1版本的相比,它的區別在於
1)檔案分為三部分:Scanned block section,Non-scanned block section以及Opening-time data section
2) 為DataBlockIndex建立多層索引。DataBlockIndex分為Leaf Index Block、Root Data Index,Leaf index block具體儲存了DataBlock的offset、length、以及firstkey的資訊。RootDataIndex 儲存的是每個Leaf index block的offset、length、Leaf index Block記錄的第一個key以及截至到該Leaf Index Block記錄的DataBlock的個數。假定DataBlock的個數足夠多,HFile檔案又足夠大的情況下,預設的128KB的長度的ROOTDataIndex仍然存在超過chunk大小的情況時,會分成更多的層次。這樣最終的可能是ROOT INDEX –> IntermediateLevel ROOT INDEX(可以是多層) —〉Leaf index block
在ROOT INDEX中會記錄Mid Key所對應的資訊,幫助在做File Split或者折半查詢時快速定位中間Row的資訊。