hbase併發插入之checkAndPut

2021-10-01 21:18:18 字數 836 閱讀 8880

最近在寫spark程式的時候遇到了hbase併發插入的問題,用sparkstreaming來接收kafka的資料,由於資料量較大,我用spark的executer端去並行插入hbase,結果發現有些資料沒插進去,經過排查之後,發現是同乙個批次中行鍵相同的資料,這些資料只能插入一部分或者都能插入,這裡面存在一定的概率問題,原因就是不同的executer端會反覆讀寫這些行鍵相同的資料行,導致資料不滿足一致性。

後來用checkandput解決了這個問題,簡單說來,就是在put資料之前先經過某些條件的驗證,只有滿足條件的put才會入庫。

checkandput(byte row, byte family, byte qualifier, byte value, put put) 第乙個引數是行鍵,第二個引數是列族,第三個引數是列名,第四個引數是預期的列值,最後乙個引數是put物件。

def putsumm(rowkey:string,htable:htableinte***ce,obj:expresspointallosummary): unit =

var ordernumsuccess: boolean = false

// 迴圈寫入資料次數

var ordernumloopnum: int = 0

while (!ordernumsuccess && ordernumloopnum < 20)

println(ordernumsuccess)

}

當然在併發超級高的時候,可能一直不滿足條件,就會一直不入庫,但這種概率是非常低的,可以忽略不計,為了避免陷入死迴圈或者迴圈時間太久,這裡限制只迴圈20次,已經滿足業務場景了。在這裡插入**片

Hbase插入事項

人生的第一篇部落格,寫這些,主要是為了以後看自己曾今的影子。作為一名hbase的初學者,我就是乙個菜鳥,十成十的菜鳥,好了,說下hbase插入時注意的事項。hbase的插入非常的簡單,獲取htable,建立put,使用htable.put put 完事,api就是這麼簡單,但插入時要提公升效率,需要...

Hbase 建立,插入,查詢

1.gang建立表 create user info 表名為user 有乙個列族為 info 2.檢視表 describe user 3.插入資料 put user 1 info age 20 put user 1 info name zhangsan 4.瀏覽表 scan user 5.檢視所有表...

HBase插入資料程式設計

0 概述 1 資料通過put物件進行傳送,每put一次傳送一次,傳送時以mutator形式,2 每次傳送都將物件封裝成linkedlist,再進行一次flush,即一次rpc通訊 1 每次put一條資料 public void putdata1 throws exception 關閉資源 table...