本書以當(dāng)前穩(wěn)定版 HBase 2.4.9 為基礎(chǔ),將 Hadoop 升級到 2.10.1 版本,并對客戶端 API 進(jìn)行升級。本書以精練的語言介紹 HBase 的基礎(chǔ)知識,讓初學(xué)者能夠快速上手使用 HBase;深入分析 HBase 的核心思想(如數(shù)據(jù)讀取和數(shù)據(jù)備份等)和 HBase 架構(gòu)(如 B+樹、LSM 樹和 WAL 等),專注于 HBase 在線實時系統(tǒng)的調(diào)優(yōu),使 HBase 集群響應(yīng)延遲更低,讓有經(jīng)驗的 HBase 開發(fā)人員能循序漸進(jìn)地理解 HBase 源代碼,更好地調(diào)試和解決各種實際問題;本書從企業(yè)常見的“用戶行為日志管理系統(tǒng)”著手,結(jié)合 HBase 的實際應(yīng)用場景,讓讀者快速上手,真正做到從入門到實踐。
本書非常適合作為有一定 Java 基礎(chǔ)的開發(fā)人員的 HBase 入門教程,也適合作為HBase 運維人員部署和監(jiān)控 HBase 的參考手冊,還適合作為將 HBase 應(yīng)用到在線生產(chǎn)環(huán)境中的開發(fā)人員進(jìn)行 HBase 在線集群性能調(diào)優(yōu)的技術(shù)指南。
1.本書進(jìn)行版本更新,以新的穩(wěn)定版HBase 2.4.9為基礎(chǔ),將Hadoop升級到2.10.1版本,對客戶端API做了重磅升級。
2.本書專注于HBase在線實時系統(tǒng)的調(diào)優(yōu),使HBase集群響應(yīng)延遲更低。
3.本書結(jié)合企業(yè)需要的“用戶行為日志系統(tǒng)”,讓讀者能夠快速上手的同時,做到從入門到實踐。
彭旭,2009年畢業(yè)于武漢大學(xué)軟件工程專業(yè),具有十多年的國內(nèi)頂尖互聯(lián)網(wǎng)企業(yè)工作經(jīng)驗,曾任阿里巴巴天貓技術(shù)部資深軟件工程師和珠海市魅族科技有限公司架構(gòu)師,精通Java生態(tài)系統(tǒng)相關(guān)技術(shù),HBase實踐經(jīng)驗豐富,對傳統(tǒng)關(guān)系型數(shù)據(jù)庫跟面向列式存儲的HBase都有深刻的理解,擅長大數(shù)據(jù)存儲、HBase在線系統(tǒng)的調(diào)優(yōu)。
目 錄
第 1 章 HBase 簡介 1
1 1 背景 1
1 2 NoSQL 與傳統(tǒng) RDBMS 2
1 3 應(yīng)用場景 3
1 3 1 Facebook 用戶交互 3
1 3 2 淘寶 TLog 3
1 3 3 小米云服務(wù) 4
1 3 4 用戶行為數(shù)據(jù)存儲 4
第 2 章 HBase 安裝 5
2 1 單機(jī)部署 5
2 1 1 前置條件 5
2 1 2 下載 HBase 6
2 1 3 配置 HBase 6
2 1 4 啟動 HBase 7
2 1 5 HBase 初體驗 7
2 2 分布式部署 8
2 2 1 環(huán)境準(zhǔn)備 9
2 2 2 ZooKeeper 安裝 11
2 2 3 Hadoop 安裝 12
2 2 4 HBase 安裝 23
2 2 5 啟動集群 28
2 3 集群增刪節(jié)點 29
2 3 1 增加節(jié)點 29
2 3 2 刪除節(jié)點 30
第 3 章 HBase 的數(shù)據(jù)模型 33
3 1 邏輯模型 33
3 2 物理模型 35
第 4 章 HBase Shell 39
4 1 數(shù)據(jù)定義語言 39
4 1 1 創(chuàng)建表 39
4 1 2 查看所有表 40
4 1 3 查看已創(chuàng)建的表 40
4 1 4 修改表 41
4 2 數(shù)據(jù)操縱語言 41
4 2 1 put 命令 41
4 2 2 get 命令 42
4 2 3 scan 命令 43
4 2 4 delete 命令、deleteall 命令和
truncate 命令 45
4 3 其他常用的 Shell 命令 46
4 3 1 復(fù)制狀態(tài)查看 46
4 3 2 分區(qū)拆分 47
4 3 3 分區(qū)大合并 47
4 3 4 負(fù)載均衡開關(guān) 47
4 3 5 分區(qū)手動遷移 47
4 3 6 HBase 運行 Ruby 腳本 48
第 5 章 模式設(shè)計 49
5 1 行鍵設(shè)計 50
5 2 規(guī)避熱點區(qū)間 52
5 3 高表與寬表 54
5 4 微信朋友圈設(shè)計 55
5 4 1 需求定義 55
5 4 2 問題建模 55
第 6 章 客戶端 API 61
6 1 Java 客戶端使用 61
6 2 數(shù)據(jù)定義語言 64
6 2 1 表管理 64
6 2 2 分區(qū)管理 67
6 3 數(shù)據(jù)操縱語言 69
6 3 1 Put 操作 69
6 3 2 Get 操作 72
6 3 3 Scan 操作 74
6 3 4 Delete 操作 77
6 3 5 Increment 操作 79
6 4 過濾器 82
6 4 1 過濾器簡介 82
6 4 2 過濾器使用 83
6 5 事務(wù) 101
6 5 1 原子性 102
6 5 2 隔離性 102
第 7 章 架構(gòu)實現(xiàn) 109
7 1 存儲 109
7 1 1 B+樹 109
7 1 2 LSM 樹 110
7 1 3 預(yù)寫入日志 111
7 2 數(shù)據(jù)寫入與讀取 114
7 2 1 定位分區(qū)服務(wù)器 114
7 2 2 數(shù)據(jù)修改流程 116
7 2 3 數(shù)據(jù)查詢流程 119
7 3 合并策略 121
7 3 1 StripeCompaction 策略 121
7 3 2 DateTieredCompaction 策略 121
7 3 3 RatioBasedCompaction 策略 121
7 3 4 ExploringCompaction 策略 123
7 3 5 FIFOCompaction 策略 124
第 8 章 協(xié)處理器 125
8 1 觀察者類型協(xié)處理器 125
8 2 端點類型協(xié)處理器 129
8 3 加載/卸載協(xié)處理器 133
8 3 1 靜態(tài)加載/卸載 133
8 3 2 動態(tài)加載/卸載 134
第 9 章 HBase 性能調(diào)優(yōu) 141
9 1 客戶端調(diào)優(yōu) 141
9 1 1 設(shè)置客戶端寫入緩存 141
9 1 2 設(shè)置合適的掃描緩存 143
9 1 3 跳過 WAL 寫入 143
9 1 4 設(shè)置重試次數(shù)與間隔 143
9 1 5 選用合適的過濾器 144
9 2 服務(wù)器端調(diào)優(yōu) 144
9 2 1 創(chuàng)建表語句的優(yōu)化 145
9 2 2 禁止分區(qū)自動拆分與合并 148
9 2 3 開啟機(jī)柜感知 150
9 2 4 開啟短路本地讀 152
9 2 5 開啟補(bǔ)償重試讀 152
9 2 6 JVM 內(nèi)存調(diào)優(yōu) 153
第 10 章 集群間數(shù)據(jù)復(fù)制 161
10 1 復(fù)制 162
10 1 1 集群拓?fù)? 163
10 1 2 配置集群復(fù)制 163
10 1 3 驗證復(fù)制數(shù)據(jù) 166
10 1 4 復(fù)制詳解 168
10 2 快照 173
10 2 1 配置快照 173
10 2 2 管理快照 173
10 3 導(dǎo)出和導(dǎo)入 175
10 3 1 導(dǎo)出 176
10 3 2 導(dǎo)入 177
10 4 復(fù)制表 178
第 11 章 監(jiān)控 181
11 1 Hadoop 監(jiān)控 181
11 1 1 Web 監(jiān)控頁面 182
11 1 2 JMX 監(jiān)控接口 184
11 2 HBase 監(jiān)控 187
11 2 1 Web 監(jiān)控頁面 187
11 2 2 JMX 監(jiān)控接口 189
11 2 3 客戶端 API 監(jiān)控 191
附錄 A 常見問題 193
A 1 垃圾回收超時導(dǎo)致分區(qū)服務(wù)器宕機(jī) 193
A 2 Scanner 租期過期 196
A 3 分區(qū)遷移異常 197
A 4 Windows 運行 HBase 程序缺少winutil exe 200
A 5 誤刪表數(shù)據(jù) 201
A 6 RIT 時間過長導(dǎo)致不同分區(qū)行鍵數(shù)據(jù)有重疊 203