基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

什么是HDFS的异构存储(Heterogeneous Storage)?有哪些常见的存储策略(Storage Policies)?

知识点图片

HDFS的异构存储(Heterogeneous Storage)是Hadoop 2.6版本引入的一项重要特性。在早期版本的HDFS中,系统默认集群中所有的存储介质都是同构的(通常是普通的机械硬盘HDD)。但随着硬件的发展和业务需求的变化,这种“一视同仁”的存储方式无法兼顾性能成本

以下是关于HDFS异构存储及其存储策略的详细解析:

一、 什么是HDFS的异构存储?

异构存储允许HDFS在一个集群中,甚至在同一个DataNode节点上,管理不同类型的存储介质(如内存、固态硬盘SSD、普通机械硬盘HDD、高密度归档硬盘等)。

核心目的(解决的痛点):

  1. 性能优化(热数据): 对于频繁被计算框架(如Spark, Flink, MapReduce)访问的“热数据”,将其放在读写速度极快的RAM或SSD上,大幅降低计算延迟。
  2. 成本控制(冷数据): 对于长时间不再访问的历史数据、备份数据等“冷数据”,将其迁移到大容量、低成本的归档节点(Archive)上,节省昂贵的硬件成本。
  3. 数据生命周期管理: 配合数据所处的不同生命周期阶段(热 -> 温 -> 冷),动态调整数据所在的存储介质。

二、 HDFS支持的4种基础存储类型(Storage Types)

在配置异构存储之前,DataNode在挂载磁盘时需要给不同的目录打上标签,HDFS定义了以下4种基本的存储类型:

  1. RAM_DISK (内存): 用于存储极度频繁访问且允许短暂丢失的数据,通常配合“懒持久化(Lazy Persist)”使用。读写极快,但断电会丢失。
  2. SSD (固态硬盘): 用于存储经常被访问的“热数据”或需要高并发读写的数据。
  3. DISK (普通机械硬盘): HDFS的默认存储介质。性价比均衡,适合大部分常规数据。
  4. ARCHIVE (归档存储): 高密度存储(通常指单盘容量极大但转速较慢的廉价HDD),计算能力较弱,专门用于存储极少访问的“冷数据”。

三、 常见的存储策略(Storage Policies)

存储策略定义了文件的副本应该存放在哪些类型的存储介质上。假设默认副本数为3(N=3),HDFS提供了以下6种标准的存储策略:

策略名称 (Policy Name) 策略ID 副本分布 (假设N=3) 适用场景
Hot (热) 7 3个副本全部放在 DISK 默认策略。适用于普通的正在被处理或经常访问的数据。
Cold (冷) 2 3个副本全部放在 ARCHIVE 适用于历史存档、审计日志等不再参与日常计算的数据,最大化节省成本。
Warm (温) 5 1个副本放在 DISK
2个副本放在 ARCHIVE
适用于刚从“热”转为“冷”的数据。保留1个DISK副本保证偶然查询时的读取性能,另外2个做廉价冗余。
All_SSD (全SSD) 12 3个副本全部放在 SSD 适用于实时计算、高频机器学习训练集等对IO要求极高的数据。
One_SSD (单SSD) 10 1个副本放在 SSD
2个副本放在 DISK
适用于读密集型任务。通过一个SSD副本加速数据读取,另外两个放在普通的DISK上节省SSD空间。
Lazy_Persist
(懒持久化)
15 1个副本写在 RAM_DISK
其余副本异步写在 DISK
适用于需要极低写入延迟的场景。数据先写入内存快速返回,后台再异步刷写到普通磁盘,如果节点宕机可能会丢失还没刷盘的数据。

(注:如果请求的存储类型空间不足,HDFS有一套降级Fallback机制,比如SSD满了会自动写到DISK上)


四、 如何使用和管理异构存储?

在实际的企业应用中,异构存储通常配合以下机制使用:

1. DataNode目录配置:
hdfs-site.xml 中,管理员通过给数据目录加前缀来声明存储类型:

xml
<property>
  <name>dfs.datanode.data.dir</name>
  <value>[SSD]file:///data/ssd1,[DISK]file:///data/hdd1,[ARCHIVE]file:///data/archive1</value>
</property>

2. 命令行设置存储策略:
用户可以通过HDFS命令行对目录或文件指定策略:

bash
# 查看所有支持的策略
hdfs storagepolicies -listPolicies

# 给指定目录设置Cold冷存储策略
hdfs storagepolicies -setStoragePolicy -path /user/history_logs -policy Cold

# 获取某目录当前的策略
hdfs storagepolicies -getStoragePolicy -path /user/history_logs

3. 数据迁移工具 (Mover Tool):
当你改变了一个已存在文件的存储策略后,HDFS不会自动马上移动数据。你需要手动运行 Mover 工具。它类似于 Balancer,会在后台扫描并把数据块物理搬迁到匹配的存储介质上。

bash
# 启动Mover工具迁移特定目录的数据
hdfs mover -p /user/history_logs

总结

HDFS异构存储本质上是对Hadoop集群硬件资源的精细化管理。通过合理配置 Hot -> Warm -> Cold 的数据生命周期流转,企业可以在不显著降低计算性能的前提下,大幅削减海量数据的存储成本。

00:00
00:00