大数据日知录要点整理
大数据日知录要点整理
第0 章 当谈论大数据时我们在谈什么 1
NOSQL选型:kv-cassandra、dynamo,列式存储-HBase,图存储-Neo4j
社交网络数据存储适合用图数据库,而实时响应要求较高的场合适合Hbase等列式数据库。海量数据批处理任务,Hadoop+HDFS更好。
第1 章 数据分片与路由 9
1.1 抽象模型10
1.2 哈希分片(Hash Partition) 11
1.2.1 Round Robin11
1.2.2 虚拟桶(Virtual Buckets) 12
1.2.3 一致性哈希(Consistent Hashing) 13
1.3 范围分片(Range Partition) 18
参考文献19
第2 章 数据复制与一致性20
2.1 基本原则与设计理念21
2.1.1 原教旨CAP 主义21
2.1.2 CAP 重装上阵(CAP Reloaded)23
2.1.3 ACID 原则24
2.1.4 BASE 原则24
2.1.5 CAP/ACID/BASE 三者的关系25
2.1.6 幂等性(Idempotent)26
2.2 一致性模型分类26
2.2.1 强一致性27
2.2.2 最终一致性28
2.2.3 因果一致性28
2.2.4 “读你所写”一致性29
2.2.5 会话一致性29
2.2.6 单调读一致性30
2.2.7 单调写一致性30
2.3 副本更新策略30
2.3.1 同时更新30
2.3.2 主从式更新31
2.3.3 任意节点更新32
2.4 一致性协议32
2.4.1 两阶段提交协议(Two—Phrase Commit,2PC)33
2.4.2 向量时钟(Vector Clock) 38
2.4.3 RWN 协议40
2.4.4 Paxos 协议42
2.4.5 Raft 协议45
参考文献49
第3 章 大数据常用的算法与数据结构51
3.1 布隆过滤器(Bloom Filter) 51
3.1.1 基本原理52
3.1.2 误判率及相关计算52
3.1.3 改进:计数Bloom Filter53
3.1.4 应用54
3.2 SkipList55
3.3 LSM 树58
3.4 Merkle 哈希树(Merkle Hash Tree) 62
3.4.1 Merkle 树基本原理62
3.4.2 Dynamo 中的应用63
3.4.3 比特币中的应用63
3.5 Snappy 与LZSS 算法65
3.5.1 LZSS 算法65
3.5.2 Snappy67
3.6 Cuckoo 哈希(Cuckoo Hashing) 67
3.6.1 基本原理68
3.6.2 应用:SILT 存储系统68
参考文献70
第4 章 集群资源管理与调度71
4.1 资源管理抽象模型72
4.1.1 概念模型72
4.1.2 通用架构73
4.2 调度系统设计的基本问题74
4.2.1 资源异质性与工作负载异质性74
4.2.2 数据局部性(Data Locality) 75
4.2.3 抢占式调度与非抢占式调度75
4.2.4 资源分配粒度(Allocation Granularity) 76
4.2.5 饿死(Starvation)与死锁(Dead Lock)问题76
4.2.6 资源隔离方法77
4.3 资源管理与调度系统范型77
4.3.1 集中式调度器(Monolithic Scheduler)78
4.3.2 两级调度器(Two—Level Scheduler) 79
4.3.3 状态共享调度器(Shared—State Scheduler) 79
4.4 资源调度策略81
4.4.1 FIFO 调度策略81
4.4.2 公平调度器(Fair Scheduler)81
4.4.3 能力调度器(Capacity Scheduler) 82
4.4.4 延迟调度策略(Delay Scheduling)82
4.4.5 主资源公平调度策略(Dominant Resource Fair Scheduling)82
4.5 Mesos 84
4.6 YARN87
参考文献90
第5 章 分布式协调系统91
5.1 Chubby 锁服务92
5.1.1 系统架构93
5.1.2 数据模型94
5.1.3 会话与KeepAlive 机制95
5.1.4 客户端缓存95
5.2 ZooKeeper 96
5.2.1 体系结构96
5.2.2 数据模型(Data Model) 97
5.2.3 API 98
5.2.4 ZooKeeper 的典型应用场景98
5.2.5 ZooKeeper 的实际应用103
参考文献104
第6 章 分布式通信106
6.1 序列化与远程过程调用框架107
6.1.1 Protocol Buffer 与Thrift 108
6.1.2 Avro109
6.2 消息队列110
6.2.1 常见的消息队列系统110
6.2.2 Kafka 111
6.3 应用层多播通信(Application—Level Multi—Broadcast)114
6.3.1 概述114
6.3.2 Gossip 协议115
参考文献118
第7 章 数据通道120
7.1 Log 数据收集120
7.1.1 Chukwa121
7.1.2 Scribe122
7.2 数据总线123
7.2.1 Databus125
7.2.2 Wormhole 127
7.3 数据导入/导出128
参考文献129
第8 章 分布式文件系统131
8.1 Google 文件系统(GFS) 132
8.1.1 GFS 设计原则132
8.1.2 GFS 整体架构133
8.1.3 GFS 主控服务器134
8.1.4 系统交互行为136
8.1.5 Colossus 137
8.2 HDFS 138
8.2.1 HDFS 整体架构139
8.2.2 HA 方案140
8.2.3 NameNode 联盟143
8.3 HayStack 存储系统145
8.3.1 HayStack 整体架构146
8.3.2 目录服务147
8.3.3 HayStack 缓存148
8.3.4 HayStack 存储系统的实现148
8.4 文件存储布局150
8.4.1 行式存储151
8.4.2 列式存储151
8.4.3 混合式存储156
8.5 纠删码(Erasure Code)158
8.5.1 Reed—Solomon 编码159
8.5.2 LRC 编码164
8.5.3 HDFS—RAID 架构166
参考文献166
……
第9 章 内存KV 数据库168
第10 章 列式数据库176
第11 章 大规模批处理系统199
第12 章 流式计算219
第13 章 交互式数据分析240
第14 章 图数据库:架构与算法271
第15 章 机器学习:范型与架构313
第16 章 机器学习:分布式算法337
第17 章 增量计算366