scan掃瞄,類似於資料庫系統中的游標,底層依賴順序儲存的資料結構。掃瞄操作的作用跟get()方式非常類似,但由於掃瞄操作的工作方式類似於迭代器,所以使用者無需呼叫scan()方法建立例項,只需呼叫htable的getscanner()方法【或者使用new scan()】,此方法在返回真正的掃瞄器scanner例項的同時,使用者也可以使用它的迭代來獲取資料。如下:
resultscanner getscanner
(scan scan)
throws ioexception
resultscanner getscanner
(byte
family)
throws ioexception
resultscanner getscanner
(byte
family,
byte
qualifier)
throws ioexception
後兩個為了方便使用者,隱式地建立了乙個scan例項,邏輯中呼叫getscanner(scan scan)方法。
scan類擁有以下構造器:
scan()
// hbase2.x中統一使用set***加以配置
scan
(byte
startrow)
// hbase2.x中已失效
scan
(byte
startrow, filter filter)
// hbase2.x中已失效
scan
(byte
startrow,
byte
filter)
// hbase2.x中已失效
這與get類的不同點時顯而易見的,使用者可以選擇性地提供startrow引數來定義掃瞄讀取hbase表的起始行鍵,即行鍵不是必須指定的。同時可選stoprow引數來限定讀取到何處停止【hbase1.x】。
備註:起始行包括在內,終止行不包括在內。用區間表示為[startrow, stoprow)。
掃瞄操作有乙個特點,使用者提供的引數不必精確匹配到某一行。掃瞄會匹配相等或大於給定起始行鍵的資料。如果沒有顯式地指定起始行,它會從表的起始位置開始獲取資料。終止行與之類似,但不會獲取相同行。
另乙個可選引數叫做過濾器filter,可直接指向filter例項。儘管scan例項通常由空白構造器構造,但其所有可選引數都有對應的getter和setter方法。
建立scan例項後,使用者可能還要給它增加更多的限制條件。這種情況下,使用者仍然可以使用空白引數掃瞄,讀取整個表,包括所有列族和其所屬的所有類。可以使用多種方法限制所要讀取的資料:
scan addfamily
(byte
family)
scan addcolumn
(byte
family,
byte
qualifier)
可以使用addfamily()方法限制返回資料的列族,或者使用addcolumn()方法限制返回的列。
備註:如果使用者只需要資料的子集,那麼限制掃瞄的範圍就能發揮hbase的優勢。因為hbase中的資料是按列族儲存的,如果掃瞄不讀取某個列族,那麼整個列族檔案就不會被讀取,這就是列式儲存架構的優勢!
scan settimerange
(long minstamp,
long maxstamp)
throws ioexception
scan settimestamp
(long timestamp)
scan settimestamp
(long timestamp)
// hbase2.x中已失效,注意大小寫
scan setmaxversions()
// hbase2.x中已失效
scan setmaxversions
(int maxversions)
// hbase2.x中已失效
使用者可以通過settimestamp()設定詳細的時間戳,或者通過settimerange()設定時間範圍進一步對結果進行限制。。還可以使用setmaxversions()方法,讓掃瞄只返回每一列的一些特定版本,或者全部的版本。
scan setstartrow
(byte
startrow)
// hbase2.x中已失效
scan setstoprow
(byte
stoprow)
// hbase2.x中已失效
scan setfilter
(filter filter)
boolean
hasfilter
()
還可以使用setstartrow()、setstoprow()以及setfilter()來進一步限定返回的資料。這3個方法中的引數可以與構造器中的一樣。附加的hasfilter()方法可以檢查是否已經設定過濾器。
其它方法如下:
spark報錯無權訪問hbase
我在提交乙個乙個spark任務是,遇到乙個無權訪問hbase的異常,如下 org.apache.hadoop.hbase.ipc.remotewithextra ception org.apache.hadoop.hbase.security.accessdeniedexception org.ap...
k8s集群中 spark訪問hbase中資料
架構系列文章 首先我們需要對hbase的訪問原理非常清楚.可以參考 我們這裡已經在k8s中部署了hdfs和zookeeper以及hbase.部署可以參考 hbase資料分割槽是按照region進行的,分割槽的location就是各個region的location。那麼後續分配executor時可以按...
hbase資料加鹽讀取(spark篇)
未加鹽資料 spark可以使用inputformat outputformat來讀寫hbase表。加鹽以後 需要在rowkey之前加一些字首,否則是查不到資料的。1 我們需要重新寫getsplits方法 從名字我們可以知道是要計算有多少個splits。在hbase中,乙個region對用乙個spli...