订阅更新

HDFS、S3、OSS到底该用哪个——存储选型和数据湖底座

Hadoop手册 第 14 题 约 7 分钟读完

本文目录
  1. 先说结论
  2. 三种存储方案对比
  3. HDFS的优势和局限
  4. S3/OSS的优势和局限
  5. 存算分离——大趋势
  6. 实战经验:四家公司的存储选型对比
  7. 数据湖格式——弥补对象存储的缺陷
  8. 面试高频追问
  9. 总结

先说结论

2025年的趋势是:对象存储(S3/OSS/GCS)作为数据湖底座 + 湖格式(Delta Lake/Iceberg)提供ACID事务。HDFS在存量系统中仍然大量存在,但新项目越来越少直接用HDFS了。选型的核心因素是:成本、运维复杂度、性能需求、团队能力。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

存储选型是数据架构的第一个决策,也是面试常考的对比题。我在四家公司用过三种存储方案——某短视频平台和某知名出海硬件品牌用的S3,某元宇宙社交公司用的本地HDFS(Doris),某短剧出海公司用的阿里云OSS+MaxCompute。每种方案都有适用场景。面试官问存储选型,考的是你对不同方案的理解深度和选型判断力。

三种存储方案对比

维度HDFSS3/OSS(对象存储)云数仓存储(MaxCompute/BigQuery)
存储成本中(自建服务器成本)低(按量付费,分层存储)低(全托管,按量付费)
运维成本高(NN/DN维护)零(云厂商托管)零(全托管)
读写性能高(本地磁盘直读)中(网络IO延迟)高(内部优化)
并发能力中(受NN限制)高(无限水平扩展)高
ACID事务不支持需要湖格式(Delta/Iceberg)内置支持
弹性扩展差(加节点+数据均衡)无限(按量付费)自动
适用场景自建集群/高性能云上数据湖云上数仓/全托管

HDFS的优势和局限

优势:① 数据本地性——计算可以在数据所在的节点上执行,省了网络传输;② 高吞吐顺序读写——对大文件的顺序读写性能极好;③ 成熟稳定——经过十几年大规模验证。

局限:① NameNode单点瓶颈——元数据在内存里,文件数有上限(几亿级别);② 运维复杂——NN高可用、DN均衡、小文件治理都需要专人维护;③ 弹性差——扩容要加物理节点,缩容要迁移数据,不能按需伸缩;④ 不支持ACID——没有事务,并发写入可能数据不一致。

S3/OSS的优势和局限

优势:① 无限扩展——不需要担心容量上限;② 零运维——不用管节点、磁盘、副本;③ 分层存储——自动把冷数据降级到低成本存储;④ 高可用——11个9的持久性(99.999999999%),基本不可能丢数据。

局限:① 延迟高——每次读写都是HTTP请求,比本地磁盘慢10-100倍;② 列表操作慢——ls一个大目录可能要几十秒;③ 最终一致性——写入后可能短暂读不到最新数据(S3已经改成强一致了,但OSS部分操作还是最终一致);④ 不支持ACID——需要Delta Lake/Iceberg提供事务能力。

存算分离——大趋势

# 传统架构(存算一体)
# Hadoop集群:每个节点既存数据又做计算
# 计算需要更多CPU?加节点(但也多了不需要的磁盘)
# 存储需要更多磁盘?加节点(但也多了不需要的CPU)
# 资源耦合,无法独立扩展
 
# 现代架构(存算分离)
# 存储层:S3/OSS(无限扩展,按量付费)
# 计算层:Spark on K8s / EMR / Databricks
# 计算需要更多CPU?加计算节点(不影响存储)
# 存储需要更多空间?S3自动扩展(不需要加节点)
# 两层独立扩展,互不影响
 
# 代价:计算节点读S3数据有网络延迟
# 解决:本地SSD缓存热数据(Databricks的Delta Cache)
# 实际效果:缓存命中时性能接近本地HDFS

实战经验:四家公司的存储选型对比

公司存储方案计算引擎选型原因
某短视频平台S3Hive+PySpark on EMRAWS生态,团队熟悉S3
某出海硬件品牌S3+Delta LakeDatabricks从EMR迁移后,Delta Lake提供ACID
某元宇宙社交Doris本地SSD+S3冷存Flink+Doris实时查询需要本地SSD性能
某短剧出海MaxCompute(内部存储)MaxCompute SQL阿里云生态,全托管最省心

我的选型建议:如果在AWS上用S3+Databricks(或EMR),在阿里云上用OSS+MaxCompute(或EMR),在自建集群上用HDFS+Spark。不要跨云存储——数据出云的网络费用非常昂贵。

数据湖格式——弥补对象存储的缺陷

S3/OSS不支持ACID事务,Delta Lake/Iceberg/Hudi补齐了这个短板:

能力裸S3S3+Delta Lake
ACID事务不支持支持(并发读写安全)
Schema演进不支持支持(加列/改类型)
Time Travel不支持支持(查历史版本)
MERGE操作不支持支持(增量更新/CDC)
小文件合并手动OPTIMIZE自动合并
Z-Ordering不支持支持(加速多维查询)

我在某知名出海硬件品牌迁移到Databricks后,Delta Lake的MERGE INTO替代了原来的UNION全量覆盖,代码量减少70%。Z-Ordering加速了多维查询,查询延迟降低70%。

面试高频追问

追问一:S3的性能够用吗?不会比HDFS慢很多吗?

单次请求延迟确实比HDFS高(S3约10-100ms vs HDFS约1ms)。但对于大数据批处理场景,瓶颈通常是吞吐量而非延迟——S3的吞吐量可以通过并行请求无限扩展。实际生产中,Spark on S3的性能和Spark on HDFS差距在20%以内。配合本地缓存(Delta Cache)甚至可以持平。

追问二:HDFS会被S3完全替代吗?

短期内不会。HDFS在数据本地性场景(计算和存储在同一节点)有性能优势,某些对延迟极度敏感的场景(HBase、实时查询)仍然需要HDFS。但长期看,存算分离是大趋势——Hadoop自己也在做存算分离(Ozone项目)。5-10年后HDFS可能只在特定场景使用。

追问三:MaxCompute和EMR有什么区别?

MaxCompute是全托管的计算+存储一体化服务,用户只需要写SQL,不需要管集群。EMR是半托管——AWS帮你创建Hadoop集群,但Spark作业/调度/调优还是你自己搞。MaxCompute更省心但灵活性低,EMR更灵活但运维多。我在短剧出海公司选MaxCompute就是因为团队小(就我一个数据人),没精力运维集群。

总结

存储选型面试讲三个层面:① HDFS vs S3/OSS的核心对比(性能/成本/运维/弹性);② 存算分离趋势(存储和计算独立扩展是大方向);③ 数据湖格式的价值(Delta/Iceberg在对象存储上补齐ACID/Schema演进/Time Travel)。能结合四家公司的真实选型经历讲'为什么选这个不选那个',面试官会觉得你有架构选型的判断力。

下一篇聊Hive的执行引擎选择:Hive on MapReduce、on Tez、on Spark到底哪个好?

你们数据存在哪里?HDFS还是S3/OSS?评论区聊聊~

关注「Wood聊大数据」| 9年大数据老兵,聊技术、聊职场、聊成长

刷题进度保存在当前浏览器