分布式存储三国杀:对象存储 vs HDFS vs 列式存储,到底该怎么选?

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,1000CU*H 3个月
简介: 分布式存储三国杀:对象存储 vs HDFS vs 列式存储,到底该怎么选?

分布式存储三国杀:对象存储 vs HDFS vs 列式存储,到底该怎么选?

——By Echo_Wish,一个在大数据江湖摸爬滚打多年的老朋友

老铁们,今天我们聊聊一个常被忽视但绝对关键的底层话题:分布式存储
为什么说关键?因为 数据再牛逼,没有一个好用的存储,都是空中楼阁

这事儿就像你有 100 吨粮食,
你得先决定——
是放在 粮仓(对象存储)
还是 仓库货架(HDFS)
还是 整齐切片的保鲜盒(列式存储)

不同选择对应的成本、速度、业务特性全都不一样。
今天不搞概念灌输,我们用一个聊业务的方式,把对象存储、HDFS、列式存储这三货彻底捋清楚。


一、对象存储:云时代的“基础款大仓库”

对象存储(Object Storage)你肯定听过:S3、OBS、OSS…

核心特点一句话概括:
👉 “海量、便宜、持久、简单,用 URL 存文件。”

它不像传统文件系统那样有“文件夹”。
它所有东西都是“对象(Object)”,带元数据,通过 REST API 读写。

你可以把它理解成:

一个几乎无限大的网盘,并且性能不保证,但容量绝对够。

非常适合:

  • 日志归档
  • 图片/视频文件
  • 模型文件(AI 训练完几十 GB 那种)
  • 离线数据湖(S3-Lake、OBS-Lake)

但它不适合高频随机读写
比如 Hive 在对象存储上跑小文件?慢!
Flink Checkpoint 要频繁写?也慢!

简单示例(Python 用 boto3 写 S3):

import boto3

s3 = boto3.client('s3')

# 上传文件
s3.upload_file("local.txt", "my-bucket", "data/local.txt")

# 下载文件
s3.download_file("my-bucket", "data/local.txt", "downloaded.txt")

是不是很云原生、很 REST?

但你要做“快速扫描”“高速读写”?
抱歉,不是它的强项。


二、HDFS:大数据时代的“铁头功文件系统”

HDFS 是大数据时代的老基石。
用俩字总结:抗造

特点非常鲜明:
👉 大文件吞吐量高、顺序读写爽、搭配计算框架简直天作之合。

比如你用 Spark、Hive,有大量顺序扫描,HDFS 给你妥妥的高带宽。

但你要问我 HDFS 哪里不行?
我给你列几条你肯定深有体会:

  • 不适合小文件(NameNode 元数据爆炸)
  • 扩容要加机器(不像对象存储交钱就行)
  • 运维成本高(NameNode 挂了全世界都慌)

写文件示例(PyArrow 写入 HDFS):

from hdfs import InsecureClient

client = InsecureClient('http://namenode:50070', user='hadoop')
client.write('/data/log.txt', data='hello hdfs!')

你能看出来,它就是文件系统,只不过分布式。
它适合企业内部大数据平台的刚需场景,比如:

  • Spark 离线计算
  • Hive 批处理
  • 大规模日志处理
  • 长时间稳定运行的大数据平台

一句话概括:

HDFS 是铁打的大数据离线引擎配套方案。


三、列式存储:分析查询的“性能怪兽”

列式存储不是“系统”,更像是一种存储格式

  • Parquet
  • ORC
  • Kudu(算是半系统)

列式的最大特点就是一句话:
👉 你查什么列,就只读什么列。读得少,自然更快。

再配合编码、压缩,例如:

  • RLE(Run Length Encoding)
  • Dictionary Encoding
  • Bit Packing

能把一个表从几十 GB 砍到几 GB,甚至更小。

为什么列式让 SQL 飞起来?
举个栗子:

下面这样一个 SQL:

SELECT user_id, SUM(amount)
FROM t_order
WHERE city = 'Shenzhen'
GROUP BY user_id;

在行式存储中,你每次都要扫整行。
但在 Parquet 中,你只需要读 city, amount, user_id 三列。
I/O 直接砍掉 70% 以上。

Python 写 Parquet 示例:

import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq

df = pd.DataFrame({
   
    'city': ['Shenzhen', 'Guangzhou', 'Shenzhen'],
    'amount': [100, 200, 150]
})

table = pa.Table.from_pandas(df)
pq.write_table(table, 'orders.parquet')

我敢说,用过 Parquet 的人,再也不想回行式存储了。

列式适合:

  • 数仓
  • 离线分析
  • BI 查询
  • 数据湖(Lakehouse)

一句话:

列式是分析专用武器。


四、三者到底怎么选?我给一个最接地气的总结

我给你来个最粗暴但最有效的“场景决策表”:

需求 选什么 原因解释
业务系统文件、图片、日志存放 对象存储 无限容量 + 成本低 + 天然云原生
Spark/Hive 离线计算 HDFS 高吞吐、大文件顺序读写王者
数仓分析、BI、SQL 查询 列式存储 只读需要的列,压缩率高,查询快
数据湖架构 对象存储 + 列式存储 池化大仓库 + 结构化列式文件
需要 ACID 和近实时 Kudu/TiDB/Delta Lake 对象/HDFS 不适合高并发小写

如果让我给一个更现实、更接地气的判断

2025 年以前:
HDFS = 离线大一统
对象存储 = 云时代的容量池
列式 = 数据仓库必选

2025 年以后:
对象存储 + 列式 = 大数据主流(Lakehouse)
HDFS 只在传统大数据平台持续存在

换句话说:
HDFS 的江湖地位在收缩;对象存储 + 列式存储正在成为新时代的“双子星”。


五、写在最后:存储不是技术,是业务逻辑的映射

很多同学选择存储时最容易犯的一个错:
“只看技术,不看业务。”

技术没有好坏,只有适不适合场景。

对象存储解决的是——
👉 规模问题、成本问题。

HDFS 解决的是——
👉 大数据高吞吐的工程问题。

列式存储解决的是——
👉 查询性能与压缩问题。

目录
相关文章
|
1天前
|
云安全 人工智能 自然语言处理
|
6天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
314 116
|
8天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
604 53
Meta SAM3开源:让图像分割,听懂你的话
|
21天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
5天前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
|
4天前
|
弹性计算 人工智能 Cloud Native
阿里云无门槛和有门槛优惠券解析:学生券,满减券,补贴券等优惠券领取与使用介绍
为了回馈用户与助力更多用户节省上云成本,阿里云会经常推出各种优惠券相关的活动,包括无门槛优惠券和有门槛优惠券。本文将详细介绍阿里云无门槛优惠券的领取与使用方式,同时也会概述几种常见的有门槛优惠券,帮助用户更好地利用这些优惠,降低云服务的成本。
269 132
|
8天前
|
机器学习/深度学习 人工智能 自然语言处理
AgentEvolver:让智能体系统学会「自我进化」
AgentEvolver 是一个自进化智能体系统,通过自我任务生成、经验导航与反思归因三大机制,推动AI从“被动执行”迈向“主动学习”。它显著提升强化学习效率,在更少参数下实现更强性能,助力智能体持续自我迭代。开源地址:https://github.com/modelscope/AgentEvolver
418 29
|
15天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
727 223