Hbase面試題(持續更新)
1、每天百億資料存入HBase,如何保證資料的儲存正確和在規定的時間裡全部錄入完畢,不殘留資料
1)百億資料:證明資料量非常大
2)存入HBase:證明是跟HBase的寫入資料有關
3)保證資料的正確:要設計正確的資料結構保證正確性
4)在規定時間內完成:對存入速度是有要求的
那麼針對以上的四個問題我們來一一分析
1)資料量百億條,什麼概念呢?假設一整天60x60x24 = 86400秒都在寫入資料,那麼每秒的寫入條數高達100萬條,HBase當然是支援不了每秒百萬條資料的,所以這百億條資料可能不是通過實時地寫入,而是批量地匯入。批量匯入推薦使用BulkLoad方式(
2)存入HBase:普通寫入是用JavaAPI put來實現,批量匯入推薦使用BulkLoad
3)保證資料的正確:這裡需要考慮RowKey的設計、預建分割槽和列族設計等問題
4)在規定時間內完成也就是存入速度不能過慢,並且當然是越快越好,使用BulkLoad
2、Hbase的六大特點
(1)表大:一個表可以有數億行,上百萬列。
(2)無模式:每行都有一個可排序的主鍵和任意多的列,列可以根據需要動態增加,同一個表中的不同行的可以有截然不同的列。
(3)面向列:HBase是面向列的的儲存和許可權控制,列族獨立索引。
(4)稀疏:空(null)列並不佔用空間,表可以設計的非常稀疏。
(5)資料型別單一:HBase中的資料都是字串,沒有型別。
(6)資料多版本:每個單元中的資料可以有多個版本,預設情況下版本號自動分配,是單元格插入時的時間戳。
3、Hbase的rowkey設計原則:
(1)rowkey長度原則:rowkey是一個二進位制流,長度開發者建議是10-100位元組,不過建議越短越好,最好不超過16位元組。原因是:資料持久化檔案HFile中是按照按照key/value儲存的,如果rowkey太長的話就會影響HFile的儲存效率。Memstore將快取資料到記憶體,如果rowkey欄位過長記憶體的有效利用會降低,系統將會無法快取更多的資料,降低檢索的效率。
(2)rowkey雜湊原則:如果rowkey是按照時間戳方式遞增的話,不要將時間放在二進位制碼的前面,建議將rowkey的高位作為雜湊欄位,如果沒有雜湊欄位就會出現一個regionServer上堆積的熱點現象。
(3)rowkey的唯一原則:rowkey不能為空且唯一。
4、Hbase的查詢方式
1、全表查詢:scan tableName
2、基於rowkey的單行查詢:get tableName,‘1’
3、基於rowkey的範圍掃描:scan tableName, {STARTROW=>‘1’,STOPROW=>‘2’}
4、get和scan方法:
(1)、按指定的rowkey獲取唯一一條資料,get方法:分為兩種,分別是設定了closestRowBefore和沒有設定的rowlock,只要保證行的事務性,即每一個get是以一個row來標記的,一個row中可以有多個family和column。
(2)、按指定的條件獲取一批記錄,條件查詢。1、scan可以通過setCaching和setBatch方法來提高速度;2、scan也可以通過setStartRow和setEndRow來限定範圍(左閉右開),3、scan還可以通過setFileter方法來新增過濾器。
ps:setCache和setBatch方法:
setCache方法:這個方法設定即一次RPC請求放回的行數,對於快取操作來說,如果返回行數太多了,就可能記憶體溢位,那麼這個時候就需要setBatch方法,。
setBatch:設定這個之後客戶端可以選擇取回的列數,如果一行包括的列數超過了設定的值,那麼就可以將這個列分片。例如:如果一行17列,如果batch設定為5的話,就會返回四組,分別是5,5,5,2。、
※:Cache設定了伺服器一次返回的行數,而Batch設定了伺服器一次返回的列數。
ps:Batch引數決定了一行資料分為幾個result,它只針對一行資料,Cache決定了一次RPC返回的result個數。
RPC請求次數 = (行數 * 每行列數) / Min(每行的列數,批量大小) / 掃描器快取
5、Hbase的讀寫流程:
1、HBase的讀流程:
(1)、HRegisonServer儲存著.meta.表及資料表,首先client先訪問zk,訪問-ROOT-表,然後在zk上面獲取.meta.表所在的位置資訊,找到這個meta表在哪個HRegionServer上面儲存著。
(2)、接著client訪問HRegionServer表從而讀取.meta.進而獲取.meta.表中存放的後設資料。
(3)、client通過.meta.中的後設資料資訊,訪問對應的HRegionServer,然後掃描HRegionServer的Memstore和StoreFile來查詢資料。
(4)、最後把HRegionServer把資料反饋給client。
2、HBase的寫流程:
(1)client訪問zk中的-ROOT-表,然後後在訪問.meta.表,並獲取.meta.中的後設資料。
(2)確定當前要寫入的HRegion和HRegionServer。
(3)clinet向HRegionServer發出寫相應的請求,HRegionServer收到請求並響應。
(4)client先將資料寫入到HLog中,以防資料丟失。
(5)然後將資料寫入到MemStore中。
(6)如果HLog和MemStore都寫入成功了,那麼表示這個條資料寫入成功了。
(7)如果MemStore寫入的資料達到了閾值,那麼將會flush到StoreFile中。
(8)當StoreFile越來越多,會觸發Compact合併操作,將過多的StoteFile合併成一個大的StoreFile。
(9)當StoreFile越來越多時,Region也會越來越大,當達到閾值時,會觸發spilit操作,將這個Region一分為二。
ps:HBase中所有的更新和刪除操作都會在後續的compact中進行,使得使用者的寫操作只需要進入記憶體中就行了。實現了HBase的 I/O高效能。
相關文章
- AI面試題(持續更新)AI面試題
- Spring面試題(持續更新中)Spring面試題
- 前端面試問題(持續更新)前端面試
- 前端面試問題二(持續更新)前端面試
- PHP面試題總結-持續更新中PHP面試題
- GO面試題集錦快答[持續更新]Go面試題
- 資料分析面試|SQL真題持續更新面試SQL
- 【前端面試】Vue面試題總結(持續更新中)前端Vue面試題
- 前端面試題總結——HTML(持續更新中)前端面試題HTML
- 前端面試題總結——綜合問題(持續更新中)前端面試題
- 整理有關面試普遍問題和回答技巧 (持續更新~)面試
- 前端面試的一些題目(持續更新中)前端面試
- 2019 Vue 面試題彙總(持續更新中...)Vue面試題
- 前端面試題總結——Html5(持續更新中)前端面試題HTML
- 前端面試經典題目彙總(持續更新中)前端面試
- Flutter 問題集,持續更新Flutter
- 京東前端二面高頻手寫面試題(持續更新中)前端面試題
- 【C++】C++常見面試題彙總,持續更新中…C++面試題
- leetcode題解【持續更新】LeetCode
- javaScript 習題總結(持續更新)JavaScript
- 總結Java開發面試常問的問題,持續更新中~Java面試
- JVM(持續更新。。。)JVM
- FastApi持續更新ASTAPI
- 持續輸出面試題之Nginx面試題Nginx
- 前端演算法類面試總結(持續更新...)前端演算法面試
- 前端工程師面試必備(持續更新中)前端工程師面試
- 面試心得與總結-——答案整理_4 持續更新面試
- 劍指Offer——面試小提示(持續更新中)面試
- 2020年騰訊實習生C++面試題&持續更新中(3)C++面試題
- 持續輸出面試題之RocketMQ篇面試題MQ
- Blender 雕刻 持續更新
- 【Java面試題系列】:Java基礎知識面試題,看這一篇就夠了(持續更新)Java面試題
- 作業系統(考研,面試,期末複習)- 持續更新作業系統面試
- hadoop 日常問題彙總(持續更新)Hadoop
- 【CTF入門】BUUCTF Misc刷題(持續更新)
- Java執行緒池底層原始碼分享和相關面試題(持續更新)Java執行緒原始碼面試題
- 2019最新Web前端經典面試試題及答案,持續更新Web前端面試
- 持續輸出面試題系列之ZooKeeper篇面試題