1.hbase客戶端重要參數
hbase.client.pause?
失敗重試時等待時間,隨著重試次數越多,重試等待時間越長,計算方式如下所示:
public static int RETRY_BACKOFF[] = { 1, 2, 3, 5, 10, 20, 40, 100, 100, 100, 100, 200, 200 }; long normalPause = pause * HConstants.RETRY_BACKOFF[ntries];long jitter = (long)(normalPause * RANDOM.nextFloat() * 0.01f);
所以如果重試10次,hbase.client.pause=50ms,則每次重試等待時間為{50,100,150,250,500,1000,2000,5000,5000,5000}。?
屬性默認值為100ms,可以設置為50ms,甚至更小。
hbase.client.retries.number?
失敗時重試次數,默認為31次。可以根據自己應用的需求將該值調整的比較小。比如整個提供應用的超時時間為3s,則根據上面重試時間計算方法,可以將重試次數調整為3次。
hbase.rpc.timeout?
該參數表示一次RPC請求的超時時間。如果某次RPC時間超過該值,客戶端就會主動關閉socket。?
默認該值為1min,應用為在線服務時,可以根據應用的超時時間,設置該值.如果應用總共超時為3s,則該值也應該為3s或者更小.
hbase.client.operation.timeout?
該參數表示HBase客戶端發起一次數據操作直至得到響應之間總的超時時間,數據操作類型包括get、append、increment、delete、put等。該值與hbase.rpc.timeout的區別為,hbase.rpc.timeout為一次rpc調用的超時時間。而hbase.client.operation.timeout為一次操作總的時間(從開始調用到重試n次之后失敗的總時間)。?
舉個例子說明,比如一次Put請求,客戶端首先會將請求封裝為一個caller對象,該對象發送RPC請求到服務器,假如此時因為服務器端正好發生了嚴重的Full GC,導致這次RPC時間超時引起SocketTimeoutException,對應的就是hbase.rpc.timeout。那假如caller對象發送RPC請求之后剛好發生網絡抖動,進而拋出網絡異常,HBase客戶端就會進行重試,重試多次之后如果總操作時間超時引起SocketTimeoutException,對應的就是hbase.client.operation.timeout。
hbase.client.scanner.timeout.period?
該參數是表示HBase客戶端發起一次scan操作的rpc調用至得到響應之間總的超時時間。一次scan操作是指發起一次regionserver rpc調用的操作,hbase會根據scan查詢條件的cacheing、batch設置將scan操作會分成多次rpc操作。比如滿足scan條件的rowkey數量為10000個,scan查詢的cacheing=200,則查詢所有的結果需要執行的rpc調用次數為50個。而該值是指50個rpc調用的單個相應時間的最大值。