2. AWS存储与分析服务选型

在 AWS 上做数据建模与分析工程,最先遇到的不是“怎么写 SQL”,而是“数据放在哪、用什么算、谁来管权限”。AWS 把存储、计算、元数据、权限、流处理拆成了多个独立服务,每个服务只解决一类问题。选型的本质,是把业务的数据形态、延迟要求、并发规模和成本约束,映射到这些服务的核心定位上。本节先建立一张“服务定位地图”,再给出可操作的选型判断方法。

一、七个服务的核心定位

S3 是对象存储,是整个数据平台的地基。它不提供计算,只提供近乎无限的容量、11 个 9 的持久性和按量计费。数据以对象形式存放,通过前缀(prefix)模拟目录结构。S3 是所有其他服务的公共数据源和结果落点,也是数据湖的物理载体。

Glue 是无服务器数据集成与元数据服务。它包含三个关键部分:Data Catalog(统一元数据目录,表结构、分区、存储位置)、ETL 作业(基于 Spark 的 Serverless 转换)、Crawler(自动扫描 S3 推断 schema 并写入 Catalog)。Glue 的定位是“让数据可被发现、可被转换”,它本身不存储业务数据。

Athena 是基于 Trino/Presto 的交互式查询服务,直接对 S3 上的数据执行 SQL,无需加载数据。它按扫描数据量计费,适合临时分析、探索式查询和低频报表。Athena 依赖 Glue Data Catalog 获取表结构,是“数据湖上的 SQL 入口”。

Redshift 是云数据仓库,采用列式存储和 MPP(大规模并行处理)架构,数据需要先加载进集群。它适合高并发、低延迟、结构稳定的 BI 报表和复杂多表关联。Redshift Spectrum 可以外接 S3 数据,形成“热数据在仓库、冷数据在湖”的混合模式。

Kinesis 是流式数据服务,包含 Data Streams(自定义流处理)、Data Firehose(自动投递到 S3/Redshift/OpenSearch)和 Data Analytics(流上 SQL)。它解决的是“数据持续产生、需要秒级或分钟级处理”的场景,是实时链路的入口。

EMR 是托管 Hadoop/Spark 集群,提供对计算资源的完全控制。适合需要自定义 Spark 参数、使用 Hive/HBase/Presto 生态、或运行大规模批处理与机器学习特征工程的场景。EMR 比 Glue 更灵活,但也需要自己管理集群和调优。

Lake Formation 是数据湖权限治理层。它在 Glue Catalog 之上提供表级、列级、行级的细粒度访问控制,并支持跨账户共享。它不搬数据,只回答“谁能看哪张表的哪些列和行”。

二、选型判断:从数据形态到服务组合

选型可以按四个问题依次判断:数据是批还是流?查询是交互式还是高并发?数据是否已结构化?权限是否需要细粒度?下面的 SVG 用一张“数据流与选型关系图”把七个服务串起来,左侧是数据进入方式,中间是存储与元数据,右侧是消费方式,底部是治理层。

AWS 数据平台服务定位与数据流关系 数据进入 批量文件 / 日志 Kinesis 实时流 数据库 CDC / 应用 Amazon S3 对象存储 · 数据湖底座 Parquet / ORC / JSON / CSV 按前缀分区 · 版本控制 生命周期 · 加密 所有服务的公共数据源 Glue Data Catalog 表结构 · 分区 · 位置 Crawler 自动推断 统一元数据入口 查询与消费 Athena 交互式 SQL 按扫描量计费 Redshift 数仓 高并发 BI · 列式 MPP EMR Spark / Hive 自定义大规模批处理 Lake Formation 权限治理层 表级 / 列级 / 行级访问控制 · 跨账户共享 · 不搬数据 Glue ETL(Serverless Spark) 清洗 · 转换 · 分区写入 · 格式转换(CSV→Parquet) 读取 写回 授权 数据进入 存储 元数据 查询消费 ETL 转换 权限治理 箭头方向表示数据或控制流

三、典型场景的服务组合

把上面的定位落到具体场景,选型会变得清晰。以下四类场景覆盖了大多数数据工程需求。

场景 数据形态 推荐组合 关键理由
日志探索分析 S3 上 JSON/CSV,TB 级 S3 + Glue Crawler + Athena 无需加载,按扫描量付费,临时查询成本低
实时监控告警 持续产生的流数据 Kinesis Data Streams + Lambda/Flink + S3 秒级延迟,流上计算,结果落 S3 供后续分析
企业 BI 报表 结构化、高并发查询 Redshift + Glue ETL + S3 列式 MPP 支撑并发,Spectrum 外接冷数据
大规模特征工程 PB 级、需自定义 Spark EMR + S3 + Glue Catalog 完全控制集群参数,适合复杂转换和 ML 特征

四、选型中的常见误区

第一个误区是“所有数据都进 Redshift”。Redshift 的存储和计算绑定,加载和扩容都有成本。如果数据只是偶尔查询,Athena 直接查 S3 更划算。判断标准是:查询频率高、并发高、延迟要求低(秒级以内)才值得进 Redshift。

第二个误区是“Glue 能替代 EMR”。Glue 的 Serverless Spark 适合中小规模、标准转换;当作业需要精细调优 executor 内存、使用自定义库、或单次处理 PB 级数据时,EMR 的灵活性和成本控制更好。两者不是替代关系,而是规模和控制力的取舍。

第三个误区是“Lake Formation 只是权限开关”。它真正的价值在于跨账户数据共享和列级/行级安全。例如,同一张订单表,财务账户只能看金额列,运营账户只能看自己区域的行,这些都可以在 Lake Formation 中集中定义,而不需要在每个查询引擎里重复配置。

选型时先问三个问题:数据是批还是流?查询是交互式还是高并发?权限是否需要列级/行级?答案会直接缩小服务范围。S3 几乎总是起点,Glue Catalog 几乎总是元数据入口,区别在于计算层选 Athena、Redshift 还是 EMR。

五、一个可执行的选型检查清单

在实际项目中,可以用下面的清单快速过一遍,避免遗漏关键约束。清单中的参数是示例阈值,实际使用时根据业务调整。

选型检查清单(示例阈值)
1. 数据量级:< 1TB 且查询不频繁 → Athena;> 1TB 且高并发 → Redshift
2. 延迟要求:秒级 → Kinesis;分钟级 → Glue/EMR 批处理;小时级 → 任意
3. 数据格式:Parquet/ORC → 列式扫描效率高;JSON/CSV → 先 Glue 转换
4. 并发用户:< 10 → Athena;> 50 → Redshift 或 EMR + Presto
5. 权限粒度:表级 → Glue Catalog + IAM;列级/行级 → Lake Formation
6. 自定义计算:标准 SQL → Athena/Redshift;自定义 Spark → EMR
7. 成本敏感:按扫描量 → Athena;按集群时长 → Redshift/EMR

这张清单不是决策树,而是约束检查表。实际选型往往是多个服务的组合,例如“Kinesis 接入 → S3 存储 → Glue 转换 → Redshift 服务 BI → Lake Formation 治理”。理解每个服务的核心定位,就能在组合时知道谁负责什么,避免把计算压力放错层,也避免为不需要的能力付费。