如果HDFS不允許修改文件,HBase如何存儲和修改數據?由於結果主要面向HBase物理數據格式,因此很難搜索這個問題的答案。但我無法找到HBase如何解決HHDFS文件不可變的問題?HDFS如何修改數據
2
A
回答
5
HBase以索引形式將數據存儲在HDFS中。爲了簡化事物,HDFS文件將按照排序順序存儲密鑰,以便快速查找特定密鑰。 HBase數據存儲在RegionServers(RS)中處理。
在RS中,密鑰首先被寫入內存存儲(稱爲memstore)。 memstore存儲新的密鑰/更新刪除。經過一定的閾值後,這些密鑰將作爲新索引文件推送到HDFS。更新由時間戳處理 - 假定最新版本是唯一有效的版本。所以如果以前的索引文件具有相同的密鑰,它將被忽略。刪除與更新相同,唯一的區別是刪除有一個特殊的類型字段,其中有一個將該鍵標記爲已刪除的標誌。
我已經做了一些簡化:
- 索引文件格式已經隨着時間的推移發生了很大變化。最初,它是
MapFile
。最新版本的HBase使用名爲HFile
的格式,其中包含特定於HBase的元數據和優化。 - 的寫操作都記錄在一個WAL(預寫日誌)磁盤,他們進入的memstore之前。這是爲了防止數據丟失。
我還發現了幾個優秀的相關的文章,你應該閱讀:
0
HBase的做了幾件事情(以下是簡化的,但它解釋了總體思路): 爲了保持一致性,它在數據到達時寫入WAL文件 - 因此數據沒有變化。
「問題」是與將數據存儲在一個有序的方式HFiles。 HBase解決這個問題的第一件事就是它將數據保存在內存中(每個區域的memstore),並且只有當它們被填充時纔將它們刷新到磁盤。這節省了一些重寫。
在保存之前等待只解決了一些問題,仍然存在需要重新排列數據的情況 - (例如,對同一個鍵等進行重複更新),所以HBase所做的第二件事是壓縮讀取多個HFile並創建與合併數據新的(並刪除舊文件)
相關問題
- 1. 修改數據
- 2. 修改HDFS的塊放置策略
- 3. 使用mapreduce在hdfs上修改文件
- 4. 如何修改DevExpress中的數據之前修改數據報告
- 5. Ember.js:如何修改RESTSerializer中的數據
- 6. 如何限制Firebase數據修改?
- 7. 如何修改粘貼的數據? Jquery
- 8. 如何使用winpcap修改數據包
- 9. Python的 - 如何在不修改數據
- 10. 如何修改python中的EXIF數據
- 11. 如何修改android中的數據庫
- 12. 如何修改值數據庫中
- 13. 如何修改javascript中的POST數據?
- 14. 如何修改數據使其唯一?
- 15. 如何修改插入的數據
- 16. 如何修改fiddler中的json數據。
- 17. 如何修復損壞的HDFS文件
- 18. 修改數據表
- 19. 修改JSON數據
- 20. 修改數據庫
- 21. 修改數據庫
- 22. 如何將加密數據寫入HDFS
- 23. 如何從HDFS獲取數據?蜂巢?
- 24. 如何從HDFS中檢索Avro數據?
- 25. 如何從hdfs獲取特定數據?
- 26. 數據來源HDFS
- 27. HDFS數據統計
- 28. 如何修改rowconcat函數?
- 29. Perl如何修改參數
- 30. 如何修改數組?
非常感謝,這是真正的幫助,也感謝您的鏈接。 – user2833557