比方說,我創建了一個表HBase的列寬掃描和獲取
rowkey(attrId + attr_value)//複合鍵
列=>商務部:DOC1,DOC:DOC2,...
當使用掃描功能時,我會每次在迭代器中獲取1行,如果列限定符達到數百萬條目。你如何循環,並會有緩存問題?
謝謝。
比方說,我創建了一個表HBase的列寬掃描和獲取
rowkey(attrId + attr_value)//複合鍵
列=>商務部:DOC1,DOC:DOC2,...
當使用掃描功能時,我會每次在迭代器中獲取1行,如果列限定符達到數百萬條目。你如何循環,並會有緩存問題?
謝謝。
掃描獲取行。您可以對掃描進行限定,以便它僅提取給定的限定符或給定的家族,但那麼這將從掃描中返回(並且只能對掃描中包含的數據進行過濾)。
如果您在單行中可能有數百萬列,那可能是一個問題:這意味着返回該行可能是非常大的網絡傳輸。如果您的行大小超出您的區域大小,它也可能導致您的區域服務器上發生OOM錯誤,並且存儲空間不足(每個區域一行)。
但是,忽略所有這些,您可以遍歷客戶端中的列和列限定符。您可以從結果集中獲取Map,從映射到限定符到值的映射。但是,這可能不是你真正想做的事
可以解決辦法巨頭一行掃描和列過濾器的混合物提取:
Scan s = ...;
s.setStartRow("some-row-key");
s.setStopRow("some-row-key");
Filter f = new ColumnRangeFilter(Bytes.toBytes("doc0000"), true,
Bytes.toBytes("doc0100"), false);
s.setFilter(f);
來源:http://hadoop-hbase.blogspot.com/2012/01/hbase-intra-row-scanning.html
您也可以限制人數通過Scan.setBatch一次返回一行中的列。