计算与存储分离让数据平台能按需分别扩展两类资源,核心是把计算节点做成无状态弹性集群、把存储节点做成共享对象存储或分布式文件系统,计算不够加计算节点,存储不够扩存储容量,互不拖累。
过去数据平台大多采用存算一体架构,计算和存储绑定在同一批服务器上,业务要扩计算,只能连存储一起扩,磁盘、CPU、内存都得按比例加,结果要么计算闲、磁盘满,要么计算忙、磁盘空,计算与存储分离把这两件事拆开,计算节点只负责执行查询、跑批、做聚合,数据落到独立存储层,计算节点可以随时拉起、随时回收,存储层单独横向扩展。
计算与存储分离架构下,数据平台怎么按需扩展计算和存储资源?
数据平台选存算分离,首先要理解两个资源现在走的是完全不同的扩展路径。
- 计算扩展:增加执行节点,这些节点不保存数据,只从存储层拉数据计算,扩容时新节点注册到资源调度器,比如YARN、Kubernetes或者云厂商的弹性容器服务,马上就能接任务。
- 存储扩展:增加存储节点或扩容对象存储桶,对象存储几乎不需要手动扩节点,云厂商在底层自动伸缩;自建分布式文件系统则增加DataNode或存储节点,触发数据再平衡。
- 元数据层保持独立,Hive Metastore、统一Catalog、或云数据湖的元数据服务继续管理表结构、分区、文件路径,计算节点和存储节点都只跟元数据层确认“数据在哪”,不互相直接绑定。
实操中,一个典型的Spark on Kubernetes方案可以这样扩计算:
kubectl scale deployment spark-executor --replicas=30
存储侧如果用对象存储,不需要执行扩容命令,只需提高桶的配额;如果用HDFS,增加DataNode后执行:
hdfs balancer -threshold 10
这样计算和存储的扩容动作解耦,不会为了加几台计算节点被迫购买大容量磁盘,也不会因为磁盘写满去加一堆用不上的CPU和内存。
存算分离和存算一体对比:数据平台选型到底看什么?
很多团队在选型时会纠结存算分离和存算一体到底哪个好,下面这张表把差异摆在一起看。
| 维度 | 存算一体 | 存算分离 |
|---|---|---|
| 扩展方式 | 计算存储按比例一起扩 | 计算和存储独立扩 |
| 资源利用率 | 容易一边空闲一边紧张 | 各用各的,利用率更高 |
| 网络依赖 | 本地磁盘读取,延迟低 | 走网络拉数据,延迟略高 |
| 成本模型 | 硬件采购绑定 | 计算按需、存储按量 |
| 运维复杂度 | 节点角色单一,运维直观 | 组件变多,需要盯网络和元数据 |
行业共识认为,分析型数据平台多数情况下更适合存算分离,原因是分析负载的计算峰谷非常明显,白天跑报表、晚上跑批,计算节点如果常驻就是浪费,存储增长却是单调向上的,历史数据不会自动消失,两个资源生命周期完全不同,绑在一起必然有一个被拖累。
不过事务型数据库不要盲目跟进,频繁小事务、点查、高并发写入场景,网络往返带来的延迟会放大,存算分离更适合大查询、大扫描、批量处理和分析型工作负载。
大数据平台存算分离落地场景:实时数仓、离线分析、日志检索
不同场景对计算和存储的需求权重不一样,存算分离的价值点也不同。
- 实时数仓:早上9点到11点查询高峰,计算资源要快速弹上去;凌晨低峰缩下来,存储层持续接收Kafka写入的增量数据,跟计算波动无关,存算分离后,计算集群可以按时间段自动伸缩,存储桶持续承载数据。
- 离线分析:大量历史数据放在对象存储里,平时几乎没有计算,只有跑周报、月报或临时取数时拉起一批计算节点,跑完释放,传统架构为了偶尔的任务常驻一个几十节点集群,成本压力大。
- 日志检索:日志数据量大、冷热分层明显,热数据放缓存层,冷数据落对象存储,查询冷数据时计算节点按需创建,避免为了偶尔查几个月前的日志长期养着一堆检索节点。
- 数据湖分析:用Presto或Trino集群直接查对象存储上的Parquet文件,计算集群按查询负载弹性伸缩,存储层按数据量自然增长,互不影响。
在这些场景里,数据平台计算与存储分离后的典型动作是:计算集群配置成弹性伸缩组,存储层用对象存储生命周期策略自动转冷,查询引擎通过外部表直接读对象存储路径。
云上数据平台存算分离价格怎么算?按量计费比包年包月更省吗?

云上数据平台的账单通常拆成计算和存储两类,存算分离让这两类费用可以单独优化。
- 计算费用:按vCPU小时、CU小时或节点规格计费,弹性计算可以选按量付费,也可以选包年包月加弹性补充。
- 存储费用:对象存储按实际使用容量、请求次数、下行流量等维度计费,数据湖冷数据转低频或归档存储后单价更低。
- 网络费用:计算和存储在同一地域、同一可用区时,内网流量费用很低甚至为零,跨地域读取会产生额外费用,需要避免。
按量计费不一定永远更省,稳定基线负载用包年包月单价更低,突发负载用按量付费补足,一个常见组合是:一部分常驻计算用包年包月,弹性计算用按量付费,存储层能用生命周期策略降冷的就降冷,这样账单上计算和存储分开显示,成本归因也更清楚。
具体操作上,云控制台里把计算集群的最小节点数调低、最大节点数调高,对象存储生命周期规则可以设置为低频存储和归档存储自动转换,定期查看账单,把计算和存储费用分开摊到部门。
上海企业数据平台存算分离改造实操:从HDFS到对象存储的路径
上海不少企业数据平台原来跑在自建HDFS上,随着数据量增长,机房机柜、硬盘采购、扩容周期都成了负担,切换到存算分离可以按照下面的路径操作。
- 盘点现有数据目录,先列出HDFS上哪些库表是活跃的,哪些是冷数据。
- 在云上开通对象存储桶,选择与计算集群相同地域,比如上海地域。
- 配置访问密钥和权限,给计算节点使用的服务账号授权读写该桶。
- 在计算引擎侧切换存储后端,Spark读取路径从
hdfs://改为s3a://或云厂商协议路径。 - 用分布式拷贝迁移存量数据,示例命令:
hadoop distcp hdfs://namenode:8020/user/hive/warehouse/ods.db s3a://datalake/ods.db - 灰度切流,先让一个离线分析任务读对象存储,验证性能和正确性。
- 老HDFS集群保留只读一段时间,确认无误后逐步下线。
整个改造过程中,Hive Metastore里的表元数据不用推倒重建,只需要修改表的location指向新存储路径,计算节点从HDFS本地性读取切换为网络读取,查询延迟会有变化,但多数分析型任务能接受。

数据平台计算与存储分离后,运维要盯住哪些指标?
分离之后,系统链路变长,运维重点从“看单机磁盘”转向“看网络和元数据”。
- 元数据服务QPS:大量计算节点同时请求元数据,会打爆Hive Metastore或统一Catalog。
- 存储吞吐:对象存储的带宽上限直接影响大查询速度,需要关注是否触达吞吐限制。
- 计算队列等待时间:弹性计算节点拉起需要时间,队列等待突然变长说明伸缩策略不够激进。
- 缓存命中率:本地缓存如果命中率过低,说明数据本地性差,网络读取太多。
- 网络带宽使用率:计算和存储之间的网卡流量是否逼近上限。
常用排查命令:
iostat -x 1
nload
这两个命令能快速判断是磁盘瓶颈还是网络瓶颈,存算分离后,网络指标的地位明显上升,当元数据服务平均延迟明显升高,需要拆分Catalog;当计算队列等待时间超过任务平均执行时间的一半,触发扩容。
计算与存储分离不是银弹,但它解决了数据平台扩展时“计算和存储互相绑架”的老问题,按需分别扩展两类资源,让账单更清晰、扩容更轻量、架构更弹性。
Q&A
计算与存储分离架构下数据平台怎么保证数据一致性?
共享元数据服务负责记录表结构、分区和文件列表,计算节点写入数据时,先完成数据文件提交,再更新元数据,对象存储提供强一致性读写的接口,分布式文件系统也支持原子重命名,因此事务边界在元数据层被清晰界定,查询只会看到已提交的分区和文件。
存算分离和存算一体对比,中小企业数据量不大该选哪个?
数据量在数十TB以内、计算和存储增长平稳时,存算一体部署简单、硬件成本低,仍然是合理选择,当单集群存储规模增长到数百TB、或者计算负载出现明显波峰波谷时,存算分离的弹性收益会超过网络开销带来的成本增加。
数据平台存算分离价格贵吗?会不会增加网络成本?
存储单价通常低于本地高可用SSD/HDD混合部署,计算按需付费避免常驻浪费,网络成本在云内同地域多数情况下较低,跨地域同步会增加,云厂商对同地域内网流量大多不收费或收费极低,账单上计算和存储分开显示,利于成本归因。
