HDFS 异构存储及存储策略
一、支持的存储类型
HDFS支持以下主要存储类型,按性能从高到低排列:
-
SSD(固态存储)
- 特点:高性能、低延迟,适合频繁访问的热数据。
- 配置标识:
[SSD]
-
DISK(机械硬盘)
- 特点:性价比高,容量大,适合一般访问频率的数据。
- 配置标识:
[DISK]
(默认类型)
-
ARCHIVE(归档存储)
- 特点:低功耗、低成本,访问延迟高,适合冷数据。
- 配置标识:
[ARCHIVE]
-
RAM_DISK(内存磁盘)
- 特点:超高性能,数据存储在内存中,适合极热数据。
- 配置标识:
[RAM_DISK]
-
** PROVIDED(外部存储)**
- 特点:支持外部存储系统(如AWS S3、Azure Blob)。
- 配置标识:
[PROVIDED]
二、存储策略介绍
HDFS中的HOT、WARM、COLD策略是存储策略,用于根据数据的访问频率和特性,将数据存储在不同类型的存储介质上,以优化存储成本和访问性能。具体如下:
- HOT存储策略:
- 特点:适用于频繁访问的热数据,存储类型为DISK。该策略将数据存储在性能较高的磁盘介质上,以提供高吞吐量和低延迟的访问性能,满足对数据实时性要求较高的应用场景,如实时分析、在线事务处理等。
- 配置方式:可通过
hdfs storagepolicies -setStoragePolicy -path <路径> -policy HOT
命令将指定路径下的数据设置为HOT存储策略。
- WARM存储策略:
- 特点:用于存储访问频率适中的半冷半热数据,存储类型为DISK和ARCHIVE。此策略在存储成本和访问性能之间取得平衡,将一部分副本存储在常规磁盘(DISK)上以满足一定的访问速度要求,另一部分副本存储在归档存储(ARCHIVE)中以降低存储成本。
- 配置方式:使用
hdfs storagepolicies -setStoragePolicy -path <路径> -policy WARM
命令来设置指定路径的数据采用WARM存储策略。
- COLD存储策略:
- 特点:用于存储极少访问的冷数据,存储类型为ARCHIVE。这种策略将数据存储在成本较低、但访问延迟相对较高的归档存储介质上,适合用于存储归档数据、备份数据以及对访问实时性要求不高的历史数据等。
- 配置方式:通过
hdfs storagepolicies -setStoragePolicy -path <路径> -policy COLD
命令将相应路径下的数据配置为COLD存储策略。
在使用这些存储策略时,需要先开启HDFS的存储策略功能,即设置dfs.storage.policy.enabled
参数为true
(默认值通常为true
)。同时,更改存储策略后,目录下的文件不会自动按新策略迁移数据,需要通过hdfs mover -p <路径>
命令来触发数据按新存储策略进行迁移。
三、定义异构存储策略
1. 配置DataNode存储目录
在hdfs-site.xml
中定义各存储类型的路径:
<property><name>dfs.datanode.data.dir</name><value>[SSD]/data/ssd,[DISK]/data/hdd1,[DISK]/data/hdd2,[ARCHIVE]/data/archive,[RAM_DISK]/data/ramdisk</value>
</property>
2. 启用存储策略功能
确保以下属性设置为true
(默认已启用):
<property><name>dfs.storage.policy.enabled</name><value>true</value>
</property>
3. 使用内置存储策略
HDFS预定义了5种存储策略,通过名称引用:
策略名称 | 描述 | 适用场景 |
---|---|---|
HOT | 所有副本存储在DISK(默认策略) | 热数据(频繁访问) |
WARM | 至少1个副本在DISK,其他在ARCHIVE | 温数据(偶尔访问) |
COLD | 所有副本存储在ARCHIVE | 冷数据(极少访问) |
ALL_SSD | 所有副本存储在SSD | 高性能需求数据 |
ONE_SSD | 1个副本在SSD,其他在DISK | 部分高性能需求 |
LAZY_PERSIST | 1个副本在RAM_DISK,异步写入DISK | 临时高速缓存数据 |
四、管理存储策略
1. 查看可用策略
hdfs storagepolicies -listPolicies
2. 为目录/文件设置策略
# 设置目录为WARM策略
hdfs storagepolicies -setStoragePolicy -path /data/warm -policy WARM# 设置文件为COLD策略
hdfs storagepolicies -setStoragePolicy -path /data/archive/logs.txt -policy COLD
3. 迁移数据到新策略
更改策略后,需手动触发数据迁移:
hdfs mover -p /data/warm # 迁移路径下的数据到新策略
4. 验证策略应用
hdfs storagepolicies -getStoragePolicy -path /data/warm
五、自定义存储策略(高级)
如需自定义策略,可通过修改hdfs-site.xml
添加:
<property><name>dfs.storage.policy.table</name><value><Policy><Name>CUSTOM_HYBRID</Name><StorageTypes>SSD,DISK,ARCHIVE</StorageTypes><CreationFallbacks>SSD,DISK,ARCHIVE</CreationFallbacks><ReplicationFallbacks>DISK,ARCHIVE</ReplicationFallbacks></Policy></value>
</property>
- StorageTypes:定义策略允许的存储类型顺序。
- CreationFallbacks:创建文件时的降级顺序(如SSD不可用时)。
- ReplicationFallbacks:副本恢复时的降级顺序。
六、注意事项
- 存储类型可用性:DataNode必须实际配置了对应存储类型的目录,策略才能生效。
- 性能与成本权衡:
- SSD/RAM_DISK提升性能但成本高,适合热数据。
- ARCHIVE降低成本但访问延迟高,适合冷数据。
- 迁移开销:大规模数据迁移可能影响集群性能,建议在低峰期执行。
通过异构存储策略,HDFS可根据数据价值动态分配存储资源,在保证性能的同时降低总体拥有成本(TCO)。