您好,登錄后才能下訂單哦!
好程序員大數據學習路線Hbase總結,為什么有hbase
隨著數據的逐漸增大,傳統的關系型數據庫無法滿足對數據的查詢和存儲,而hive不是數據庫,只是數據倉庫,雖然能夠滿足簡單的存儲要求,但是始終無法滿足對非結構化和半結構化的數據的存儲和查詢
?
2hbase是什么
Hbase是阿帕奇旗下的一款開源的,多版本的,可擴展的非關系型數據庫。
他是基于谷歌的bigtable的基礎上,建立在hdfs上的一款提供高?可靠性的,高性能的列式存儲,可伸縮,實時讀寫的nosql的數據庫系統
?
3適用場景
?????海量數據存儲
?????隨機實時讀寫和管理數據
?
4特點
??????列式存儲
??????模式:無模式(不需要use gp1808,就可以直接創建表了,所以導致hbase中的表是不可以重名的)
??????數據類型:單一的byte[]
??????多版本(version):每個值都可以有多個版本
??????稀疏存儲:如果kv為null,則不占用存儲空間
?
5結構框架
?
Client:
hbase的客戶端,包含訪問的hbase的接口(linux shell ,java api)
?????維護一些cache(緩存)來加速hbase的速度,比如region的位置信息
?
Zookeeper:
???????監控hmaster的狀態,保證有且只有一個active的hmaster,達到高可用
???????存儲所有的region的尋址入口,
???????實時監控hregionserver的狀態,將regionserrver的上下線信息實時通知給hmaster
???????存儲hbase的所有表的信息(hbase的元數據)
?
Hmster(hbase的老大)
?????為regionserver分配region(新建表)
?????負責regionserver的負載均衡
?????負責region的重新分配(處理hregionserver異常,hregion裂變)
?????Hdfs上的垃圾文件回收
?????處理schema的更新請求
?
Hregionserver(hbase的小弟) ??
?????維護老大給他的region(管理本機上的region)
?????處理client對region的IO請求,并和hdfs交互
?????Regionserver負責切分在運行過程中變大的region
?
Hregion:
?????Hbase中分布式的存儲和負載的最小單元,表或者是表的一部分
(在HBase中數據按主鍵排序,同時表按主鍵劃分為多個Region
Region按大小分割的,隨著數據增多,Region不斷增大,當增大到一個閥值的Region就會分成兩個新的Region)
Region雖然是分布式存儲的最小單元,但并不是存儲的最小單元。每個Region包含著多個Store對象。每個Store包含一個MemStore或若干StoreFile,StoreFile包含一個或多個HFile。MemStore存放在內存中,StoreFile存儲在HDFS上。
Hlog;
?????對hbase的操作進行記錄,使用wal(Write-Ahead-Log)寫數據,優先寫入log,然后再寫入memstore,以防數據丟失時可以進行日志回滾回復數據
Store:
??????相當于一個列簇。
?
Memstore:128M
???????內存緩沖區,用于將數據批量刷新到hdfs上
?
Hstorefile(hfile)
???????Hbase中的數據是以hfile的形式存儲到hdfs上
?????
寫流程:
1client通過zookeeper的調度,向regionserver發出寫數據請求,在region中寫數據
2數據被寫入region的memstore,直達memstore達到預設的閾值(128M)
3memstore中的數據被flush成一個storefile
4隨著storefile文件的不斷增多,當其數量增長到一定閾值的時候,觸發了compact合并操作,將多個storefile合并成一個storefile,同時進行版本合并和數據刪除
5storefiles通過不斷的compact合并操作,逐漸形成越來越大的storefile
6單個storefile大小超過一定閾值之后,觸發spilt操作,把當前的region切分成2個新的region,父region會下線,新切出的2個字region會被hmaster分配到相應的regionserver上,使得原先的一個region的壓力的以分配到2個region上
?
讀流程:
1client訪問zookeeper,查找root表,獲取meta表的信息
2從meta表中查找,獲取存放的目標的region信息,從而找到對應的regionserver
3通過regionserver獲取需要查詢的數據
4regionserver的內存分為memstore和blockcache兩部分,memstore主要用于寫數據,blockcache主要用于讀數據,請求先到memstore中查數據,查不到就在blockcache在查,再查不到就會到storefile上讀,并把讀的結果放入blockcache
?
尋址過程:client-->Zookeeper-->-ROOT-表-->.META.表-->RegionServer-->Region-->client
Rowkey:行鍵,和mysql的主鍵一樣,不允許重復,按照字典順序排列
Columnfamily:列簇
Column:列
Timestamp:時間戳,默認顯示最新的時間戳
Version:版本號,記錄數據的版本
Cell:單元格,一個key?一個value
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。