hbase資料庫scan操作 HBase的Scan

2021-10-12 15:53:40 字數 1212 閱讀 6862

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安裝目錄...