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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

关于hbase的read操作的深入研究 region到storefile过程

發(fā)布時間:2025/3/13 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于hbase的read操作的深入研究 region到storefile过程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
關于hbase的read操作的深入研究 region到storefile過程

這里面說的read既包括get,也包括scan,實際底層來看這兩個操作也是一樣的。
我們將要討論的是,當我們從一張表讀取數(shù)據(jù)的時候hbase到底是怎么處理的。
分二種情況來看,第一種就是表剛創(chuàng)建,所有put的數(shù)據(jù)還在memstore中,并沒有刷新到hdfs上;第二種情況是,該store已經(jīng)進行多次的flush操作,產(chǎn)生了多個storefile了。
在具體說明兩種情況前,先考慮下表的region的問題,如果表只有一個region,那么沒有說的,肯定是要掃描這個唯一的region。假設該表有多個region,此時.META.表就派上用場了,hbase會首先根據(jù)你要掃描的數(shù)據(jù)的rowkey來判斷到底該數(shù)據(jù)放在哪個region上,該region所在服務器地址,然后把數(shù)據(jù)讀取的請求發(fā)送給該region server。好了,實際對數(shù)據(jù)訪問的任務都會放在region server上執(zhí)行,為了簡單起見,接下來的討論都是在單臺region server上對單個region的操作。
首先來看第一種情況,表剛創(chuàng)建,所有put的數(shù)據(jù)還在memstore中,并沒有刷新到hdfs上。這個時候數(shù)據(jù)是在memstore中,并沒有storefile產(chǎn)生,理所當然,hbase要查找memstore來獲得相應的數(shù)據(jù)。對于memstore或者storefile來說,內(nèi)存中都有關于rowkey的索引的,所以對于通過rowkey的查詢速度是非常快速的。通過查詢該索引就知道是否存在需要查看的數(shù)據(jù),已經(jīng)該數(shù)據(jù)在memstore中的位置。通過索引提供的信息就很容易找得到所需要的數(shù)據(jù)。這種情況很簡單。
在來看第二種情況,該store已經(jīng)進行多次的flush操作,產(chǎn)生了多個storefile了。那么數(shù)據(jù)應該從哪里查呢?所有的storefile?別忘記還有memstore。此時memstore中可能還會有沒來得及flush的數(shù)據(jù)呢。如果此時該region還有很多的文件,是不是所有的文件都需要查找呢?hbase在查找先會根據(jù)時間戳或者查詢列的信息來進行過濾,過濾掉那些肯定不含有所需數(shù)據(jù)的storefile或者memstore,盡量把我們的查詢目標范圍縮小。
盡管縮小了,但仍可能會有多個文件需要掃描的。storefile的內(nèi)部有三維有序的,但是各個storefile之間并不是有序的。比如,storefile1中可能有rowkey為100到110的記錄,而storefile2可能有rowkey為105到115的數(shù)據(jù),storefile的rowkey的范圍很有可能有交叉。所以查詢數(shù)據(jù)的過程也不可能是對storefile的順序查找。
hbase會首先查看每個storefile的最小的rowkey,然后按照從小到大的順序進行排序,結果放到一個隊列中,排序的算法就是按照hbase的三維順序,按照rowkey,column,ts進行排序,rowkey和column是升序,而ts是降序。
實際上并不是所有滿足時間戳和列過濾的文件都會加到這個隊列中,hbase會首先對各個storefile中的數(shù)據(jù)進行探測,只會掃描掃描那些存在比當前查詢的rowkey大的記錄的storefile。舉例來說,我當前要查找的rowkey為108,storefile1中rowkey范圍為100~104,storefile2中rowkey的范圍為105~110,那么對于storefile1最大的rowkey為104,小于105,所以不存在比所查rowkey105大的記錄,storefile并不會被加到該隊列中。根據(jù)相同的規(guī)則,storefile2則會被添加到該隊列中。
隊列有了,下面開始查詢數(shù)據(jù),首先通過poll取出隊列的頭storefile,會從storefile讀取一條記錄返回;接下來呢,該storefile的下條記錄并不一定是查詢結果的下一條記錄,因為隊列的比較順序是比較的每個storefile的第一條符合要求的rowkey。所以,hbase會繼續(xù)從隊列中剩下的storefile取第一條記錄,把該記錄與頭storefile的第二條記錄做比較,如果前者大,那么返回頭storefile的第二條記錄;如果后者大,則會把頭storefile放回隊列重新排序,在重新取隊列的頭storefile。然后重復上面的整個過程。這個過程比較煩,語言描述不清楚,代碼會更加清晰。
這段代碼如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public KeyValue next()??throws IOException {
??if(this.current == null) {
? ? return null;
??}
??KeyValue kvReturn = this.current.next();
??KeyValue kvNext = this.current.peek();
??if (kvNext == null) {
? ? this.current.close();
? ? this.current = this.heap.poll();
??} else {
? ? KeyValueScanner topScanner = this.heap.peek();
? ? if (topScanner == null ||
? ?? ???this.comparator.compare(kvNext, topScanner.peek()) >= 0) {
? ?? ?this.heap.add(this.current);
? ?? ?this.current = this.heap.poll();
? ? }
??}
??return kvReturn;
}



以上的代碼在KeyValueHeap.java類中。
舉個例子來說明:表sunwg01,有兩個storefile,storefile1中包括rowkey100,rowkey110;storefile2中包括rowkey104,rowkey108。我現(xiàn)在執(zhí)行scan ‘sunwg01′掃描表sunwg01中的所有的記錄。
根據(jù)前面提到的排序規(guī)則,隊列中會有2個元素,按順序分別為storefile1,storefile2。
1,取出storefile1中的第一條記錄rowkey100,并返回該結果
2,取出storefile1中的下一條記錄rowkey110,同時取出隊列剩余storefile的第一條記錄rowkey104,經(jīng)過比較rowkey110大于rowkey104,則將storefile1放回隊列中
3,因為隊列是有序的隊列,會重新對storefile進行排序,因為此時storefile1的最小rowkey為110,而storefile2的最小rowkey為104,所以排序的結果為storefile2,storefile1
4,重復上面的過程,直到查不到記錄為止。
最后查到的結果為:rowkey100,rowkey104,rowkey108,rowkey110。
順便說下block cache的事情,當從storefile中讀數(shù)據(jù)的時候會首先查看block cache中是否有該數(shù)據(jù),如果有則直接查block cache,就沒必要查詢hdfs;如果沒有該數(shù)據(jù),那么就只能去查hdfs了。這也是為了block cache的命中率對性能有很大影響的原因。
上面描述了從hbase中read的基本的過程,還有些細節(jié)沒有具體說,但是大概過程應該是都說到了。

posted on 2014-09-20 21:57 zlingh 閱讀(...) 評論(...) 編輯 收藏

轉(zhuǎn)載于:https://www.cnblogs.com/zlingh/p/3983854.html

總結

以上是生活随笔為你收集整理的关于hbase的read操作的深入研究 region到storefile过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一区二区三区波多野结衣 | 国产av成人一区二区三区 | 国产情侣一区二区 | 日本伦理片在线看 | 亚洲香蕉 | 日本乱码一区二区 | 热久久亚洲 | 亚洲毛片一区二区 | 五月天久久久久久 | 国产精品久久久久久久久动漫 | 又大又粗欧美黑人aaaaa片 | 国产精品视频久久久久 | 国产剧情久久久 | 久久香蕉精品 | www欧美| 亚洲三级网 | 自拍偷拍日韩精品 | 日韩极品视频在线观看 | 国产精品亲子伦对白 | 国产成人午夜精品 | 欧美一区二区三区在线免费观看 | 久久网伊人| 狠狠干香蕉 | 国产一级免费观看 | 国产爱搞 | 麻豆成人在线观看 | 中国黄色三级视频 | 无码视频在线观看 | 天天爱天天草 | 午夜精品久久久久久久四虎美女版 | 在线亚洲免费 | 国产精品揄拍100视频 | 色八戒av| 久久99久久99精品免观看粉嫩 | 五月天婷婷色综合 | 国产成人精品999在线观看 | 2021毛片| 中国毛片在线观看 | 亚洲av综合色区无码一区爱av | 日本黄色大片免费 | 国产精品偷伦视频免费观看了 | 好男人影视www | 91美女视频在线观看 | 久久久久亚洲精品国产 | 91精品国产91久久久久久 | av影片在线播放 | 一区二区精品视频在线观看 | 免费无码国产v片在线观看 三级全黄做爰在线观看 | 欧美成人久久 | 成人毛片网 | 韩国三级hd中文字幕叫床浴室 | 一女二男一黄一片 | 伊人久久成人网 | 天堂精品视频 | 稀缺小u女呦精品呦 | 婷婷九月丁香 | 在线看日本 | 国产精品视频一区二区三区, | 奶水旺盛的少妇在线播放 | 少妇真实被内射视频三四区 | 一本大道久久a久久综合婷婷 | 91成人午夜 | 天堂社区av| 亚洲男人天堂视频 | 99在线观看免费视频 | 日韩一级免费 | 国产精品免费在线 | 波多野结衣二区 | 性猛交ⅹxxx富婆video | 久久高清内射无套 | 日本视频二区 | 99热国产精品| 中文字幕无码不卡免费视频 | 亚洲午夜久久久久久久久红桃 | 米奇7777狠狠狠狠视频 | 亚洲免费av一区 | 天堂网中文在线观看 | 99久| 国产毛片一区二区三区va在线 | 久久特黄 | 中文字幕女同 | 国产精品视频入口 | 亚洲色图 美腿丝袜 | 欧美黑人多人双交 | 久久婷婷一区二区 | 俄罗斯精品一区二区三区 | 女同久久另类69精品国产 | 亚洲操图 | 一个人看的毛片 | 强开小受嫩苞第一次免费视频 | 天天草夜夜草 | 精品久久久久一区二区国产 | 91传媒入口| 日韩一区二区精品视频 | 午夜爽爽爽视频 | 色久网| 日本女优网址 | 中文字幕一区二区三区精彩视频 | 国产在线免费av |