大數據日知錄要點整理
第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