hdfs如何讓某些數據查詢快,某些數據查詢慢?
- hdfs冷熱數據分層存儲
本質: 不同路徑制定不同的存儲策略。
hdfs存儲策略
hdfs的存儲策略 依賴於底層的存儲介質。
- hdfs支持的存儲介質:
- ARCHIVE:高存儲密度但耗電較少的存儲介質,例如磁帶,通常用來存儲冷數據
- DISK:磁盤介質,這是HDFS最早支持的存儲介質
- SSD:固態硬盤,是一種新型存儲介質,目前被不少互聯網公司使用
- RAM_DISK :數據被寫入內存中,同時會往該存儲介質中再(異步)寫一份
- 存儲策略可配置,可以設置全局的,也可以設置到某個文件夾。
- Lazy_persist:一個副本保存在內存RAM_DISK中,其余副本保存在磁盤中
- ALL_SSD:所有副本都保存在SSD中
- One_SSD:一個副本保存在SSD中,其余副本保存在磁盤中
- Hot:所有副本保存在磁盤中,這也是默認的存儲策略
- Warm:一個副本保存在磁盤上,其余副本保存在歸檔存儲上
- Cold:所有副本都保存在歸檔存儲上
所謂的存儲策略,其實就是將數據存儲在不同的存儲介質中。如果數據存儲在SSD中,讀寫速度自然比存儲在機械硬盤中的數據快。
總體上HDFS異構存儲的價值在於,根據數據熱度采用不同策略從而提升集群整體資源使用效率。對於頻繁訪問的數據,將其全部或部分保存在更高訪問性能的存儲介質(內存或SSD)上,提升其讀寫性能;對於幾乎不會訪問的數據,保存在歸檔存儲介質上,降低其存儲成本。但是HDFS異構存儲的配置需要用戶對目錄指定相應的策略,即用戶需要預先知道每個目錄下的文件的訪問熱度,在實際大數據平台的應用中,這是比較困難的一點。
如何配置存儲策略
$ hdfs storagepolicies -help
[-listPolicies]
List all the existing block storage policies.
[-setStoragePolicy -path <path> -policy <policy>]
Set the storage policy to a file/directory.
<path> The path of the file/directory to set storage policy
<policy> The name of the block storage policy
[-getStoragePolicy -path <path>]
Get the storage policy of a file/directory.
<path> The path of the file/directory for getting the storage policy
事先划分好冷熱數據存儲目錄,設置好對應的Storage Policy,然后后續相應的程序在對應分類目錄下寫數據,自動繼承父目錄的存儲策略。
如何修改已有配置?
數據遷移
為了讓存儲策略生效了,hdfs中提供了一個新的數據遷移工具mover,mover與balancer工具相似都是周期觸發的,運行時,它會掃描hdfs中各個文件的block以確認該block塊的當前存儲是否滿足用戶指定的storage policy,對於那些storage policy發生變化的block塊,該工具會將對應的block塊進行遷移。
關於HBASE的冷熱數據存儲
- HBASE數據存儲於hdfs的相對路徑,可以通過制定hbase相對路徑的存儲策略,來讓hbase的數據存儲於SSD
hbase如何利用上述hdfs的異構存儲特性?
HBase-12848(Utilize Flash storage for WAL)是1.1.0新推出的特性,它可以將WAL單獨置於SSD上,配置方式是將如下的配置做相應修改:
hbase.wal.storage.policy
該配置的默認值是NONE,也就是wal文件和數據都存儲在DISK上,不做區分,可以修改為ONE_SSD或者ALL_SDD,不同在於:
ONE_SSD:wal的一個副本置於SSD上,而其他副本仍然在默認存儲;
ALL_SSD:wal文件的所有副本都存儲於SSD盤上;
HDFS糾刪碼
HDFS糾刪碼技術能夠降低數據存儲的冗余度,以RS(3,2)為例,其數據冗余度為67%,相比Hadoop默認的200%大為減少。但是糾刪碼技術存儲數據和數據恢復都需要消耗cpu進行計算,實際上是一種以時間換空間的選擇,因此比較適用的場景是對冷數據的存儲。冷數據存儲的數據往往一次寫入之后長時間沒有訪問,這種情況下可以通過糾刪碼技術減少副本數。
大數據存儲優化:SSM
SSM(Smart Storage Management)系統
異構存儲原理
概況性的總結為3小點:
- DataNode通過心跳匯報自身數據存儲目錄的StorageType給NameNode,
- 隨后NameNode進行匯總並更新集群內各個節點的存儲類型情況
- 待復制文件根據自身設定的存儲策略信息向NameNode請求擁有此類型存儲介質的DataNode作為候選節點
從以上3點來看,本質原理並不復雜.
其他問題探討
- 同一類數據內部 是否支持冷熱數據存儲?比如讓1年內的數據查詢比較快,2-5年的數據查詢比較慢?
- A: 有幾個方案:
- SSM: 不成熟,還未大量使用
- 分表:需要編寫分表中間件等。此外hbase的region實際上就是幫我們做了分表的工作,屏蔽了分表的細節。
......
參考文獻
tips:本文屬於自己學習和實踐過程的記錄,很多圖和文字都粘貼自網上文章,沒有注明引用請包涵!如有任何問題請留言或郵件通知,我會及時回復。