本書以精練的語言介紹HBase的基礎(chǔ)知識,讓初學(xué)者能夠快速上手使用HBase,對HBase的核心思想(如數(shù)據(jù)讀取、數(shù)據(jù)備份等)和HBase架構(gòu)(如LSM樹、WAL)有深入的分析,并且讓有經(jīng)驗的HBase開發(fā)人員也能夠循序漸進地深入理解HBase源碼,以便更好地去調(diào)試和解決線上遇到的各種問題。本書更加專注于HBase在線實時系統(tǒng)的調(diào)優(yōu),使HBase集群響應(yīng)延遲更低。本書結(jié)合企業(yè)必備的“用戶行為分析系統(tǒng)”,讓讀者能夠快速上手的同時,也不乏企業(yè)HBase實際應(yīng)用場景,理論不脫離實際,真正做到從入門到精通。
本書適合有一定Java基礎(chǔ)的程序員作為HBase入門教程,HBase運維人員可以將本書作為參考手冊來部署和監(jiān)控HBase,正在將HBase應(yīng)用到在線生產(chǎn)環(huán)境中的軟件開發(fā)人員也可以參考本書來調(diào)優(yōu)HBase在線集群性能。
大數(shù)據(jù)作為人工智能的基石,當前正站在計算機技術(shù)發(fā)展的風口, 而作為Apache頂級項目的HBase的優(yōu)勢是高性能讀寫、彈性伸縮、面向列族存儲,能夠輕松應(yīng)對數(shù)據(jù)存儲的爆發(fā),提供對千萬級QPS低延時需求支持,毫無疑問是企業(yè)搭建大數(shù)據(jù)在線實時應(yīng)用的首選。
Hadoop生態(tài)系統(tǒng)的HDFS和MapReduce分別為大數(shù)據(jù)提供了存儲和分析處理能力,但是對在線實時的數(shù)據(jù)存取則愛莫能助,而HBase彌補了Hadoop的這一缺陷,滿足了在線實時系統(tǒng)低延時的需求。
本書以精煉的語言介紹HBase基礎(chǔ)知識,讓初學(xué)者能夠快速上手使用HBase,對HBase 的核心架構(gòu)思想(如數(shù)據(jù)讀取、數(shù)據(jù)備份等)有深入的了解,并且剖析HBase源碼,介紹HBase 1.X 以及2.0帶來的新特性,讓有經(jīng)驗的HBase開發(fā)人員也能夠循序漸進地深入理解HBase源碼,以便更好地去調(diào)試和解決線上遇到的各種問題。
本書更加專注于HBase在線實時系統(tǒng)的調(diào)優(yōu),同時不乏企業(yè)HBase實際應(yīng)用場景,理論聯(lián)系實際,非常適合大數(shù)據(jù)開發(fā)人員、大數(shù)據(jù)運維人員和Hadoop生態(tài)開發(fā)人員參考和閱讀。
彭旭,2009 年畢業(yè)于武漢大學(xué)軟件工程專業(yè),近十年國內(nèi)頂尖互聯(lián)網(wǎng)企業(yè)工作經(jīng)驗,曾任阿里巴巴天貓技術(shù)部資深軟件工程師、珠海市魅族科技有限公司架構(gòu)師,現(xiàn)在在創(chuàng)業(yè)公司珠海市卓軒科技有限公司任合伙人。精通Java 生態(tài)系統(tǒng)相關(guān)技術(shù),對大數(shù)據(jù)存儲、HBase 系統(tǒng)調(diào)優(yōu)有深刻理解,帶領(lǐng)團隊將云服務(wù)存儲系統(tǒng)從MySQL 遷移到HBase,每年為公司節(jié)省成本數(shù)百萬元。
目錄
第1章 HBase簡介 1
1.1 背景 1
1.2 NoSQL與傳統(tǒng)RDBMS 2
1.3 應(yīng)用場景 3
1.3.1 Facebook用戶交互數(shù)據(jù) 3
1.3.2 淘寶TLog等 3
1.3.3 小米云服務(wù) 4
1.3.4 用戶行為數(shù)據(jù)存儲 4
第2章 HBase安裝 5
2.1 單機部署 5
2.1.1 前置條件 5
2.1.2 下載HBase 6
2.1.3 配置HBase 6
2.1.4 啟動HBase 6
2.1.5 HBase初體驗 7
2.2 分布式部署 8
2.2.1 環(huá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 查看建表 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 刪除數(shù)據(jù) 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 負載均衡開關(guān) 48
4.3.5 分區(qū)手動遷移 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ū)管理 66
6.3 數(shù)據(jù)操縱語言 68
6.3.1 Put 68
6.3.2 Get 70
6.3.3 Scan 72
6.3.4 Delete 74
6.3.5 Increment 76
6.4 過濾器 78
6.4.1 過濾器簡介 78
6.4.2 過濾器使用 81
6.5 事務(wù) 94
6.5.1 原子性 95
6.5.2 隔離性 95
第7章 架構(gòu)實現(xiàn) 101
7.1 存儲 101
7.1.1 B+樹 101
7.1.2 LSM樹 102
7.1.3 WAL 104
7.2 數(shù)據(jù)寫入讀取 107
7.2.1 定位分區(qū)服務(wù)器 107
7.2.2 數(shù)據(jù)修改流程 108
7.2.3 數(shù)據(jù)查詢流程 113
第8章 協(xié)處理器 115
8.1 觀察者類型協(xié)處理器 115
8.2 端點類型協(xié)處理器 132
8.3 裝載/卸載協(xié)處理器 136
8.3.1 靜態(tài)裝載/卸載 136
8.3.2 動態(tài)裝載/卸載 137
第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ù)與間隔 144
9.1.5 選用合適的過濾器 144
9.2 服務(wù)端調(diào)優(yōu) 145
9.2.1 建表DDL優(yōu)化 145
9.2.2 禁止分區(qū)自動拆分與壓縮 150
9.2.3 開啟機柜感知 151
9.2.4 開啟Short Circuit Local Reads 153
9.2.5 開啟補償重試讀 154
9.2.6 JVM內(nèi)存調(diào)優(yōu) 155
第10章 集群間數(shù)據(jù)復(fù)制 163
10.1 復(fù)制 164
10.1.1 集群拓撲 165
10.1.2 配置集群復(fù)制 166
10.1.3 驗證復(fù)制數(shù)據(jù) 169
10.1.4 復(fù)制詳解 171
10.2 快照 175
10.2.1 配置快照 176
10.2.2 管理快照 176
10.3 導(dǎo)出和導(dǎo)入 178
10.3.1 導(dǎo)出 178
10.3.2 導(dǎo)入 180
10.4 復(fù)制表 180
第11章 監(jiān)控 183
11.1 Hadoop監(jiān)控 183
11.1.1 Web監(jiān)控頁面 184
11.1.2 JMX監(jiān)控 185
11.2 HBase監(jiān)控 188
11.2.1 Web監(jiān)控頁面 188
11.2.2 JMX監(jiān)控 190
11.2.3 API監(jiān)控 192
后記 195
附錄 常見問題 197