《极客时间教程 - 从 0 开始学大数据》笔记
《极客时间教程 - 从 0 开始学大数据》笔记
预习模块
01 丨预习 01 丨大数据技术发展史:大数据的前世今生
大数据技术起源于 Google 在 2004 年前后发表的三篇论文:
- The Google File System
- Bigtable: A Distributed Storage System for Structured Data
- MapReduce: Simplified Data Processing on Large Clusters
Doug Cutting 根据 Google 论文开发了 Hadoop。
大数据处理的主要应用场景:
- 数据分析:Hive、Spark SQL 等 SQL 引擎
- 数据挖掘与机器学习:TensorFlow、Mahout、MLlib 等框架
大数据平台需整合:分布式文件系统(HDFS)存储数据、MapReduce/Spark 作业调度执行、结果写入应用数据库。

02 丨预习 02 丨大数据应用发展史:从搜索引擎到人工智能
- 搜索引擎:GFS 和 MapReduce 开启超大规模分布式存储与计算
- 数据仓库:Hive 以更低成本获得更多数据存储与计算能力
- 数据挖掘:基于海量数据关联分析,应用于关联推荐、用户画像、关系图谱
- 机器学习:收集全量历史数据统计规律,预测正在发生的事情
03 丨预习 03 丨大数据应用领域:数据驱动一切
- 医疗健康:医学影像智能识别、病历大数据智能诊疗
- 教育:AI 外语老师、智能解题
- 社交媒体:舆情监控与分析
- 金融:大数据风控
- 新零售:全链路管理
- 交通:实时采集监控数据、道路拥堵判断、无人驾驶
模块一、Hadoop 大数据原理与架构
04 | 移动计算比移动数据更划算
传统计算模型(输入→计算→输出)面对 TB/PB 级数据无法应对。移动计算将程序分发到数据所在处执行,比移动数据更划算。
移动计算步骤:
- 数据存储在集群服务器上(HDFS),文件分成多个 Block
- 引擎在每台服务器启动分布式任务执行进程
- 使用编程模型编写程序(MapReduce/Spark),打包为 JAR 包(JVM 环境运行)
- 启动执行,根据输入数据量分成若干 Split,每个分配给一个任务进程
- 任务进程下载程序包并反射加载 → 移动计算完成
- 读取数据并输入给应用程序处理
05 | 从 RAID 看垂直伸缩到水平伸缩的演化
海量数据存储三大核心问题:
- 存储容量:PB 级数据 vs 单机 1~2TB 磁盘
- 读写速度:磁盘连续读写仅几十 MB/s
- 数据可靠性:磁盘寿命约一年,损坏后数据丢失
RAID 解决方案:
- 容量:N 块磁盘构成存储阵列(如 RAID 5 可用 N-1 块)
- 速度:数据分片并发读写多块磁盘(但受机械寻址延迟限制,无法提高 N 倍)
- 可靠性:RAID 10/5/6 通过冗余存储或校验信息实现数据恢复

两种扩展思路:
- 垂直伸缩(scaling up):硬件升级(RAID 即此方式)
- 水平伸缩(scaling out):分布式系统
06 | 新技术层出不穷,HDFS 依然是存储的王者

HDFS 两大核心组件:
- DataNode:负责文件数据存储和读写。文件分割为若干 Block,分布存储在各 DataNode 上,客户端可并行访问,极大提高访问速度
- NameNode:负责文件系统元数据(MetaData)管理(文件路径、数据块 ID、存储位置等),类似文件分配表(FAT)
为保证高可用,数据块默认复制 3 份,存储在不同服务器甚至不同机架上。

HDFS 故障容错:
- 数据存储故障:计算并存储 CheckSum,读取时校验,异常则从其他 DataNode 读取备份
- 磁盘故障:DataNode 检测到磁盘损坏,报告 NameNode,从备份复制恢复
- DataNode 故障:通过心跳与 NameNode 通信,超时未发送心跳则视为宕机,复制其数据块到其他节点
- NameNode 故障:基于 ZooKeeper 实现主从备份,争夺 znode 锁
07 | 为什么说 MapReduce 既是编程模型又是计算框架?
MapReduce 既是编程模型,又是计算框架。包含两个阶段:
- Map:输入
<Key, Value>→ 输出<Key, Value> - Reduce:相同 Key 合并为
<Key, Value 集合>→ 输入 reduce → 输出零个或多个<Key, Value>对
08 | MapReduce 如何让数据完成一次旅行?
MapReduce 作业启动和运行机制
- 大数据应用进程:用户启动的主入口,指定 Map/Reduce 类、输入输出路径,提交作业给 JobTracker
- JobTracker 进程:集群全局唯一,根据数据量命令 TaskTracker 启动 Map/Reduce 任务,管理作业生命周期调度与监控
- TaskTracker 进程:启动和管理 Map/Reduce 进程,通常与 DataNode 部署在同一服务器
MapReduce 数据合并与连接机制
Map 输出与 Reduce 输入之间的数据合并与连接操作称为 Shuffle。分布式计算需将不同服务器上的相关数据合并到一起进行下一步计算。
09 | 为什么我们管 Yarn 叫作资源调度框架?
原有架构将资源调度与 MapReduce 执行耦合,无法统一支持 Spark、Storm 等其他计算框架。Yarn 解耦了资源管理与计算执行。

Yarn 两大组件:
- ResourceManager:负责整个集群资源调度管理,通常部署在独立服务器
- NodeManager:负责具体服务器资源和任务管理,每台服务器部署,通常与 DataNode 共存
Yarn 工作流程:
- 提交应用程序(含 ApplicationMaster、程序和启动命令)
- ResourceManager 分配第一个容器,启动 ApplicationMaster
- ApplicationMaster 注册并向 ResourceManager 申请容器资源
- 获得容器后,将用户程序分发到 NodeManager 服务器运行(Map/Reduce 任务)
- 任务运行期汇报状态,结束后注销并释放资源
10 | 模块答疑:我们能从 Hadoop 学到什么?
Hadoop 主要产品均采用一主多从架构:
- HDFS:一个 NameNode + 多个 DataNode
- MapReduce:一个 JobTracker + 多个 TaskTracker
- Yarn:一个 ResourceManager + 多个 NodeManager
- Storm:一个 Nimbus + 多个 Supervisor
- Spark:一个 Master + 多个 Slave
核心思想:集中管理,分布存储与计算。
模块二、大数据生态体系主要产品原理与架构
11 | Hive 是如何让 MapReduce 实现 SQL 操作的?
Hive 处理输入的 SQL 语句(语法与标准 SQL 略有不同),调用 MapReduce 完成数据分析。
- DDL(数据定义):Driver 将表信息记录到 Metastore 元数据组件(通常用关系数据库实现,存储表名、字段、类型、HDFS 路径等)
- DQL(数据查询):Driver → Compiler(语法分析/解析/优化)→ 生成 MapReduce 执行计划 → 提交 Hadoop 执行
12 | 我们并没有觉得 MapReduce 速度慢,直到 Spark 出现
RDD(Resilient Distributed Datasets,弹性数据集)是 Spark 的核心,既是编程模型又是架构核心元素。
Spark 编写 WordCount 仅需三行核心代码:
val textFile = sc.textFile("hdfs://...")
val counts = textFile.flatMap(line => line.split(" "))
.map(word => (word, 1))
.reduceByKey(_ + _)
counts.saveAsTextFile("hdfs://...")MapReduce vs Spark:
- MapReduce:面向过程,分 Map/Reduce 两阶段
- Spark:面向对象,将数据抽象为 RDD,在其上进行各种计算处理得到新 RDD
RDD 两类操作:
- 转换(transformation):返回值仍是 RDD(
map、filter、union、reduceByKey、join、groupByKey等) - 执行(action):不再返回 RDD
13 | 同样的本质,为何 Spark 可以更高效?
Spark 三大特性:
- RDD 编程模型更简单
- DAG 多阶段计算切分更快速
- 内存存储中间计算结果更高效
14 | BigTable 的开源实现:HBase
HBase 可伸缩架构

伸缩性依赖可分裂的 HRegion 和可伸缩的 HDFS:
- HRegion:数据存储主要进程,负责读写操作
- HRegionServer:物理服务器,可启动多个 HRegion 实例。数据达到阈值时 HRegion 分裂并迁移以实现负载均衡
- 每个 HRegion 存储一段 Key 值区间
[key1, key2)的数据 - HMaster:记录所有 HRegion 信息(Key 区间、地址、端口),通过 ZooKeeper 选举保证高可用
- 应用通过 ZooKeeper 获取主 HMaster 地址 → 定位 HRegionServer → 访问 HRegion 获取数据

HRegion 数据存储在 HFile 格式文件中(HDFS 分布式存储)。数据量过多时,HRegion 连同 HFile 分裂并迁移到负载较低的服务器,实现线性伸缩。
HBase 可扩展数据模型
支持列族结构的 NoSQL 数据库:
- 创建表时只需指定列族名字,无需指定字段,写入时再指定
- 支持数百万字段,随意扩展数据结构
- 实质是将字段名和字段值以 Key-Value 方式存储
HBase 的高性能存储
使用 LSM 树(Log 结构合并树)进行数据存储:写入时以 Log 方式连续写入,异步对磁盘上多个 LSM 树进行合并。

LSM 树原理:
- 写操作(插入/修改/删除)均在内存中进行,创建新记录
- 内存中形成一棵排序树
- 超过内存阈值后,与磁盘上最新排序树合并
- 逐级合并,新数据覆盖旧数据(或记录不同版本)
15 | 流式计算的代表:Storm、Flink、Spark Streaming
16 | ZooKeeper 是如何保证数据一致性的?
脑裂:系统中节点被分隔成独立部分,无法互相通信,导致数据不一致。通常由网络/硬件/软件故障导致。
ZooKeeper 使用 ZAB 算法(Paxos 的简化方案)解决多服务器状态一致性问题。
17 丨模块答疑:这么多技术,到底都能用在什么场景里?
大数据技术通常部署在同一集群中:
- 某台服务器同时运行 HDFS DataNode(数据存储)和 Yarn NodeManager(资源调度)
- MapReduce/Spark/Storm/Flink 通过 Yarn 调度运行在 NodeManager 容器中
- Hive/Spark SQL 将 SQL 解析为执行计划后,同样提交给 Yarn 调度执行
模块三、大数据开发实践
18 | 如何自己开发一个大数据 SQL 引擎?
19 | Spark 的性能优化案例分析(上)
性能指标:
- 响应时间:完成一次任务花费的时间
- 并发数:同时处理的任务数
- 吞吐量:单位时间完成的任务数
- 性能计数器:System Load、线程数、CPU/内存/磁盘/网络使用率
Spark 性能优化步骤:
- 性能测试,观察资源利用情况
- 分析、寻找资源瓶颈
- 分析架构与代码,找到资源利用关键所在
- 代码/架构/基础设施调优
- 再次测试,验证优化效果并寻找下一个瓶颈
20 | Spark 的性能优化案例分析(下)
21 | 从阿里内部产品看海量数据处理系统的设计(上):Doris 的立项
22 | 从阿里内部产品看海量数据处理系统的设计(下):架构与创新
23 | 大数据基准测试可以带来什么好处?
大数据基准测试工具:
24 丨从大数据性能测试工具 Dew 看如何快速开发大数据系统
25 | 模块答疑:我能从大厂的大数据开发实践中学到什么?
学习层次
- 练习
- 应用
- 开发
模块四、大数据平台与系统集成
26 | 互联网产品 + 大数据产品 = 大数据平台

- 数据采集:Sqoop(数据库同步)、Flume(日志同步)、Kafka(打点采集消息传递)
- 数据处理:离线(MapReduce/Hive/Spark)、实时(Storm/Spark Streaming/Flink)
- 数据展示:Lambda 架构

27 | 大数据从哪里来?
数据来源主要有四类:
- 数据库导入
- Sqoop:数据库批量导入导出工具
- Canal:阿里开源的 MySQL binlog 获取工具,伪装成从库获取 binlog
- 日志文件导入:Flume
- 前端程序埋点:手动埋点 / 自动埋点
- 爬虫
28 | 知名大厂如何搭建大数据平台?
淘宝大数据平台

美团大数据平台

滴滴大数据平台

29 | 盘点可供中小企业参考的商业大数据平台
大数据解决方案提供商
CDH、TDH

CDH 是一个大数据集成平台,企业可一站式部署整个大数据技术栈。分 4 层:
- 系统集成:Sqoop(数据库)、Flume(日志)、Kafka(实时数据)
- 大数据存储:HDFS(文件系统)、Kudu(结构化)、HBase(NoSQL)、对象存储
- 统一服务:Yarn(资源管理)、Sentry + RecordService(安全管理与权限控制)
- 计算:MapReduce/Spark/Hive/Pig(批处理)、SparkStreaming(流计算)、Impala(快速 SQL)、Solr(搜索)
大数据云计算服务商
阿里云、亚马逊
大数据 SaaS 服务商
友盟、神策、百度统计
大数据开放平台
30 | 当大数据遇上物联网

- 智能网关通过消息队列上传数据,流式计算引擎(Storm 等)从队列获取数据:清理转换写入存储;调用规则和机器学习模型计算,触发规则时通过设备管理服务器下发控制指令
- 离线计算引擎(Spark 等)定时批量处理存储数据,更新机器学习模型
- 应用程序可通过设备管理服务器直接发送控制指令
31 | 模块答疑:为什么大数据平台至关重要?
模块五、大数据分析与运营
32 | 互联网运营数据指标与可视化监控
运营常用数据指标:
- 新增用户数
- 用户留存率
- 活跃用户数
- PV(Page View,页面浏览量)
- GMV(Gross Merchandise Volume,成交总金额)
- 转化率 = 付费用户数 / 总用户数
33 丨一个电商网站订单下降的数据分析案例
34 丨 A-B 测试与灰度发布必知必会
A/B 测试的过程

A/B 测试的系统架构
核心:根据用户 ID(或设备 ID)分发实验配置参数,应用程序根据配置决定展示界面和业务逻辑。

灰度发布
35 丨如何利用大数据成为“增长黑客”?
AARRR 用户增长模型(5 个关键环节):
- 获取用户(Acquisition):通过推广手段使产品触达用户
- 提高活跃度(Activation):结合产品内容和运营活动提升用户活跃度
- 提高留存率(Retention):老用户成本远低于新用户。常用手段:优惠活动、会员等级体系、流失用户消息推送
- 获取收入(Revenue):用户付费和广告收入
- 自传播(Refer):社交分享、裂变式传播(“帮我砍价”“帮我抢票”等)
增长手段:
- 用户画像定位用户群体
- 用户分析挽回用户
- A/B 测试决定产品功能
- 大数据反欺诈、反羊毛
- 用户生命周期管理
36 丨模块答疑:为什么说数据驱动运营?
略
模块六、大数据算法
37 丨如何对数据进行分类和预测?
KNN 算法(K 近邻):将待分类数据与已分类样本集比较,取距离最近的 K 个样本,K 个样本中归属最多的类别即为分类结果。
数据距离度量:
- 欧氏距离:计算空间距离
- 余弦相似度:计算向量夹角,更关注数据相似性
文本特征提取 - TF-IDF:
- TF(词频):单词在文档中出现的频率
- IDF(逆文档频率):单词在所有文档中的稀缺程度
- TF-IDF = TF × IDF
贝叶斯分类:基于条件概率的分类算法,已知 A 和 B 的概率及 B 发生时 A 的概率,可计算 A 发生时 B 的概率。
38 丨如何发掘数据之间的关系?
搜索排序:Google PageRank 算法
关联分析 - Apriori 算法:大幅降低商品组合计算数目。原理:若商品组合不满足最小支持度,则包含该组合的其他组合也不满足。从单件商品开始逐步迭代:
- 设置最小支持度阈值
- 寻找满足最小支持度的单件商品
- 两两组合,寻找满足最小支持度的两件商品组合
- 逐步扩展到三件、四件…直到找到所有满足条件的组合
聚类:对数据自动归类。K-means 算法。
39 丨如何预测用户的喜好?
推荐算法四种方式:
- 基于人口统计:根据用户基本信息分类,推荐给同类用户
- 基于商品属性:将商品属性分类,根据用户历史行为推荐
- 基于用户的协同过滤:根据用户喜好分类(常用 KNN),寻找喜好最相近的 K 个用户进行推荐
- 基于商品的协同过滤:根据用户喜好对商品分类,喜欢它们的用户重叠性高则视为同类商品推荐
40 丨机器学习的数学原理是什么?

机器学习三要素:
- 样本:训练数据,包括输入和结果
- 模型:映射样本输入与结果的函数(条件概率分布或决策函数)
- 算法:从假设空间中寻找最优函数 f,使 f(X) 与真实 Y 值距离最小。通常无解析解,需数值计算迭代求解
41 丨从感知机到神经网络算法
42 丨模块答疑:软件工程师如何进入人工智能领域?
推荐学习:斯坦福大学机器学习公开课