随着大数据时代的来临,一系列新兴技术栈如雨后春笋般不断涌现。在大数据处理与存储领域,Hadoop 作为一个综合性的开源框架,其中涵盖了分布式文件系统 HDFS、分布式计算模型 MapReduce 以及提供基础服务的 Common 等关键组件;Spark 以其高效的内存计算能力,在数据处理速度上取得了显著优势;Mahout 则专注于机器学习算法的实现,为数据分析和挖掘提供了强大支持。
在数据库方面,HBase 作为分布式、面向列的开源数据库,适用于海量数据的随机实时读写;NoSQL 作为非关系型数据库的统称,打破了传统关系型数据库的局限,能更好地应对高并发、大数据量的场景,像 Cassandra 就是其中具有代表性的分布式数据库系统。
此外,谷歌推出的 GFS(Google File System)、MapReduce 计算模型以及 BigTable 分布式存储系统,为大数据技术的发展奠定了理论和实践基础。而 Hive 和 Pig 则为数据仓库和数据处理提供了高级抽象,方便用户使用类 SQL 语言进行数据查询和处理。
面对如此众多且繁杂的技术,为了对这些大数据相关技术有一个大致的概念和整体的认识,特编辑此文。
参考知乎:如何用形象的比喻描述大数据的技术生态?Hadoop、Hive、Spark 之间是什么关系?
- Hadoop三件套 = HDFS(分布式存储)+ Yarn(资源调度)+ MapReduce(分布式计算)
- 核心痛点:MR需编写复杂Java代码 → Hive通过SQL解析层将查询转换为MR任务,实现数据仓库化操作
- 性能瓶颈:MR频繁磁盘IO → Spark基于内存计算,采用DAG调度与宽窄依赖优化,速度提升10-100倍
- 数据同步:结构化业务数据通过Sqoop全量/增量导入Hive,配合日志数据构成离线数仓基础
实时数据源:
- 业务数据:通过Canal监听数据库Binlog变化
- 日志数据:客户端实时上报
- 核心缓冲层:Kafka/RocketMQ作为消息队列,实现流量削峰与异步解耦(类比快递柜暂存机制)
计算引擎演进:
- Spark Streaming:微批处理(秒级延迟),适合准实时场景
- Flink:原生流处理(毫秒级延迟),支持事件时间语义与状态管理
数据顺序性:
保序策略:
- 同一业务实体(如订单ID)通过Hash路由至Kafka固定分区
- 牺牲全局有序性换取吞吐量,通过业务时间(Event Time)标记处理时序
乱序数据处理:
Watermark机制:
- 设置允许延迟阈值(如1秒),当收到时间戳T的数据时,认为T-1时刻前的数据已到齐
- 类比:春游发车时间实际延迟5分钟等待迟到学生
窗口补偿:
HDFS(Hadoop分布式文件系统)
核心功能:跨机器分布式存储海量数据,用户透明访问(如 /hdfs/tmp/file1)。
第一代:MapReduce:
- 模型:Map(分片处理)→ Shuffle(数据分发)→ Reduce(汇总结果)。
- 示例:词频统计中,Map阶段分机器统计,Reduce阶段合并结果。
- 缺点:磁盘读写频繁,编程复杂,性能较低。
第二代:Tez / Spark
- 改进:内存计算、DAG任务调度(非MapReduce两阶段)、更灵活的数据交换。
- 优势:减少I/O,支持复杂计算链,吞吐量提升。
高层抽象工具:
- Hive:用SQL描述任务,自动翻译为MapReduce/Tez/Spark程序,降低开发门槛。
- Pig:脚本化数据处理,适合流水线作业。
专用优化引擎:
- Impala/Presto/Drill:牺牲通用性,直接对HDFS数据做快速SQL查询(秒级响应)。
- SparkSQL/Hive on Tez:基于新一代计算引擎执行SQL,兼顾性能与兼容性。
- 代表工具:Storm、Flink
- 核心思想:实时处理数据流(如每分钟更新热榜)。
- 局限:需预先定义计算逻辑,无法回溯历史数据。
- 代表系统:HBase、Cassandra、MongoDB
- 特点:极速单键查询(毫秒级),适合订单查询等场景。
- 局限:不支持复杂计算(如JOIN),弱一致性。
YARN:统一管理集群资源,协调MapReduce、Spark等任务并行运行
- ZooKeeper:分布式协同服务(如配置同步、选举)。
- Mahout:分布式机器学习库。
- Protobuf:高效数据序列化工具
| 场景 |
技术选型 |
时延 |
典型应用 |
| 离线分析 |
Hive+Spark |
小时级 |
经营报表 |
| 准实时处理 |
Spark Streaming |
秒级 |
用户行为统计 |
| 实时计算 |
Flink |
毫秒级 |
风控监控 |
| 事件驱动 |
Kafka+Flink |
亚秒级 |
实时推荐 |
架构演进规律:
磁盘批处理 → 内存计算 → 微批处理 → 原生流处理,本质是计算粒度不断细化的过程,对应业务对时效性要求的持续升级。