put通過生成乙個htable例項,並呼叫其put方法時,的執行流程,此部分分析分為client與regionserver兩個部分,
htable.put-->doput,如果是put乙個list時,會迭代呼叫doput
private
void
doput(put
put)
throwsinterruptedioexception,
retrie***haustedwithdetail***ception 對
put的內容進行檢查:
1.檢查
put中是否指定
cf,如果乙個都沒有,檢查不合法
2.檢查
put中所有的
kv中每乙個
kv的大小是否超過
hbase.client.keyvalue.maxsize
配置的值,預設
-1表示不限制大小
validateput
(put);
把當前put
的所有kv
的大小,包含類定義大小加入到
currentwritebuffersize中,
此屬性用來檢查當前
table
的buffer
中的put
大小是否超出了指定的
buffersize
currentwritebuffersize
+= put
.heapsize
();
把這次的
put新增到
writeasyncbuffer
列表中。
writeasyncbuffer
.add
(put);
如果當前
buffer
中的put
總大小超過了指定的
table
可儲存的
buffer
大小時,進行
flush,
不等待flush
完成操作。
在flush
過程中有可能
writeasyncbuffer
的資料清空後
submit
出現錯誤,會把錯誤的
put重新放入到此列表中。
while(
currentwritebuffersize
>
writebuffersize)
} hbase.client.max.total.tasks,default=100
private
void
backgroundflushcommits(
boolean
synchronous
)throws
interruptedioexception,retrie***haustedwithdetail***ception
while(
synchronous
&& !
writeasyncbuffer
.isempty
());
如果傳入的引數是
true,
表示需要等待
rpc呼叫結束
,flushcommits
或put
中上一次提交
error
時此引數為
true
等到taskssent
的值減去
tasksdone
的值等於
0,taskssent
表示提交的任務數,
tasksdone
表示完成的任務數
if(
synchronous)
部分資料提交失敗,也就是可能同時提交給兩個
regionserver,
有乙個成功,乙個失敗。
if(ap.
haserror
())
等到taskssent
的值減去
tasksdone
的值等於
0,taskssent
表示提交的任務數,
tasksdone
表示完成的任務數ap.
waituntildone
();
如果有部分資料提交失敗,同時沒有設定清空失敗的資料時,把資料重新新增到
writeasyncbuffer
列表中
if(!
clearbufferonfail)
retrie***haustedwithdetail***ceptione=
ap.geterrors
(); ap.
clearerrors
();
throwe;
} }finally}
} }
Hbase Put原始碼解析
size large b 原創文章,請各位多多指導,有錯誤希望各位能及時告訴我,感激不盡 b size 1 put put new put key 首先會構造put物件,以傳入的rowkey,如果未傳入時間戳,那麼就會預設為null,接下來就會判斷是否傳入的控制hbase事務的rowlock,如果傳...
簡單的TCP連線Server和Client
我們的一款unity開發的遊戲,之前一直在android上測試,這幾天我做了遊戲的windows phone 8版本匯出工作,經過一周摸索,終於成功打出了可以在wp8手機上正常執行的版本。wp8的.net庫是silverlight的乙個子集,很多.net 2.0的語法它不支援,socket的很多屬性...
只用 操作實現 , , 操作
減法 a b a b 乘法 a b相當於將a累加abs b 次 除法 相當於將abs a 減去 abs b 的次數 求lhs的反面值rhs,即求rhs使得lhs rhs 0 int negate int lhs return ret int abs int lhs 返回i的絕對值 lhs rhs l...