大数据简介
大数据简介
概述
大数据(Big Data)是指超出传统数据库工具收集、存储、管理和分析能力的数据集。随着互联网、物联网、移动互联网的高速发展,数据量呈指数级增长,催生了以 Hadoop、Spark 为代表的新一代分布式计算技术体系。
大数据技术不仅仅是"量大的数据",更是围绕海量数据的采集→存储→处理→分析→可视化全链路的技术解决方案。
4V 特征
大数据通常由以下四个维度定义,即"4V"特征:
| 特征 | 英文 | 说明 |
|---|---|---|
| 大量 | Volume | 数据规模巨大,从 TB 级到 PB 级甚至 EB 级 |
| 高速 | Velocity | 数据生成和处理速度极快,要求实时或近实时处理 |
| 多样 | Variety | 数据类型多样,包含结构化(关系型数据库)、半结构化(JSON/XML)、非结构化(图片/视频/日志)数据 |
| 低价值密度 | Value | 海量数据中真正有价值的信息密度低,需要通过挖掘提取有价值的信息 |
部分学者还增加了第五个 V:
- Veracity(真实性):数据的准确性与可信度,劣质数据会导致错误决策
技术体系
数据采集层
| 工具 | 定位 | 典型使用场景 |
|---|---|---|
| Flume | 日志流式采集 | Nginx/应用日志→HDFS/Kafka |
| Sqoop | RDBMS 批量迁移 | MySQL/Oracle→HDFS/Hive |
| Kafka | 高吞吐消息队列 | 实时事件流传输与缓冲 |
| DataX | 离线数据同步 | 各类异构数据源间的数据交换 |
数据存储层
| 工具 | 定位 | 典型使用场景 |
|---|---|---|
| HDFS | 分布式文件系统 | 海量文件的可靠持久化存储 |
| HBase | 分布式 NoSQL 数据库 | 实时随机读写,TB/PB 级宽表 |
| Hive | 数据仓库 | 大规模结构化数据的 SQL 分析 |
| Elasticsearch | 分布式搜索引擎 | 全文检索、日志分析(ELK) |
数据计算层
| 工具 | 定位 | 典型使用场景 |
|---|---|---|
| MapReduce | 批处理框架 | 超大规模离线计算 |
| Spark | 通用计算引擎 | 批处理、流处理、ML、图计算 |
| Flink | 实时流处理 | 低延迟事件驱动计算、CEP |
| Hive | SQL 批处理 | 离线报表、数仓 ETL |
资源调度层
| 工具 | 定位 |
|---|---|
| YARN | Hadoop 生态通用资源管理与调度 |
| Kubernetes | 容器编排,越来越多大数据组件支持 K8s 部署 |
数据可视化与应用层
- Apache Superset / Grafana:开源数据可视化平台
- Presto / Impala:交互式即席查询引擎(秒级延迟)
- Zeppelin / Jupyter:交互式数据分析 Notebook
Hadoop 编年史
| 时间 | 事件 |
|---|---|
| 2003.01 | Google 发表 Google File System(GFS)论文 |
| 2004.01 | Google 发表 MapReduce 论文 |
| 2006.02 | Apache Hadoop 项目正式启动,支持 MapReduce 和 HDFS 独立发展 |
| 2006.11 | Google 发表 Bigtable 论文 |
| 2008.01 | Hadoop 成为 Apache 顶级项目 |
| 2009.03 | Cloudera 推出 CDH(Cloudera Distribution of Hadoop),首个商业发行版 |
| 2012.03 | HDFS NameNode HA 加入 Hadoop 主版本 |
| 2013.02 | Apache Spark 进入 Apache 孵化器 |
| 2014.02 | Spark 代替 MapReduce 成为 Hadoop 缺省计算引擎,并成为 Apache 顶级项目 |
| 2019.01 | Apache Flink 成为 Apache 最活跃项目之一,实时计算地位确立 |
应用场景
场景一:用户画像与精准营销
背景:电商平台每天产生数亿条用户行为日志(浏览、搜索、加购、购买等),需要对用户进行精细化分层,支撑千人千面推荐和精准广告投放。
方案:
- 通过 Flume 采集应用日志到 Kafka
- Flink 实时消费 Kafka,更新用户实时标签(如"近 30 分钟浏览手机超过 3 次")
- Spark 每日离线批量计算用户静态画像(年龄段、消费能力、品类偏好)
- 标签结果写入 HBase,供在线推荐系统毫秒级查询
价值:相比人工分层,数据驱动的精准营销可将广告 CTR(点击率)提升 3~5 倍。
场景二:实时风控系统
背景:金融机构每秒处理数万笔交易,需要在支付发生的毫秒级时间内判断是否存在欺诈风险。
方案:
- 交易事件通过 Kafka 实时流入
- Flink CEP(复杂事件处理)实时识别高风险模式,如:
- "同一账户 1 分钟内 3 次登录失败后立即发起大额转账"
- "异地 IP 连续消费"
- 命中规则的交易触发风控拦截,通知写入 Redis 供风控系统实时读取
- 所有交易日志写入 HDFS,供离线模型(反欺诈模型)每日迭代更新
价值:毫秒级响应,每年减少数亿元欺诈损失。
场景三:数据仓库与经营分析报表
背景:大型零售企业需要对全国数千家门店的销售数据进行多维度分析(按地区/品类/时间/门店),支撑管理层决策。
方案:
- Sqoop 每日凌晨将 MySQL 业务数据同步至 HDFS
- Hive 对原始数据进行 ETL,按 ODS→DWD→DWS→ADS 分层建模
- ADS 层结果通过 Sqoop 回写 MySQL,供报表系统展示
- 重要指标通过 Presto 支持 BI 工具(如 Tableau、Power BI)的即席查询
数仓分层说明:
| 层次 | 名称 | 说明 |
|---|---|---|
| ODS | 操作数据层 | 原始数据镜像,贴源层 |
| DWD | 数据明细层 | 清洗后的事实明细数据 |
| DWS | 数据汇总层 | 按主题聚合的轻度汇总 |
| ADS | 应用数据层 | 直接供业务使用的应用层结果 |
场景四:日志分析与系统监控(ELK 体系)
背景:互联网公司数百台服务器每天产生 TB 级应用日志,需要快速定位异常和分析性能瓶颈。
方案:
- Filebeat/Logstash 采集各服务器日志 → Kafka 缓冲 → Elasticsearch 存储与全文索引 → Kibana 可视化分析
价值:故障排查从人工翻查日志的小时级缩短到分钟级,极大提升 SRE 效率。
最佳实践
实践一:合理的数仓分层架构
问题:直接在原始数据上写报表 SQL,导致逻辑重复、维护困难、性能低下。
建议:遵循 ODS→DWD→DWS→ADS 分层原则:
- ODS 层只做数据接入,不做任何业务逻辑处理
- DWD 层完成数据清洗(去重、脱敏、标准化)和维度退化
- DWS 层按业务主题聚合,每个主题独立建模
- ADS 层面向具体业务需求,轻量查询
这样可以做到:逻辑复用、复杂度隔离、性能可控。
实践二:Lambda 架构 vs Kappa 架构选型
Lambda 架构(Hadoop + Spark Streaming):
- 批处理层(Batch Layer)处理全量历史数据,保证最终准确性
- 速度层(Speed Layer)处理实时增量数据,保证低延迟
- 服务层(Serving Layer)合并两层结果对外提供查询
适用:需要同时保证历史数据准确性和实时性,但维护成本较高(需维护两套代码)。
Kappa 架构(Kafka + Flink):
- 只有流处理一层,所有数据都视为流
- 历史数据回放通过 Kafka 的消息重播实现
适用:业务以流处理为主,数据可重播,团队维护成本低。
建议:新项目优先考虑 Kappa 架构,若有强一致性历史分析需求再考虑 Lambda。
实践三:数据质量管理
大数据中"垃圾进、垃圾出"是最常见问题。建议在数据链路的以下环节设置质量检查:
- 接入层:字段非空校验、格式正则校验
- ODS→DWD:数量对账(源端记录数 vs 目标端)、字段值域校验
- DWD→DWS:关键指标环比异常检测(波动超过 20% 告警)
- ADS 层:与业务系统核对关键指标(如日销售额与财务数据对账)
推荐工具:Apache Griffin(开源数据质量监控平台)。
常见问题
Q1:大数据和传统数据库有什么本质区别?
| 维度 | 传统关系型数据库(RDBMS) | 大数据技术体系 |
|---|---|---|
| 数据规模 | GB~TB 级 | TB~PB 级以上 |
| 扩展方式 | 纵向扩展(升级硬件) | 横向扩展(增加节点) |
| 数据模型 | 强 Schema(结构化) | 支持结构化/半结构化/非结构化 |
| 一致性 | ACID 强一致性 | 最终一致性(BASE 理论) |
| 查询延迟 | 毫秒级(OLTP) | 秒级~分钟级(OLAP) |
| 适用场景 | 在线事务处理 | 离线分析、批量报表 |
结论:大数据和 RDBMS 是互补而非替代关系。业务事务仍在 RDBMS 处理,大数据负责分析计算。
Q2:实时计算和离线计算如何选择?
- 离线计算(批处理):数据一致性要求高,可以容忍小时~天级延迟,首选 Spark / Hive
- 实时计算(流处理):需要秒级~分钟级响应,如实时推荐、风控、监控告警,首选 Flink
- 近实时(Lambda/Kappa):兼顾准确性和时效性,如实时大屏、经营看板
Q3:Hadoop 生态和 Spark 是什么关系?
Spark 不是 Hadoop 的替代品,而是 Hadoop 生态的重要组成部分:
- Spark 通常运行在 YARN 之上(资源管理),读写 HDFS(存储),对接 Hive(元数据)
- Spark 替代的是 Hadoop MapReduce(计算框架),因为内存计算速度更快
- Hadoop 提供"存储+资源调度",Spark 提供"高性能计算",两者协作
Q4:大数据平台常见的性能瓶颈在哪里?
- 数据倾斜:某个分区的数据量远超其他分区,是 MapReduce/Spark 任务延迟的首要原因
- 小文件问题:HDFS 上存在大量小文件,NameNode 内存压力大,读写效率低
- Shuffle 开销:大量数据在节点间网络传输,是集群 IO 的主要瓶颈
- 内存不足(OOM):Executor 内存配置不合理,或数据倾斜导致单节点内存溢出
术语
| 术语 | 解释 |
|---|---|
| 数据仓库(DW) | 面向主题的、集成的、非易失的、时变的数据集合,支持管理决策 |
| 数据湖(Data Lake) | 以原始格式存储所有类型数据的统一存储库,支持后续多样化分析 |
| 数据中台 | 沉淀企业共用数据能力,对上层业务提供标准化数据服务的平台 |
| ETL | Extract-Transform-Load,数据抽取→转换→加载,数仓建设核心流程 |
| ODS | 操作型数据存储,贴近业务系统的原始数据层 |
| OLAP | Online Analytical Processing,面向复杂分析查询的数据处理方式 |
| OLTP | Online Transaction Processing,面向高并发事务的数据处理方式 |