hbase在大規模資料資料集情況下拉取資料時,若rowkey密集集中在一台節點,則在批量拉取資料時容易出現資料拉取速度很慢或者出現timeout,如果資源允許的情況下,可以將rowkey根據自己的規則手動split到多個分割槽中,從而把rowkey均勻打到多台伺服器,這樣在資料獲取時就不會因為rowkey集中而對單台hbase伺服器壓力過大導致超時影響任務執行。
先看一下寫入hbase的基本語法與addcolumn原始碼。put方法,這裡第一行即為我們傳入的rowkey,通過addcolumn方法分別新增列簇famliy,標識qualifier還有值value。這裡只需要知道split分割槽需要用到的rowkey就是我們put方法寫入hbase表的rowkey。
val put: put = new put(bytes.tobytes(rowkey))
put.addcolumn(bytes.tobytes(aaa), bytes.tobytes(bbb), bytes.tobytes(ccc))
public put addcolumn(byte family, byte qualifier, byte value)
首先根據自己的hbase伺服器呼叫hbaseconfiguration配置好quorum,port等引數,然後建立連線獲取admin,在建表時加入splitkeys即可。
1)這裡splitkeys是基於先驗資訊得到的,即你已經對自己寫入hbase表中的rowkey分布有大致了解,如果還不了解,可以事先隨機取樣一部分做等距或等分布的方法找到合適的劃分區間作為自己分割槽劃分的依據
2)由於hbase是基於byte來操作,所以相應的splitkeys需要轉換為位元組的形式
3)建表完成後,put資料進去後就會根據splitkeys與相應的quorum配置,均勻的打到各台hbase伺服器上
def gethbaseregion(tablename: string): unit =
val tname = valueof(tablename)
//建立hbase表模式
val descriptor = new htabledescriptor(tname)
descriptor.addfamily(new hcolumndescriptor("cf"))
//建立表
admin.createtable(descriptor,splitkesy)
}
分割槽並put資料得到新的分割槽表,可以看到rowkey的分布很均勻,再次拉取資料未出現超時的情況發生。
Oracle 建立分割槽表
建立表空間 create tablespace mytablespace 1 datafile c oracle product 10.1.0 oradata mydata mytablespace1.dbf size 100m extent management local uniform siz...
hive 建立分割槽表
必須在表定義時建立partition a 單分割槽建表語句 create table day table id int,content string partitioned by dt string 單分割槽表,按天分割槽,在表結構中存在id,content,dt三列。以dt為資料夾區分 b 雙分割...
Oracle 建立分割槽表
建立表空間 create tablespace mytablespace 1 datafile c oracle product 10.1.0 oradata mydata mytablespace1.dbf size 100m extent management local uniform siz...