日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

对HBase整个框架的理解

發布時間:2024/3/7 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对HBase整个框架的理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? HBase是一個分布式的、可擴展的、高容錯性的,可以用于存儲海量數據的數據庫,對于存儲半結構化、非結構化數據優勢明顯。

相比于傳統的數據庫,HBase有以下幾點優勢:

1.傳統的數據庫比如mysql,是以行存儲的,數據一行一行的存儲,如果要讀出數據中的某一列,就必須讀出一整行的數據,如果每一行的數據非常的大那么則會讀出很多不必要的數據。HBase是基于列存儲的數據庫,每一列的數據是存儲在一起的,HBase的列族數量是固定的,但是HBase的列的數量是可以隨意增長的,這就意味著如果在存儲某行數據的時候需要添加一個新的列,直接指定某列加入到某個列族,然后存入數據就行了,這是因為在HBase里面查找一條指定的數據是通過鍵值對應來查找的,鍵為<rowkey,column family,column ,timestamp>,值為數據.

????????

2.傳統的數據庫中,如果某一行的值沒有指定一般會指定默認值或者設置為空值,這樣會造成存儲空間的浪費,而在HBase中,沒有值的列就不存儲任何值,節省了很多空間。

3.HBase是可以動態擴展的,如果存儲空間不夠了,只需要在集群里面添加新的服務器即可,而傳統的數據庫還需要做很多的額外工作。HBase在某個表行的數量過多的時候會自動拆分成多個Region,而在傳統數據庫中這些操作只能認為的指定。

???????? 4.HBase更新值并不會立即刪除之前的值,所以可以保存多個版本的歷史值。

但是HBase也有一些缺點:

1.?????? HBase 寫入的時候使用會先將數據寫入緩存當中,這樣做的效果就是寫入一條數據非常的快,但是造成的損失就是讀性能降低,因為讀數據的時候會在內存和文件系統中同時查找要查詢的數據是否存在,然后對查詢的結果進行合并,最后的結果將返回給用戶。當然HBase提供了一個小的解決方案就是,在RegionServer上設置block cache來緩存用戶讀取的數據,block cache緩存使用的換入換出算法是LRU,這樣能夠保證經常讀取的數據能保存在內存中比較久。

2.?????? HBase需要使用很大的內存,所以對gc來說很麻煩。

?

HBase的架構如下:


Zookeeper 的主要作用是:

1.?????? 進行選舉保證集群中只有一個Mater。

2.?????? 將Region Server的上下線信息通知Master

3.?????? 存儲-ROOT-表的尋址入口

4.?????? 存儲HBase的schema,包括有哪些表和每個表有哪些列族

Master的主要作用是:

1.?????? 負責給Regoin Server分配Region

2.?????? 負責Region Server的負載均衡

3.?????? Region Server故障之后對Region Server的Region分配到其它Region Server

4.?????? HDFS上的垃圾回收

5.?????? 處理schema更新請求

Region Server的主要作用:

1.?????? 負責Region相關的IO操作

2.?????? 對過大的Region進行split

?

HFile的compaction過程

?

Region的split過程

?

HBase的一次查詢操作:

? ? ? ? 首先客戶端會給出相應的<rowkey,columnfamily ,column>,請求發送到HBas集群之后,會在zookeeper里面查詢-ROOT-表的位置,然后去某個Region Server找到-ROOT-表,-ROOT-表的rowkey為<.META.,<用戶表名,Region的起始rowkey,ts>,ts>,根據客戶端請求的rowkey,通過比較-ROOT-表中最大的那個小于等于<用戶表名,rowkey>的rowkey,那么這就是我們要找的那個Region,同理在.META.表里面也是這樣的一個過程。經過三次尋址之后就能找到數據,然后把經過歸并排序之后的結果返回給客戶端。查詢之后的數據會放在block cache之中方便下次讀取加快速度。

?

HBase的一次寫入操作:

???????? 客戶端一般會將數據先緩存在客戶端的Write Buffer中(一般Write Buffer大小為2M左右),這樣寫入的數據會達到一定大小再與服務器通信,減少了通信造成的開銷,Write Buffer有三種情況會提交給Region Server

(1)??? Write Buffer 滿

(2)??? 手動調用HTable.flushCommits()方法

(3)??? 客戶端關閉

? ? ? ? 客戶端的數據發送到服務器之后,首先根據表名和rowkey進行尋址,查找到可以寫入的那個RegionServer,首先把數據變動寫入到HLog之中,這樣可以防止服務器異常終止之后memstore中的數據丟失造成不良后果。然后將數據寫入到指定的Region的memstore,因為是直接寫入內存而不是寫入文件,所以速度非常的快。于是數據存儲在memstore之中,memstore如果達到了一定的大小(hbase.hRegion.memstore.flush.size),memstore的內容就會刷新寫入(flush)到Hfile中去,這時候會創建一個新的memstore來接收客戶端的讀請求,然后原先的memstore將內容flush到HFile中去,之后將舊memstore釋放。

? ? ? ? 這就是我對HBase的初步認識,下一步計劃是HBase中實際的存儲讀取數據,閱讀源代碼,深入對HBase的理解。


總結

以上是生活随笔為你收集整理的对HBase整个框架的理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。