溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

hbase讀寫請(qǐng)求詳細(xì)解釋

發(fā)布時(shí)間:2020-07-07 14:44:50 來(lái)源:網(wǎng)絡(luò) 閱讀:829 作者:馬吉輝 欄目:大數(shù)據(jù)

2019/2/28 星期四

hbase讀寫請(qǐng)求
詳細(xì)解釋hbase的讀寫過程
讀請(qǐng)求過程

hbase讀寫請(qǐng)求詳細(xì)解釋

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

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

hbase寫請(qǐng)求

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

hbase讀寫請(qǐng)求詳細(xì)解釋

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

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

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

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

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

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI