## 背景
之前我們的線上業(yè)務(wù)一直使用的是Hbase的單條put操作,為了提高程序的寫入性能我們還針對業(yè)務(wù)進(jìn)行了修改项玛,將日志批量化,也就是hbase的put多條操作驾讲,后面發(fā)現(xiàn)hbase的客戶端是支持本地批量操作,而且還挺多配置的,這次主要針對的是`Hbase2.x`的版本進(jìn)行演示說明吮铭,`1.X`不在本文章的范圍內(nèi)时迫,因?yàn)榫€上的Hbase沒有這個版本,作為同齡的小伙伴們是知道 **大豬佩琪** 不會去線上安裝這樣一個版本來演示谓晌。

## 開始直播
說實(shí)話,這樣子使用Hbase來寫操作其實(shí)是最多人的,之前也包括我們在內(nèi)掠拳。
案發(fā)現(xiàn)場還原:

但是,這不是你不想`加速`不想`進(jìn)步`的理由纸肉,看了 **大豬佩琪** 這篇文章之后 溺欧,不想進(jìn)步都難,又多了一個跟我搶飯碗的柏肪,看我下面煮的飯:

看到這幾句姐刁,是不是有種相見恨晚的感覺?不鬧了烦味,容? **大豬佩琪** 慢慢道來:
1. 這句太難解釋聂使,PASS。
2. 設(shè)置自動提交的間隔谬俄,如果不設(shè)置柏靶,那你就要付出代價了,那就是手動:`table.flush()`溃论,不信屎蜓?看大豬從`Hbase`拿出來的源碼的默認(rèn)配置,就在樓下钥勋。
3. 這又是個什么鬼炬转,又臭又長,名還跟第2句差不多一樣笔诵,既然跟第一句差不多肯定是有聯(lián)系的嘛返吻,其實(shí)就是檢查什么時候到`Flush`的定時器,默認(rèn)是1秒檢查一次乎婿,如果加上自身配置上面的配置至少要4秒或者大小為2M才能自動提交一次测僵。
4. KV單條的最大Size,如果你像 **大豬佩琪** 上面一樣配置為1谢翎,信不信分分鐘鐘讓你體會 `KeyValue size too large` 異常捍靠,就是下面的案發(fā)現(xiàn)場:

不設(shè)置就默認(rèn)為 **10M** 大小。
5. 看到情人了森逮,一看就是我們最想要的設(shè)置榨婆,可以看樓下的`doFlush`源碼,
有三個地方會調(diào)用到這個方法:`mutate`褒侧、`close`良风、`flush`
只有第一個是會按照`writeBufferSize`來大小來自動計算谊迄,其它兩個都是`flushAll`操作,屬于不黃但很暴力的那種烟央。

6. 這句跟第1句一樣看不懂统诺,肥家。
## 使用
上面的解析已經(jīng)完了疑俭,相信大家都會用了粮呢,還不會的話,請看下圖 **+** 例子:

給你給你

## 源碼
Hbase 2.x 配置
`org.apache.hadoop.hbase.client.ConnectionConfiguration` 頭部默認(rèn)配置

validatePut 源碼

doFlush 源碼

---
