內容提要
Druid 作為一款開源的實時大數據分析軟體,最近幾年快速風靡全球網際網路公司,特別是對於海量數據和實時性要求高的場景,包括廣告數據分析、用戶行為分析、數據統計分析、運維監控分析等,在騰訊、阿里、優酷、小米等公司都有大量成功套用的案例。《Druid實時大數據分析原理與實踐》的目的就是幫助技術人員更好地深入理解Druid 技術、大數據分析技術選型、Druid 的安裝和使用、高級特性的使用,也包括一些原始碼的解析,以及一些常見問題的快速回答。
Druid 的生態系統正在不斷擴大和成熟,Druid 也正在解決越來越多的業務場景。希望本書能幫助技術人員做出更好的技術選型,深度了解Druid 的功能和原理,更好地解決大數據分析問題。《Druid實時大數據分析原理與實踐》適合大數據分析的從業人員、IT 人員、網際網路從業者閱讀。
目錄
第1 章初識Druid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 Druid 是什麼1
1.2 大數據分析和Druid 1
1.3 Druid 的產生3
1.3.1 MetaMarkets 簡介3
1.3.2 失敗總結4
1.4 Druid 的三個設計原則4
1.4.1 快速查詢(Fast Query) 5
1.4.2 水平擴展能力(Horizontal Scalability) 5
1.4.3 實時分析(Realtime Analytics) 6
1.5 Druid 的技術特點6
1.5.1 數據吞吐量大6
1.5.2 支持流式數據攝入6
1.5.3 查詢靈活且快6
1.5.4 社區支持力度大7
1.6 Druid 的Hello World 7
1.6.1 Druid 的部署環境7
1.6.2 Druid 的基本概念7
1.7 系統的擴展性9
1.8 性能指標10
1.9 Druid 的套用場景10
1.9.1 國內公司11
1.9.2 國外公司12
1.10 小結13
參考資料13
第2 章數據分析及相關軟體. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1 數據分析及相關概念15
2.2 數據分析軟體的發展16
2.3 數據分析軟體的分類17
2.3.1 商業軟體17
2.3.2 時序資料庫22
2.3.3 開源分散式計算平台23
2.3.4 開源分析資料庫25
2.3.5 SQL on Hadoop/Spark 31
2.3.6 數據分析雲服務33
2.4 小結34
參考資料34
第3 章架構詳解. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.1 Druid 架構概覽35
3.2 Druid 架構設計思想36
3.2.1 索引對樹結構的選擇37
3.2.2 Druid 總體架構41
3.2.3 基於DataSource 與Segment 的數據結構43
3.3 擴展系統45
3.3.1 主要的擴展45
3.3.2 下載與載入擴展46
3.4 實時節點47
3.4.1 Segment 數據檔案的製造與傳播47
3.4.2 高可用性與可擴展性48
3.5 歷史節點49
3.5.1 記憶體為王的查詢之道49
3.5.2 層的分組功能50
3.5.3 高可用性與可擴展性51
3.6 查詢節點51
3.6.1 查詢中樞點51
3.6.2 快取的使用52
3.6.3 高可用性52
3.7 協調節點53
3.7.1 集群數據負載均衡的主宰53
3.7.2 利用規則管理數據生命周期53
3.7.3 副本實現Segment 的高可用性54
3.7.4 高可用性54
3.8 索引服務54
3.8.1 主從結構的架構54
3.8.2 統治節點55
3.8.3 中間管理者與苦工56
3.8.4 任務56
3.9 小結57
第4 章安裝與配置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.1 安裝準備58
4.1.1 安裝包簡介58
4.1.2 安裝環境59
4.1.3 Druid 外部依賴60
4.2 簡單示例61
4.2.1 服務運行61
4.2.2 數據導入與查詢62
4.3 規劃與部署65
4.4 基本配置68
4.4.1 基礎依賴配置68
4.4.2 數據節點配置調優69
4.4.3 查詢節點配置調優69
4.5 集群節點配置示例70
4.5.1 節點規劃70
4.5.2 Master 機器配置72
4.5.3 Data 機器配置76
4.6 小結79
第5 章數據攝入. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
5.1 數據攝入的兩種方式80
5.1.1 流式數據源80
5.1.2 靜態數據源81
5.2 流式數據攝取81
5.2.1 以Pull 方式攝取82
5.2.2 用戶行為數據攝取案例86
5.2.3 以Push 方式攝取89
5.2.4 索引服務任務相關管理接口91
5.3 靜態數據批量攝取94
5.3.1 以索引服務方式攝取94
5.3.2 以Hadoop 方式攝取96
5.4 流式與批量數據攝取的結合99
5.4.1 Lambda 架構99
5.4.2 解決時間視窗問題100
5.5 數據攝取的其他重要知識101
5.5.1 數據分片101
5.5.2 數據複製106
5.5.3 索引服務之Tranquility 107
5.5.4 高基數維度最佳化111
5.6 小結116
第6 章數據查詢. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
6.1 查詢過程117
6.2 組件118
6.2.1 Filter 118
6.2.2 Aggregator 121
6.2.3 Post-Aggregator 125
6.2.4 Search Query 129
6.2.5 Interval 129
6.2.6 Context 130
6.3 案例介紹131
6.4 Timeseries 134
6.5 TopN 138
6.6 GroupBy 144
6.7 Select 149
6.8 Search 151
6.9 元數據查詢153
6.10 小結156
第7 章高級功能和特性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
7.1 近似直方圖(Approximate Histogram) 158
7.1.1 分位數和直方圖158
7.1.2 實現原理158
7.1.3 如何使用161
7.1.4 近似直方圖小結163
7.2 數據Sketch 163
7.2.1 DataSketch Aggregator 163
7.2.2 DataSketch Post-Aggregator 167
7.3 地理查詢(Geographic Query) 170
7.3.1 基本原理170
7.3.2 空間索引(Spatial Indexing) 171
7.3.3 空間過濾(Spatial Filter) 171
7.3.4 邊界條件(Boundary Condition) 172
7.3.5 地理查詢小結172
7.4 Router 172
7.4.1 Router 概覽172
7.4.2 路由規則174
7.4.3 配置175
7.4.4 路由策略175
7.5 Kaa 索引服務177
7.5.1 設計背景177
7.5.2 實現178
7.5.3 如何使用182
7.6 Supervisor API 186
7.6.1 創建Supervisor 186
7.6.2 關閉Supervisor 186
7.6.3 獲取當前執行的Supervisor 186
7.6.4 獲取Supervisor 規範186
7.6.5 獲取Supervisor 的狀態報告186
7.6.6 獲取所有Supervisor 的歷史187
7.6.7 獲取Supervisor 的歷史187
7.7 最佳實踐187
7.7.1 容量規劃187
7.7.2 Supervisor 的持久化187
7.7.3 Schema 的配置與變更188
7.8 小結188
第8 章核心原始碼探析. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
8.1 如何編譯Druid 代碼189
8.2 Druid 項目介紹190
8.3 索引結構模組和層次關係192
8.4 Column 結構192
8.5 Segment 195
8.6 Query 模組203
8.6.1 基礎組件203
8.6.2 記憶體池管理206
8.6.3 查詢流程概覽207
8.6.4 查詢引擎225
8.7 Coordinator 模組229
8.8 小結237
第9 章監控和安全. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
9.1 Druid 監控238
9.1.1 Druid 監控指標238
9.1.2 常用的監控方法245
9.2 Druid 告警250
9.2.1 Druid 告警信息250
9.2.2 Druid 與告警系統的集成250
9.3 Druid 安全251
9.3.1 Druid 與利用Kerberos 加強安全認證的系統集成251
9.3.2 集成外部許可權模組完成用戶授權255
9.4 小結256
第10 章實踐和套用. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
10.1 小米257
10.1.1 場景一:小米統計服務258
10.1.2 場景二:廣告平台實時數據分析260
10.2 優酷土豆262
10.2.1 需求分析262
10.2.2 技術選型及工程實踐263
10.2.3 最佳化策略266
10.3 騰訊267
10.3.1 工程實踐267
10.3.2 業務實踐270
10.4 藍海訊通279
10.5 小結284
第11 章Druid 生態與展望. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
11.1 Druid 生態系統285
11.2 Druid 生態系統資源288
11.2.1 IAP 288
11.2.2 Plywood 289
11.2.3 PlyQL 294
11.2.4 Pivot 297
11.2.5 Druid-Metrics-Kaa 300
11.2.6 Caravel(Airbnb) 301
11.3 Druid 的社區討論組302
11.4 Druid 展望302
參考資料303
附錄A 常見問題(FAQ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
附錄B 常用參數表. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312