HDFS在Ubuntu上的数据存储策略概览
HDFS提供基于存储介质与业务热度的多种数据存储策略,用于平衡性能、成本与可靠性。Ubuntu与HDFS的发行版无关,策略与配置方法在Ubuntu上同样适用。核心包括:存储类型、内置存储策略、副本放置与磁盘选择机制,以及生效与迁移方式。
一、存储类型
- DISK:普通机械盘,默认存储类型,容量与成本均衡。
- SSD:固态盘,高吞吐低时延,适合热数据。
- ARCHIVE:高密度低成本介质,适合冷数据长期保存。
- RAM_DISK:内存盘,性能最高但容量小且掉电易失,多用于加速写入。
这些类型需在DataNode的数据目录上显式标注,HDFS不会自动识别介质类型。
二、内置存储策略与副本放置
下表概述HDFS常见内置策略、副本分布与典型用途(n为副本数):
| 策略 |
副本放置 |
说明与典型场景 |
| HOT(默认) |
DISK: n |
全部副本在DISK,适合频繁访问的热数据。 |
| WARM |
DISK: 1, ARCHIVE: n-1 |
一份在DISK便于计算,其余归档,适合访问下降的数据。 |
| COLD |
ARCHIVE: n |
全部在ARCHIVE,适合极少访问的长期留存。 |
| ALL_SSD |
SSD: n |
全SSD,适合高吞吐低时延场景。 |
| ONE_SSD |
SSD: 1, DISK: n-1 |
一个副本在SSD加速访问,其余在DISK控成本。 |
| LAZY_PERSIST |
RAM_DISK: 1, DISK: n-1 |
首副本先落RAM_DISK后回写DISK,适合写性能敏感且容忍数据丢失的场景。 |
| PROVIDED |
HDFS之外 |
数据在HDFS外部存储,由外部系统管理。 |
| 策略生效遵循命名空间继承:未显式设置时,继承最近祖先策略,根目录使用默认策略。 |
|
|
三、策略生效与数据迁移
- 启用与配置
- 在hdfs-site.xml中启用策略:dfs.storage.policy.enabled=true。
- 在DataNode上为各目录标注存储类型,例如:
dfs.datanode.data.dir=[SSD]/ssd1,[DISK]/disk1,[ARCHIVE]/archive1。
- 注意:未标注类型的目录默认视为DISK。
- 常用命令
- 列出策略:hdfs storagepolicies -listPolicies
- 设置策略:hdfs storagepolicies -setStoragePolicy -path -policy
- 查看策略:hdfs storagepolicies -getStoragePolicy -path
- 取消策略:hdfs storagepolicies -unsetStoragePolicy -path
- 物理迁移
- 仅修改策略不会自动搬迁块,需使用Mover将数据按策略迁移到目标介质。
- 校验分布:hdfs fsck -files -blocks -locations
以上步骤在Ubuntu与主流Linux发行版一致。
四、副本放置与磁盘选择机制
- 副本放置策略
- 默认使用BlockPlacementPolicyDefault按机架感知与副本数均匀放置;可替换为AvailableSpaceBlockPlacementPolicy等以优先选择可用空间更充足的节点。
- DataNode磁盘选择策略
- RoundRobinVolumeChoosingPolicy:轮询选择卷,简单均衡但易受单次写入大小影响。
- AvailableSpaceVolumeChoosingPolicy:按可用空间分层(阈值balancedSpaceThreshold,默认10G),高可用空间卷优先写入,并按概率(参数balancedSpacePreferenceFraction,默认0.75)在高/低可用空间卷间选择,缓解“短板盘”问题。
这些机制与存储策略协同工作,实现按介质与空间的智能放置。
五、实践建议
- 明确冷热分层:热数据用HOT/ONE_SSD/ALL_SSD,温冷数据用WARM/COLD归档到ARCHIVE。
- 写加速但需持久化:对容忍少量丢失的写敏感场景可用LAZY_PERSIST,并确保dfs.datanode.max.locked.memory大于dfs.blocksize,且RAM_DISK容量充足。
- 变更策略后记得运行Mover做物理迁移,并用fsck -locations核对块分布。
- 规划dfs.datanode.data.dir时按介质分组标注,避免把SSD与ARCHIVE混用在同一目录前缀下导致策略失效。
上述做法有助于在Ubuntu环境中获得稳定且可预期的性能与成本表现。