目前,在基于大數據技術的數據中臺建設過程中,由于缺乏完備的架構參考和類似于“腳手架”的原型項目,很多IT團隊會在工程技術層面上感到無從下手。開發人員迫切地需要設計良好的架構參考和簡單易用的原型項目幫助他們快速啟動自己的數據中臺建設,本書就是為這一目標而寫作的。本書以大數據平臺的架構設計為主題,圍繞一個2萬行源代碼的原型項目講解和演示如何在工程技術層面構建當下流行的數據中臺。全書涵蓋建設一個企業數據平臺所需的各個重要環節,包括基礎設施建設、數據采集、主數據管理、實時計算、批處理與數據倉庫、數據存儲及作業調度,每個環節獨立成章,每一章介紹對應主題的架構方案和技術選型,然后結合原型項目講解具體的實現細節。如果你是一位架構師,本書可以幫助你提升對大數據平臺的整體把控力;如果你是中高級開發人員,建議你選擇自己感興趣的章節深入學習原型項目的代碼;如果你是企業的CIO或數據團隊的負責人,本書的第1、2、4章對于你定制企業數據中臺戰略、規劃數據平臺藍圖及組建數據團隊都有重要的參考價值。
耿立超,架構師,14年IT系統開發和架構經驗,對大數據、企業級應用架構、SaaS、分布式存儲和領域驅動設計有豐富的實踐經驗,熱衷函數式編程。目前負責企業數據中臺的架構設計和開發工作,對Hadoop/Spark 生態系統有深入和廣泛的了解,參與過Hadoop商業發行版的開發,曾帶領團隊開發過多個基于大數據技術的企業數據平臺,完成包含數據采集、數據倉庫、實時處理和數據服務的完整平臺建設。
第1章 企業與數據 1
1.1 數據的價值 3
1.2 企業的數據應用能力 6
1.3 企業的數據技術成熟度 12
1.4 數據團隊建設 14
1.4.1 大數據人才類型 14
1.4.2 數據團隊的組織與管理 20
1.5 建設數據文化 25
第2章 聚焦中臺 27
2.1 中臺簡介 27
2.2 企業信息系統現狀 28
2.2.1 點對點式的系統集成 29
2.2.2 重復建設 30
2.2.3 阻礙業務沉淀與發展 31
2.3 煙囪架構案例:會員管理 31
2.4 曾經的“救贖”——SOA 38
2.5 中臺詳解 41
2.5.1 中臺架構 42
2.5.2 中臺的技術體系 46
2.5.3 中臺的組織架構 48
2.5.4 中臺不是“銀彈” 51
2.6 數據中臺 52
2.6.1 企業數據資產的現狀 53
2.6.2 數據中臺具備的能力 54
2.6.3 數據中臺建設策略 56
第3章 基礎設施 60
3.1 集群規劃 61
3.1.1 集群規模與節點配置 61
3.1.2 節點角色分配 63
3.2 創建實例與組網 65
3.2.1 登錄云控制臺 65
3.2.2 創建專有網絡 67
3.2.3 創建安全組 67
3.2.4 創建實例 72
3.2.5 申請彈性公網IP地址 78
3.3 安裝集群 79
3.3.1 軟件清單 79
3.3.2 環境預配置 80
3.3.3 安裝Redis 86
3.3.4 安裝Galera(MySQL集群) 87
3.3.5 搭建本地CDH Repository 100
3.3.6 安裝Cloudera Manager Server 103
3.3.7 安裝CDH 110
3.3.8 高可用配置 114
3.3.9 安裝Spark 2 117
3.3.10 啟用Spark SQL 118
3.4 安裝單節點集群 121
第4章 架構與原型 122
4.1 大數據平臺架構設計 123
4.2 原型項目業務背景 127
4.3 原型項目架構方案 132
4.4 原型項目工程結構 139
4.5 部署原型項目 142
4.5.1 配置服務器 142
4.5.2 構建與部署 151
4.5.3 最小化增量部署 165
第5章 數據采集 167
5.1 技術堆棧與選型 168
5.2 需求與概要設計 171
5.3 原型項目設計 173
5.4 生成dummy數據 174
5.5 基于Sqoop的批量導入 177
5.5.1 項目原型 177
5.5.2 使用Sqoop 180
5.5.3 增量導入與全量導入 184
5.6 基于Camel的實時采集 185
5.6.1 項目原型 186
5.6.2 基本的數據采集 188
5.6.3 應對采集作業超時 193
5.6.4 應對數據延遲就緒 197
第6章 主數據管理 202
6.1 主數管理據系統的建設策略 202
6.2 原型設計 204
6.3 項目構建與運行 205
6.4 使用主數據 209
6.5 圍繞主數據進行領域建模 209
6.6 主數據在內存數據庫中的組織粒度 219
第7章 實時計算 221
7.1 ETL已死,流計算永存 221
7.2 技術堆棧與選型 223
7.2.1 Storm 223
7.2.2 Spark Streaming 225
7.2.3 Flink 235
7.2.4 Kafka Stream 237
7.2.5 關于選型的考量 238
7.3 實時計算需求分析 239
7.4 原型項目介紹與構建 241
7.5 流計算工程結構 243
7.6 集成Kafka 245
7.7 集成HBase 246
7.8 基于時間窗口的聚合運算 252
7.9 自定義狀態的流 255
7.10 自定義狀態的設計 260
7.11 Structured Streaming性能相關的參數 263
第8章 批處理與數據倉庫 266
8.1 大數據與數據倉庫 266
8.2 數據倉庫的基本理論 267
8.2.1 維度和度量 268
8.2.2 事實表和維度表 268
8.2.3 維度的基數 269
8.2.4 Cube和Cuboid 269
8.2.5 星型模型與雪花模型 269
8.3 批處理需求分析 271
8.4 數據倉庫架構 272
8.5 原型項目介紹與構建 277
8.6 數據倉庫工程結構 283
8.7 臨時數據層的設計與構建 285
8.8 源數據層的設計與構建 286
8.8.1 數據模型 287
8.8.2 建表并處理數據 288
8.8.3 SQL黏合與作業提交 293
8.8.4 增量導入與全量導入 298
8.8.5 源數據層的表分區 300
8.8.6 SRC層數據歸檔 300
8.9 明細數據層的設計與構建 301
8.9.1 數據模型 301
8.9.2 建表并處理數據 302
8.9.3 合并增量數據 305
8.9.4 SQL參數替換 307
8.10 匯總數據層的設計與構建 309
8.10.1 數據模型 309
8.10.2 建表并處理數據 312
8.10.3 構建維度模型 314
8.10.4 緩慢變化維度 318
8.10.5 2型SCD表 320
8.10.6 生成代理主鍵 328
8.10.7 運行示例 329
8.11 實現UDF 332
第9章 數據存儲 335
9.1 批處理的數據存儲 335
9.2 NoSQL數據庫概覽 341
9.3 HBase與Cassandra 343
9.4 HBase的Rowkey設計 349
9.4.1 “熱點”問題與應對策略 349
9.4.2 定長處理 352
9.4.3 最佳實踐 352
9.5 探索HBase二級索引 356
第10章 作業調度 364
10.1 技術堆棧與選型 364
10.2 需求與概要設計 365
10.3 工作流的組織策略 366
10.4 工程結構 370
10.5 項目構建 372
10.6 實現工作流 375
10.7 實現coordinator 381
10.8 部署與提交工作流 385
10.9 作業依賴管理 389
10.9.1 Oozie的作業依賴管理 391
10.9.2 原型項目中的作業依賴 394