中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

HBase的讀寫流程以及優化方法

發布時間:2021-08-12 11:05:49 來源:億速云 閱讀:232 作者:chen 欄目:云計算

本篇內容主要講解“HBase的讀寫流程以及優化方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“HBase的讀寫流程以及優化方法”吧!

HBase的讀寫流程--依賴于HBase的4大組件:分別是客戶端、Zookeeper、HMaster和HRegionServer。

HBase的讀寫都是由客戶端進行發起的。首先是讀的過程:客戶端根據用戶提供的表名、行鍵去客戶端里的緩存進行查詢,沒有查詢到,就去Zookeeper進行查詢。Zookeeper在HBase中用來存儲ROOT表的地址。HBase中有兩張重要的表,分別是ROOT表和META表,ROOT表記錄META表的region信息,而META表記錄的是用戶表的region信息。簡單來說,META表的行鍵是由Region所屬表的表名、以及該region在表中的開始行鍵和時間戳組成,列族info定義了三個列,分別是regionInfo存儲了region中開始結束行鍵,server列存儲了region所在的服務器地址,serverstartcode存儲了regionServer的狀態。

由于META表也是一張普通的HBASE表,因此當META表的數據越來越多的時候,也會分裂成多個meta region,每個meta region也會被不同的regionServer管理。因此就需要有一張表存儲meta region的信息,這張表就是ROOT表,ROOT表只存儲了一個region信息,那就是meta region。按照這個過程,理論上還需要一張表存儲ROOT表的信息,但是這樣就會產生無窮無盡的表存儲類似的信息,針對于這種情況,因此HBase的開發人員認為ROOT表數據量不會很大,因此不會數據分裂,所以就不需要其他表存儲ROOT表的region信息了。

客戶端通過Zookeeper獲得了ROOT表的地址,通過RPC連接到ROOT表所在的RegionServer,根據ROOT表查詢META表,然后根據用戶所提供的表名和行鍵,組成一個XXXXXXX(),通過這個行鍵去META表查詢,拿到info列族中的regionInfo和server列的值之后,根據server列的值,客戶端與RegionServer建立連接,將regionInfo列的數據提交給RegionServer。

RegionServer接收客戶端的查詢請求之后,首先創建RegionScanner對象,通過該對象定位到HRegion,然后HRegin對象創建StoreScanner,通過StoreScanner定位到HStore,HStore對象創建1個MemStoreScanner對象,這個對象負責去MemStore查詢有沒有相關數據,有則返回,沒有就創建多個StoreFileScanner對象,每個對象否則去不同的HFile中查詢數據,如果找到了則返回,如果沒有就返回null。

HBase寫的過程:當客戶端進行put操作時,數據會自動保存到HRegion上,在HRegionServer中,找到對應要寫入的HRegion之后,數據會寫入到HLog中并同時寫入到HStore的MemStore內存中,會在內存中按照行鍵對數據進行排序,當內存中的數據達到一定閾值后,會觸發flush操作。Flush操作主要就是把MemStore內存中的數據寫入到StoreFile中,當HDFS中的StoreFile個數達到一定的閾值后,會觸發compact(合并)操作,將HDFS中所有的StoreFile合并成一個新的SotreFile,在合并的時候會按照行鍵進行排序,并且會進行版本合并和數據刪除。當StoreFile通過不斷的合并操作后,StoreFile文件會變得越來越大,當這個StoreFile達到一定的閾值后,會觸發Split(切分)操作,同時把當前region拆分成兩個新的region,原有的region會下線,新的兩個region會被HMaster分配到相應的HRegionServer上,使得原來一個Region的壓力得以分流到兩個Region上,其實,HBase只是增加數據,更新和刪除操作都是compact階段做的,所以,客戶端寫入成功的標志是HLog和MemStore中都有數據。

先寫HLog,但是如果顯示MemSotre也是沒問題的,因為MemStore的MVCC(多版本并發控制)不會向前滾動,這些變化在更新MVCC之前,Scan是無法看到的,所以在寫入HLog之前,即使MemStore有數據,客戶端也查詢不到。

HBASE的優化

1. 對行鍵、列族、列名稱長度優化,HBase引入block的原因是block中包含了很多的key/value,每個key中包含rowkey、列族、列、時間戳,減少rowkey、列族、列的長度就能減少block的數量,否則會增加region server、region、索引、內存、查詢范圍。

2. 當進行批量處理數據時,客戶端會將數據先保存到客戶端的緩存中,HBASE默認是開啟隱式刷寫的,當關閉隱式刷寫時,put的數據也會保存到客戶端的緩存中,直到調用刷寫命令時,才會保存到HRegion中。

3.查詢優化:

*設置scan緩存。

*查詢時指定列。

*使用完ResultScanner后及時關閉。

*查詢時盡量使用過濾器或協處理器,減少數據量。

*將查詢頻率較高的數據緩存起來。例如緩存到redis中。

*使用HtableTool查詢。

*使用批量讀取Htable.get(List<Get>)。

4.寫入優化:

*關閉WAL日志,如果開啟了WAL日志,可以修改日志寫入hdfs的時間。(存在數據丟失的風險優化)

*設置AutoFlush為false。(存在數據丟失的風險優化)

*Region預分區,兩種方式,hbase自帶的RegionSplitter,和自己實現,一般使用hbase自帶的。

*通過HtableTool寫入。

*使用批量寫入Htable.put(List<Put>)。

5.配置方面優化:

*設置RegionServer的處理線程數量,但是需要先進行測試。

*調整BlockChche或者MemStore內存大小大小,如果讀的較多則將BlockChche增大,如果寫的較多則MemStore調大。但兩者之和不能超過

 一個RegionServer總內存大小的80%。(StoreFile的flush)

*調整StoreFile合并的數量限制,太少則合并次數頻繁嚴重影響性能,太大會到這查詢變慢。(StoreFile的compart)

*設置單個StoreFile的大小,調整分裂的性能。(StoreFile的spill)

6.行鍵設計:最大長度64KB

*因為hbase會的rowkey按照字節順序由小到大排序,因此需要保持rowkey松散性,避免單調遞增,防止出現region熱點。

*因為hbase只對rowkey建立索引,所以要保證行鍵的唯一性。

*因為行鍵是不可變的,所以在設計之初要滿足業務需求。

*因為rowkey是冗余存儲,所以只要滿足以上要求,行鍵長度盡量短。

7.列族設計:

*因為hbase底層是以列族為單位存儲的,一個列族中的數據會被存放在一個磁盤文件中,所以應該將具有相同特性的列放到一個列族中。

*一個表中的列族盡量不要太多,保持到1-2個最好。

*如果是更新頻繁并且只需要最獲取最新數據可以設置,單元格的時間版本為1,默認為3(VERSION)

*可以設置單元格的生命周期(TTL)

*隨機讀較多開啟布隆過濾器。

CAP原理

Consistency強一致性、availability可用性、partition tolerance分區容錯性,在一個大規模的分布式服務系統中不可能同時存在。

C指的是更新操作成功并返回客戶端完成后,分布式的所有節點在同一時間的數據完全一致

A指的是讀和寫操作都能成功

P指的是節點宕機不影響服務的運行。

HBASE只支持CP

到此,相信大家對“HBase的讀寫流程以及優化方法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平江县| 汤阴县| 光山县| 五寨县| 五大连池市| 东平县| 德州市| 凌海市| 北川| 资源县| 临朐县| 赤壁市| 福州市| 邯郸市| 赫章县| 周口市| 深水埗区| 大名县| 黑河市| 肥城市| 纳雍县| 朝阳市| 百色市| 额尔古纳市| 怀仁县| 璧山县| 巴马| 灌南县| 资溪县| 开平市| 荔波县| 岐山县| 宽甸| 东乡族自治县| 和林格尔县| 上杭县| 杭州市| 翼城县| 芮城县| 龙陵县| 方正县|