一、為什么要設置超時參數(shù)
hbase設計的目標是成為一個高可用集群,能夠在失敗的時候快速響應,當出現(xiàn)網(wǎng)絡抖動等偶發(fā)情況時,能快速重試,讓用戶可以快速拿到結果。而不是一直卡著,使得上層應用阻塞等待。
這個功能可以通過設置下面的3個超時參數(shù)、超時重試次數(shù)來實現(xiàn)。在超時的時候,立即主動斷開,并重試??梢栽诋斍凹荷现卦嚕部梢郧袚Q集群重試。
?文章來源地址http://www.zghlxwxcb.cn/news/detail-510659.html
二、3個超時參數(shù)及其機制
hbase.rpc.timeout
hbase client和server之間通過 rpc 通信,此參數(shù)設置了rpc超時時間。超時后將主動斷開 rpc 請求。
?文章來源:http://www.zghlxwxcb.cn/news/detail-510659.html
hbase.client.opeation.timeout
hbase client從發(fā)出數(shù)據(jù)操作請求到server端處理完成并返回,總時間不能超過此參數(shù)。一個數(shù)據(jù)請求可能會調用多次rpc請求。比如 client 端發(fā)起了一個 put 請求,server 端正好在Full gc ,導致 rpc 響應超時。那么 client 會進行重試,重試多次后,累計的時間超過了 client.opeation.timeout 后,將拋出 sockettimeout 異常。
hbase.client.scanner.timeout.period
hbase 為 scanner 專門設置的超時參數(shù)。
一次 scan 操作如果一次性返回大量數(shù)據(jù),對于 client 和 server 還有網(wǎng)絡都有很大的壓力。client 端一次性接受大量數(shù)據(jù)放在內存中,容易oom; server 端從磁盤讀出數(shù)據(jù)需要大量的io,而我們知道io 相比于cpu、內存,往往更容易成為瓶頸;網(wǎng)絡端從 server 這臺機器傳輸大量數(shù)據(jù)到 client 這臺機器,將會占用很大帶寬,對網(wǎng)絡也有壓力。
因此 一個scan 操作會分為多次 rpc 來實現(xiàn)。 我們在 scan 的時候,會設置 maxsize 和 cache,maxsize 表示本次 scan 要掃描返回的總條數(shù),cache 表示一次 rpc 返回的數(shù)據(jù)條數(shù)。
HTable table=(HTable) getHTablePool().getTable("tb_stu");
Scan scan=new Scan();
scan.setMaxResultSize(10000);
scan.setCacheing(500);
ResultScanner rs = table.getScanner(scan);
Result r = rs.next();
每執(zhí)行一次 rs.next(),都是在發(fā)起一次 rpc 請求。
server 端會比較 hbase.client.scanner.timeout.period 和 hbase.rpc.timeout 兩個參數(shù),按照其中較小的來判斷是否超時。比如scanner.timeout.period 設置為6000ms,rpc.timeout為3000ms,則在超過3000ms時,就會報socketTimeout異常,主動斷開連接。
?
ref:
hbase客戶端超時機制:http://hbasefly.com/2016/06/11/hbase-client-2/
設置rpc超時后無效的解決方法:https://stackoverflow.com/questions/30923351/hbase-client-rpc-timeout
?
?
到了這里,關于hbase 設置超時參數(shù)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!