hbase的寫和讀,大合並和小合並
Hbase寫:
客戶端向hbase服務器端發送寫的請求時,hbase會同時進行兩個動作,把記錄寫在WAL(write ahead log)日誌文件中,每臺服務器所有表都共享這個WAL文件。然後會寫到memStore內存中,memStore是內存中的寫入緩存區,如果memStore寫滿就刷新寫到硬盤,生成HFile文件。當服務器宕機時memStore內存中的內容就沒了,這時可以通過回放WAL日誌文件恢復,回放的動作由hbase內部機制調用,不需要用戶調用。
HFile存儲在底層文件系統,hbase是Hadoop數據庫,所以會在分布式文件系統hdfs上,HFile對應列族,一個列族可以有多個HFile文件,一個HFile文件是一個列族中的內容。在集群的每個節點上,每個列族有一個memStore.註意千萬別把WAL關閉
Hbase讀:
hbase讀路徑順序 memStore==>blockCache==>HFile
現在metStore找,找不到就到到blockCache,再找不到就讀取HFile文件到內存中,hbase使用blockCache緩存技術,blockCache保存從HFile中讀取到內存的頻繁訪問的數據,每個列族都有自己的blockCache (block是建立索引的最小數據單元,block大小是可以調整的,默認是64kb)一個完整的行信息可能存放在多個HFile中,為了讀出完整行,Hbase可能需要讀取包含該行信息的所有HFile
hbase合並:
刪除一條記錄,就會在該記錄上打上標記,被打上標記的記錄就成了墓碑記錄,該記錄使用get和scan查詢不到,但還是在HFile中。只有進行大合並的時候才會刪除HFile中的墓碑記錄。大合並:指定region的一個列族的所有HFile.合並完成後,這個列族的所有HFile文件合並成一個HFile文件,可以在shell中手動觸發,但該動作相當耗資源。小合並是將多個小的HFile文件內容讀取出來合並生成一個大的HFile,把新文件設置成激活狀態,然後刪除小的HFile
hbase的寫和讀,大合並和小合並