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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hbase scan超时设置_深入浅出HBase系列(二)

發(fā)布時(shí)間:2025/4/5 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hbase scan超时设置_深入浅出HBase系列(二) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

今天來講講HBase讀的過程:

1、HBase讀過程詳解

2.1影響HBase讀取命令的參數(shù)

HBase讀包含兩種命令:get ,基于確切的RowKey去獲取一行數(shù)據(jù),通常被稱之為隨機(jī)點(diǎn)查;scan,指定一個(gè)RowKey的范圍區(qū)間,獲取該區(qū)間的所有記錄,當(dāng)區(qū)間未明確指定時(shí),scan退化為全表掃描;

圖2.1 client端scan的示意圖

Client每一次往RegionServer發(fā)送scan請求,都會(huì)批量拿回一批數(shù)據(jù)(由Caching決定每一次拿回的Results數(shù)量),然后放到本次的Result Cache中:應(yīng)用每一次讀取數(shù)據(jù)都是從本地的Result Cache中獲取的,如果Result Cache中的數(shù)據(jù)讀完了,則Client會(huì)再次往RegionServer發(fā)送scan請求獲取更多的數(shù)據(jù)。此處有8個(gè)編程參數(shù)會(huì)影響讀取過程:

①Caching: 設(shè)置一次RPC請求批量讀取Results的數(shù)量;scan.setCaching(100);

②Batch: 設(shè)置每一個(gè)Result中的列的數(shù)量;scan.setBatch(10);

③Limit: 限制一次Scan操作所獲取的行的數(shù)量;scan.setLimit(1000);

④Cache Block: RegionServer側(cè)是否要緩存本次Scan所涉及的HFileBlocks;scan.setCacheBlocks(true);

⑤Raw Scan: 是否可以讀取到刪除標(biāo)識(shí)以及被刪除但尚未被清理的數(shù)據(jù);scan.setRaw(true);

⑥MaxResultSize: 從內(nèi)存占用量的維度限制一次Scan的返回結(jié)果集;scan.setMaxResultSize(5*1024*1024);

⑦Reversed Scan: 反向掃描,普通的Scan操作是按照字典順序從小到大的順序讀取的,而Reversed Scan則恰好相反:scan.setReversed(true);

⑧帶Filter的Scan,Filter可以在Scan的結(jié)果集基礎(chǔ)之上,對返回的記錄設(shè)置更多條件值,這些條件可以與RowKey有關(guān),可以與列名有關(guān),也可以與列值有關(guān),還可以將多個(gè)Filter條件組合在一起等;scan.setFilter(filter);

2.2讀取過程詳述

Client發(fā)送讀取請求后,整個(gè)讀取過程敘述如下:

2.2.1 定位Region

定位請求關(guān)聯(lián)的Region的時(shí)候,對于get定位與rowkey參數(shù)關(guān)聯(lián)的region;對于scan先定位與starRow參數(shù)關(guān)聯(lián)的region;過程詳述如下:

2.2.1.1找到-ROOT-表

要根據(jù)查詢參數(shù)的rowkey找到到對應(yīng)的結(jié)果數(shù)據(jù),需要先找-ROOT-表,-ROOT-表中存放了.META.表是由哪個(gè)regionServer管理的信息,而.META.表保存了Hbase中所有數(shù)據(jù)表的region的位置信息。要找-ROOT-表,則需要先與zookeeper通信,找到管理-ROOT-表的RegionServer的地址,這個(gè)地址存在zookeeper中,默認(rèn)值是:/hbase/root-region-server;找到管理-ROOT-表的Regionserver的地址后,就可以與這個(gè)RegionServer通信,獲取到-ROOT-表的內(nèi)容,-ROOT-表的內(nèi)容如下:

表2.2.1.1.1 -ROOT-表結(jié)構(gòu)

可以看到,-ROOT-表的內(nèi)容包含了各個(gè)RegionServer上都管理了哪些.META.表的信息,這些.META.表中又有哪些Region,相關(guān)的rowkey在怎樣的范圍等信息,因此通過rowkey可以在-ROOT-表中找到具體和rowkey相關(guān)的.META.表所在的regionServer地址信息;因.META.表也是有region的,也會(huì)不斷進(jìn)行分裂的,所以需要記錄timestamp,查找的時(shí)候要找最新timestamp對應(yīng)的記錄;

每個(gè)regionServer啟動(dòng)的時(shí)候,都會(huì)分配一個(gè)startcode,和host,port,startcode統(tǒng)一構(gòu)成一個(gè)regionserver的唯一標(biāo)志,所以一臺(tái)機(jī)器重啟前后其實(shí)是兩個(gè)不同rs。

注意:-ROOT-表只有一個(gè)region,且永遠(yuǎn)不會(huì)分裂;

圖2.2.1.1.1 -ROOT-表示例

2.2.1.2找到.META.表

通過-ROOT-表找到某個(gè)regionServer上的.META.表后,可以通過.META.表來找到rowkey相關(guān)的Region,我們來看看.META.表的結(jié)構(gòu):

表2.2.1.2.1.META.表結(jié)構(gòu)

可以看到,.META.表結(jié)構(gòu)和-ROOT-表結(jié)構(gòu)完全一致,只是rowkey構(gòu)成不同;因此通過rowkey可以找到管理region的RegionServer的地址;

圖2.2.1.2.1.META.表示例

注意:由于一個(gè)HBase數(shù)據(jù)庫中會(huì)存在很多表,也會(huì)存在很多region,因此.META表會(huì)非常大,而.META.表只是HBase中的一張普通表,因此本身也需要分裂成多個(gè)region,所以.META.表會(huì)存在與多個(gè)Regionserver上,這也是為什么需要設(shè)置-ROOT-表的原因。.META.表一般都全部加載在內(nèi)存中;

當(dāng)然 HBase 客戶端會(huì)緩存這些尋址的數(shù)據(jù),只有在數(shù)據(jù)失效或無相關(guān)數(shù)據(jù)的時(shí)候才會(huì)按照上面的流程定位到對應(yīng)的 RegionServer。

從.META.表中得到管理region的Regionserver后,連接對應(yīng)的RegionServer,發(fā)送讀取Region的請求;

2.2.1.3找到對應(yīng)的Region后的過程

向regionserver發(fā)送讀取請求,之后的過程如下圖:

2.2.1.3.1 找到Region后RegionServer讀取掃描數(shù)據(jù)的過程

這里有三種情況:

①對于新寫入的Cell數(shù)據(jù),它可能會(huì)存在于MemStore中;

②對于已經(jīng)Flush到HFile中的Cell數(shù)據(jù),它會(huì)存在于某個(gè)或某些StoreFile(HFile)中;

③對于剛讀取過的Cell數(shù)據(jù),它可能存在于BlockCache中;

所以對于任意數(shù)據(jù),Cel上數(shù)據(jù)可能存儲(chǔ)在三個(gè)地方,在讀取的時(shí)候需要掃瞄這三個(gè)地方,然后將結(jié)果合并即可(Merge Read),RegionServer中掃描的順序依次是:BlockCache、MemStore、StoreFile(HFile)。

其中StoreFile的掃描先會(huì)使用Bloom Filter過濾那些不可能符合條件的HFile,然后讀取HFile中的Trailer,將Data Block Index讀入內(nèi)存,這樣,檢索某個(gè)rowkey時(shí),不需要掃描整個(gè)HFile,而只需從內(nèi)存中找到rowkey所在的data block,通過一次磁盤io將整個(gè) data block讀取到內(nèi)存中,再找到需要的rowkey。使用Block Index快速定位到數(shù)據(jù)后,將其加載到BlockCache中,然后從BlockCache中讀取數(shù)據(jù)。

這里要注意,一個(gè)HStore可能存在多個(gè)StoreFile(HFile),此時(shí)需要掃瞄多個(gè)HFile,如果HFile過多,則會(huì)引起性能問題,因此需要對HFile進(jìn)行Compation。

如果覺得有用,記得關(guān)注點(diǎn)贊哦,:)

總結(jié)

以上是生活随笔為你收集整理的hbase scan超时设置_深入浅出HBase系列(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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