《极客时间教程 - 大规模数据处理实战》笔记
2023/3/15大约 4 分钟
《极客时间教程 - 大规模数据处理实战》笔记
00 丨开篇词丨从这里开始,带你走上硅谷一线系统架构师之路
01 丨为什么 MapReduce 会被硅谷一线公司淘汰?
- 高昂的维护成本
- 时间性能“达不到”用户期待
- 模型抽象层次低,只提供 Map 和 Reduce 两个操作
- 每一步计算结果都存储在 HDFS,磁盘读写大幅增加延迟
- 只支持批处理
02 | MapReduce 后谁主沉浮:怎样设计下一代数据处理技术?
03 | 大规模数据处理初体验:怎样实现大型电商热销榜?
不同量级 TOP K 算法解决方案:
- 小规模:Hash 即可
- 大规模:单机处理量不足,分而治之 → 分片统计,然后聚合(先 map 后 reduce)
04 丨分布式系统(上):学会用服务等级协议 SLA 来评估你的系统
SLA(Service-Level Agreement,服务等级协议):系统服务提供者对客户的服务承诺。
- 可用性:大厂要求至少四个 9(99.99%)
- 准确性:准确率 = 正确的有效请求数 / 有效的总请求数
- 系统容量:通过 QPS(Queries Per Second)衡量
- 延迟:请求和响应的时间间隔
05 丨分布式系统(下):架构师不得不知的三大指标
- 可扩展性(Scalability)
- 水平扩展(Horizontal Scaling)
- 垂直扩展(Vertical Scaling)
- 一致性(Consistency)
- 强一致性:更新后任意时刻,所有节点数据一致
- 弱一致性:更新后可能读到旧值,但“不一致窗口”后读到新值
- 最终一致性:弱一致性的特殊形式,无新更新时最终所有访问返回最新值
- 持久性(Data Durability):数据一旦成功存储即可一直使用,即使节点下线/宕机/损坏
06 | 如何区分批处理还是流处理?
核心概念:
- 无边界数据(Unbounded Data):无限增长的数据集
- 有边界数据(Bounded Data):有限的数据集
- 事件时间(Event Time):数据实际产生的时间点
- 处理时间(Processing Time):系统实际接收到数据的时间点
批处理:输入输出均为有边界数据,关心事件时间
- 日志分析:时间段内收集的日志,定时分析关键指标
- 计费应用:计算一段时间内服务使用程度(如月末信用卡账单)
- 数据仓库:按事件时间合并数据为静态快照,聚合为周/月/季度报告
流处理:输入为无边界数据
- 实时监控:分析传感器、新闻源、网页点击等实时数据
- 实时商业智能:智能汽车、智能家居、智能护理
- 销售终端(POS):股票价格更新、实时付款系统
07 | Workflow 设计模式:让你在大规模数据世界中君临天下
略
08 | 发布/订阅模式:流处理架构中的瑞士军刀
略
09 丨 CAP 定理:三选二,架构师必须学会的取舍
略
10 丨 Lambda 架构:Twitter 亿级实时数据分析架构背后的倚天剑
Lambda 架构由三层组成:
- 批处理层(Batch Layer)
- 速度处理层(Speed Layer)
- 服务层(Serving Layer)
11 丨 Kappa 架构:利用 Kafka 锻造的屠龙刀
略
12 | 我们为什么需要 Spark?
MapReduce 的缺点:
- 高昂的维护成本,时间性能不足
- 模型抽象层次低,只提供 Map 和 Reduce 两个操作
- 每个 Job 结果存储在 HDFS,每步计算都需要磁盘读写,大幅增加延迟
- 只支持批处理
Spark 的优势:
- 性能远超 MapReduce
- 丰富的 RDD 操作(
Map、Filter、flatMap、groupByKey、Union等),支持复杂场景
13 丨弹性分布式数据集:Spark 大厦的地基(上)
Spark 最基本的数据抽象是 RDD(Resilient Distributed Dataset,弹性分布式数据集):
- 已被分区的数据集合
- 不可变
- 能够被并行操作
14 丨弹性分布式数据集:Spark 大厦的地基(下)
15 丨 SparkSQL:Spark 数据查询的利器
16 | Spark Streaming:Spark 的实时流计算 API
Spark Streaming 用时间片拆分无限数据流,对每个数据片用类似批处理的方法处理,输出也是分块的。