Hive數據導入HBase引起數據膨脹引發的思考
最近朋友公司在做一些數據的遷移,主要是將一些Hive處理之後的熱數據導入到HBase中,但是遇到了一個很奇怪的問題:同樣的數據到了HBase中,所佔空間竟增長了好幾倍!詳談中,筆者建議朋友至少從幾點原因入手分析:
-
HBase中的數據相對於Hive中的數據會新增一些附加資訊導致磁碟佔用的增加,比如布隆過濾器
-
Hive中的數據是否進行過壓縮,比如snappy,壓縮比還是很高的
-
row key和列族都會佔據一定的空間,當數據量較大時,僅二者就會佔據很多不必要的空間
-
建議將相同查詢場景下的幾個常用的列的值拼接成一個列,節省KeyValue結構化帶來的開銷
Hive和HBase都可以作為存儲系統,不禁思考引入HBase做數據存儲的原因?
-
通過scan、get可以批量、單條獲取數據,通過bulkload、put可以批量、單條導入數據
-
在實際生產環境,通常將計算和存儲進行分離,保證集群規模水平可擴展,易於提高整體的吞吐。通過單機性能優化和集群的擴容,確保業務大幅增長時,存儲不能沒有成為系統的瓶頸
-
弱schema的特性能夠很好的應對業務數據頻繁變化的情況,也能夠方便支援一些特殊業務場景的數據邏輯
當然,除了上述原因,還有很多涉及底層的原理環節和實際的業務場景需求,這就要求我們對HBase有足夠的了解。
關聯文章:
HBase中Memstore存在的意義以及多列族引起的問題和設計
關注微信公眾號:大數據學習與分享,獲取更對技術乾貨