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