hbase讀寫請求詳細解釋

2019/2/28 星期四

hbase讀寫請求
詳細解釋hbase的讀寫過程
讀請求過程

成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比青羊網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式青羊網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋青羊地區(qū)。費用合理售后完善,10余年實體公司更值得信賴。

hbase讀寫請求詳細解釋

1、客戶端通過 ZooKeeper 以及-ROOT-表和.META.表找到目標數(shù)據(jù)所在的 RegionServer(就是 數(shù)據(jù)所在的 Region 的主機地址)
2、zk返回結(jié)果給客戶端
3、聯(lián)系 RegionServer 查詢目標數(shù)據(jù)
4、RegionServer 定位到目標數(shù)據(jù)所在的 Region,發(fā)出查詢請求
5、Region 先在 Memstore 中查找,命中則返回
6、如果在 Memstore 中找不到,則在 Storefile 中掃描 為了能快速的判斷要查詢的數(shù)據(jù)在不在這個 StoreFile 中,應(yīng)用了 BloomFilter
(BloomFilter,布隆過濾器:迅速判斷一個元素是不是在一個龐大的集合內(nèi),但是他有一個 弱點:它有一定的誤判率)
(誤判率:原本不存在與該集合的元素,布隆過濾器有可能會判斷說它存在,但是,如果 布隆過濾器,判斷說某一個元素不存在該集合,那么該元素就一定不在該集合內(nèi))

BlockCache
1、BlockCache稱為讀緩存
2、HBase會將一次文件查找的Block塊緩存到Cache中,以便后續(xù)同一請求或者鄰近數(shù)據(jù)查找請求,可以直接從內(nèi)存中獲取,避免昂貴的IO操作。
此部分參考鏈接:https://blog.51cto.com/12445535/2363376

hbase寫請求

//深度了解hbase的寫請求,請閱讀:hbase數(shù)據(jù)寫入流程深度解析 https://blog.51cto.com/12445535/2370653

hbase讀寫請求詳細解釋

寫請求處理過程小結(jié)
1 client 向region server 提交寫請求
2 region server 找到目標region
3 region 檢查數(shù)據(jù)是否與schema 一致
4 如果客戶端沒有指定版本,則獲取當前系統(tǒng)時間作為數(shù)據(jù)版本
5 將更新寫入WAL log
6 將更新寫入Memstore
7 判斷Memstore 的是否需要flush 為Store 文件。

Hbase 在做數(shù)據(jù)插入操作時,首先要找到 RowKey 所對應(yīng)的的 Region,怎么找到的?其實這 個簡單,因為.META.表存儲了每張表每個 Region 的起始 RowKey 了。
建議:在做海量數(shù)據(jù)的插入操作,避免出現(xiàn)遞增 rowkey 的 put 操作
如果 put 操作的所有 RowKey 都是遞增的,那么試想,當插入一部分數(shù)據(jù)的時候剛好進行分 裂,那么之后的所有數(shù)據(jù)都開始往分裂后的第二個 Region 插入,就造成了數(shù)據(jù)熱點現(xiàn)象。

寫請求過程 //細節(jié)描述
上面提到,hbase 使用MemStore 和StoreFile 存儲對表的更新。
1、數(shù)據(jù)在更新(寫)時首先寫入Log(WAL log)和內(nèi)存(MemStore)中,MemStore 中的數(shù)據(jù)是排序的,當MemStore 累計到一定閾值時,就會創(chuàng)建一個新的MemStore,并且將老的MemStore 添加到flush 隊列,由單獨的線程flush 到磁盤上,成為一個StoreFile。
2、于此同時,系統(tǒng)會在zookeeper 中記錄一個redo point,表示這個時刻之前的變更已經(jīng)持久化了。(minor compact)
3、當系統(tǒng)出現(xiàn)意外時,可能導(dǎo)致內(nèi)存(MemStore)中的數(shù)據(jù)丟失,此時使用Log(WAL log)來恢復(fù)checkpoint 之后的數(shù)據(jù)。
4、前面提到過StoreFile 是只讀的,一旦創(chuàng)建后就不可以再修改。因此Hbase 的更新其實是不斷追加的操作。
5、當一個Store 中的StoreFile 達到一定的閾值后,就會進行一次合并(major compact),將對同一個key 的修改合并到一起,形成一個大的StoreFile,當StoreFile 的大小達到一定閾值后,又會對StoreFile 進行split,等分為兩個StoreFile。
6、由于對表的更新是不斷追加的,處理讀請求時,需要訪問Store 中全部的StoreFile 和MemStore,將他們的按照row key 進行合并,由于StoreFile 和MemStore 都是經(jīng)過排序的,并且StoreFile 帶有內(nèi)存中索引,合并的過程還是比較快。

提示:
Client 寫入 -> 存入 MemStore,一直到 MemStore 滿 -> Flush 成一個 StoreFile,直至增長到 一定閾值 -> 觸發(fā) Compact 合并操作 -> 多個 StoreFile 合并成一個 StoreFile,同時進行版本 合并和數(shù)據(jù)刪除 -> 當 StoreFiles Compact 后,逐步形成越來越大的 StoreFile -> 單個 StoreFile 大小超過一定閾值后,觸發(fā) Split 操作,把當前 Region Split 成 2 個 Region,Region 會下線, 新 Split 出的 2 個孩子 Region 會被 HMaster 分配到相應(yīng)的 HRegionServer 上,使得原先 1 個 Region 的壓力得以分流到 2 個 Region 上由此過程可知,HBase 只是增加數(shù)據(jù),有所得更新 和刪除操作,都是在 Compact 階段做的,所以,用戶寫操作只需要進入到內(nèi)存即可立即返 回,從而保證 I/O 高性能。

寫入數(shù)據(jù)的過程補充:
工作機制:每個 HRegionServer 中都會有一個 HLog 對象,HLog 是一個實現(xiàn) Write Ahead Log 的類,每次用戶操作寫入 Memstore 的同時,也會寫一份數(shù)據(jù)到 HLog 文件,HLog 文件定期 會滾動出新,并刪除舊的文件(已持久化到 StoreFile 中的數(shù)據(jù))。當 HRegionServer 意外終止 后,HMaster 會通過 ZooKeeper 感知,HMaster 首先處理遺留的 HLog 文件,將不同 Region 的 log數(shù)據(jù)拆分,分別放到相應(yīng) Region 目錄下,然后再將失效的 Region(帶有剛剛拆分的 log) 重新分配,領(lǐng)取到這些 Region 的 HRegionServer 在 load Region 的過程中,會發(fā)現(xiàn)有歷史 HLog 需要處理,因此會 Replay HLog 中的數(shù)據(jù)到 MemStore 中,然后 flush 到 StoreFiles,完成數(shù)據(jù) 恢復(fù)。

參考鏈接為:https://www.cnblogs.com/qingyunzong/p/8692430.html
http://hbasefly.com/2016/03/23/hbase_writer/

分享文章:hbase讀寫請求詳細解釋
網(wǎng)址分享:http://muchs.cn/article8/pjjgip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、移動網(wǎng)站建設(shè)、網(wǎng)站建設(shè)網(wǎng)站營銷、GoogleApp設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護公司