Skip to content

技术选型指南

选型核心维度

在选择大数据技术栈时,需要从以下维度综合评估:

  1. 数据规模:TB / PB / EB 级别需求不同
  2. 实时性要求:离线(小时级)/ 近实时(分钟级)/ 实时(秒/毫秒级)
  3. 查询模式:批量扫描 / 点查 / 聚合分析 / 联邦查询
  4. 团队技术栈:Java / Python / SQL 能力
  5. 运维成本:自建集群 vs 云服务
  6. 生态集成:与现有系统的兼容性

存储选型

什么时候用 HDFS?

  • 需要存储海量非结构化/半结构化数据
  • 作为 Hive、Spark 的底层存储
  • 数据以追加写为主,很少随机更新

什么时候用 HBase?

  • 需要随机读写,毫秒级点查
  • 数据模型是宽表(列族设计)
  • 时序数据、用户画像、消息存储

什么时候用 Hive?

  • 团队 SQL 能力强,不想写代码
  • 离线数仓建设(ODS/DWD/DWS/ADS 分层)
  • 数据量大但查询不频繁

什么时候用 Delta Lake / Iceberg?

  • 需要 ACID 事务(数据更新/删除)
  • 需要 Schema 演进
  • 流批一体的数据湖场景
  • 需要时间旅行(Time Travel)查询历史数据

计算引擎选型

需求分析

    ├── 离线批处理?
    │       ├── 数据量超大(PB+)且逻辑简单 → MapReduce
    │       ├── 需要 SQL → Hive on Spark / Spark SQL
    │       └── 需要机器学习 → Spark MLlib

    ├── 实时流处理?
    │       ├── 毫秒级延迟 + 精确一次 → Flink
    │       ├── 秒级延迟 + 与 Spark 生态集成 → Spark Streaming
    │       └── 轻量级,无需独立集群 → Kafka Streams

    └── 流批一体?
            └── Flink(首选)
维度SparkFlink
处理模型微批(Micro-batch)真流处理
延迟秒级毫秒级
吞吐极高
状态管理有限强大(RocksDB)
SQL 支持成熟(Spark SQL)成熟(Flink SQL)
ML 支持强(MLlib)
生态更丰富流处理更专业
学习曲线中等较陡

结论

  • 以批处理为主,偶尔需要流处理 → Spark
  • 以流处理为主,需要低延迟 → Flink
  • 新项目流批一体 → Flink(Flink 批处理能力已很成熟)

OLAP 引擎选型

查询场景

    ├── 单表大数据量聚合分析(日志分析、用户行为)
    │       └── ClickHouse(极致性能)

    ├── 实时导入 + 实时查询(T+0 报表)
    │       └── Apache Doris(实时性好,MySQL 协议)

    ├── 跨数据源联邦查询(查 Hive + MySQL + S3)
    │       └── Presto / Trino

    └── 离线数仓 SQL 查询(T+1 报表)
            └── Hive / Spark SQL

ClickHouse vs Doris

维度ClickHouseApache Doris
查询性能极强(单表)强(多表 Join 更好)
实时导入弱(批量导入为主)强(秒级)
Join 性能
运维复杂度中等
MySQL 兼容部分高度兼容
适用场景日志分析、监控实时报表、数仓

消息队列选型

大数据场景下消息队列几乎是 Kafka 一统天下

  • 吞吐量:百万级 TPS
  • 持久化:消息持久化到磁盘,可重放
  • 生态:与 Flink、Spark、Hadoop 深度集成
  • 流处理:Kafka Streams 可直接做轻量流处理

什么时候考虑其他方案

  • RabbitMQ:需要复杂路由规则、消息优先级
  • RocketMQ:金融场景,需要事务消息
  • Pulsar:需要多租户、地理复制

云原生 vs 自建集群

维度自建集群云服务(EMR/HDInsight)
成本硬件成本高,运维成本高按需付费,弹性扩缩容
控制权完全控制受云厂商限制
运维需要专业运维团队云厂商托管
适用数据安全要求高、规模稳定快速上线、规模波动大

建议

中小团队优先考虑云服务(阿里云 EMR、AWS EMR),节省运维成本。大厂或数据安全要求高的场景才考虑自建。

本站内容由 褚成志 整理编写,仅供学习参考