hbase的scan和get不同,前者獲取資料是序列,後者則是並行;是不是有種大跌眼鏡的感覺?
scan有四種模式:scan,(table)snapscan,(table)scanmr,snapshotscanmr;前面兩個是序列玩;後面兩個是放置到mapreduce中玩;其中效能最好的就是snapshotscanmr;
首先解釋一下什麼是snapshort,snapshot是hbase資料表元資料的乙個快照,是的,不包括資料;有一點概念要建立清楚,hbase的資料的儲存並不是hbase管理,而是hdfs;其實關係型資料庫的儲存也是osfs管理的。hbase的設計就是一旦資料寫入了,就不改變了,改變操作(update,delete)並不是修改hfile,而是填充墓碑檔案而已;所以快照尤其價值,比如可以快速拷貝乙個hbase表(只是拷貝表結構,重用原始表的hdfs資料)。
剛才講的snapshot在scan裡面也有應用場景,就是snapshotscan以及snapshortscanmr;注意mr的scan模式就不再是最上面提到的序列查詢,而是並行查詢;底層機制是map-reduce;所以就下來而言,mr是要高的;畢竟是多個region查詢。
接著,就是scanapi的設計:
1. 業務呼叫hbase client,hbaseclient首先是查詢快取是否還有資料,如果有則返回資料;
2. 如果沒有資料,則通過向regionserver繼續請求下面的100條記錄;
3. 作為伺服器端接收到next請求之後,將會通過查詢blockcache→hfile→memstore流程來一行一行的返回資料。
這種api的呼叫模式(每次返回100條)目的是避免網路資源以及hbase client端記憶體資源發生壓力;所以可以看到,scanapi其實只是適合於少量資料的處理;
可以看到,模式很類似,都是在client中通過多執行緒模式進行並行處理;但是snapshotscanmr不再和region server互動,而是直接在客戶端和hdfs互動;這樣設計的好處即使減輕了region server的壓力;但是需要事先和region server互動,獲取snapshot的資訊,即hbase的元資料資訊(表結構以及hdfs儲存資訊),這樣,就可以跳過region server直接和hdfs位址互動;但是snapshot有乙個缺點:實時性不夠;可能最近的一些資料的修改沒有在snapshot中體現出來。可能會讀到一些髒資料(刪除更新資料仍然存在,只不過在墓碑記錄而已,當然如果merge過後就沒了),可能讀不到一些最新資料。
參考:
HBase資料庫操作
學生表student name score english math computer zhangsan lisi 根據上面 給出的學生表student的資訊 執行如下操作 1 用hbase shell命令建立學生 表student 2 用scan命令瀏覽student表的相關資訊 3 查詢zhan...
HBase總結(4) 資料掃瞄與Scan物件
一 介紹 put delete與get物件都是row的子類,從該繼承關係中我們就可以了解到get delete與pu物件本身就只能進行單行的操作,hbase客戶端還提供了一套能夠進行全表掃瞄的api,方便使用者能夠快速對整張表進行掃瞄,以獲取想要的結果 scan 二 流程介紹 全表掃瞄是一種不需要行...
使用Python連線Hbase資料庫
在使用python連線hbase資料庫時,會出現如下錯誤提示,主要原因是版本帶來的語法相容性問題,因此需要用hbase.py和ttypes.py將路徑d program files programdata anaconda3 lib site packages hbase 自己的python安裝目錄...