為什么要寫這本書
Apache HBase是基于Apache Hadoop構(gòu)建的一個高可用、高性能、多版本的分布式NoSQL數(shù)據(jù)庫,是Google BigTable的開源實現(xiàn),通過在廉價服務(wù)器上搭建起大規(guī)模結(jié)構(gòu)化存儲集群,提供海量數(shù)據(jù)高性能的隨機讀寫能力。
HBase項目自2006年提交第一行代碼以來,直到如今,經(jīng)歷了13年的蓬勃發(fā)展,F(xiàn)在已經(jīng)有大量企業(yè)采用HBase來存儲和分析自身飛速增長的業(yè)務(wù)數(shù)據(jù)。從全球范圍來看,國內(nèi)HBase的關(guān)注度更是高居榜首,這得益于國內(nèi)互聯(lián)網(wǎng)、移動互聯(lián)網(wǎng)、物聯(lián)網(wǎng)等方向龐大的數(shù)據(jù)體量。諸多國內(nèi)大型科技公司,如阿里巴巴、小米、騰訊、網(wǎng)易、華為、滴滴、快手、中國移動等等都已經(jīng)把HBase作為極重要的基礎(chǔ)依賴,很多公司對HBase社區(qū)也有長期的投入。截止到目前為止,HBase全球社區(qū)已經(jīng)擁有了74位HBase Committer,而國內(nèi)就有20位左右的Committer,占了近1/3的比例。近一兩年,HBase在國內(nèi)更是得到了長足的發(fā)展,2018年中國HBase技術(shù)社區(qū)成立,一年時間里社區(qū)在多個城市相繼組織了9次線下技術(shù)沙龍活動,為HBase更好地在國內(nèi)各公司茁壯成長做出了卓越的貢獻。
然而,和社區(qū)用戶多次交流后發(fā)現(xiàn),他們都希望我們能推薦一本HBase的書。當(dāng)前市面上有關(guān)HBase的書籍大部分都集中于如何使用HBase,例如HBase集群部署、客戶端API以及協(xié)處理器等。誠然,這對快速掌握和使用HBase非常有好處,但是許多HBase使用者并不滿足于此,他們更希望能了解和掌握其內(nèi)部運行原理。因此,當(dāng)機械工業(yè)出版社的編輯吳怡老師,聯(lián)系到我們是否有想法為HBase寫一本書時,我們毫不猶豫地就答應(yīng)了。
本書會從設(shè)計的角度對HBase的整個體系架構(gòu)和各核心組件進行系統(tǒng)的分析和講解。與此同時,還會介紹常用的性能調(diào)優(yōu)策略以及問題診斷的方法和技巧,幫助讀者更好的在實際生產(chǎn)環(huán)境實踐。另外,本書最后章節(jié)會集中介紹HBase 2.x版本的核心特性,例如Procedure v2、In Memory Compactions以及MOB等。
讀者對象
本書不是一本教你如何部署HBase集群、使用HBase客戶端API進行讀寫操作的書,本書面向那些使用HBase作為數(shù)據(jù)庫后端存儲的應(yīng)用程序開發(fā)者、有一定經(jīng)驗的運維人員和對HBase內(nèi)核設(shè)計感興趣的技術(shù)極客。
如果你想深入了解HBase的每個組件是如何工作的,如果你想更好地運維或者調(diào)優(yōu)你的HBase集群,如果你想了解HBase 2.x版本的核心特性,就請閱讀本書。想要更好的學(xué)習(xí)本書,需要具備如下條件:
了解HBase的基本操作
了解C、Java等高級語言
對一些基本算法有所了解,因為本書會從源代碼層面分析HBase的工作機制,如果你能了解這些算法,會對你的理解非常有幫助
如何閱讀本書
本書有16個章節(jié),分為6個主要部分:
第一部分:HBase基礎(chǔ)部分,包含1、2章節(jié)。其中第1章主要介紹HBase系統(tǒng)的發(fā)展歷史、數(shù)據(jù)模型以及體系結(jié)構(gòu),第1章節(jié)主要介紹HBase系統(tǒng)中常用的數(shù)據(jù)結(jié)構(gòu)以及基礎(chǔ)算法。
第二部分:HBase系統(tǒng)相關(guān)組件,包含3、4、5三章。其中第3章重點介紹HBase所依賴的核心組件,包括ZooKeeper、HDFS等,第4章介紹HBase客戶端組件實現(xiàn),第5章介紹RegionServer內(nèi)部組件的實現(xiàn)。
第三部分:HBase核心工作原理,包含6、7、8、9、10、11六章。其中第6章介紹HBase讀寫流程,第7章介紹HBase Compaction的實現(xiàn)原理,第8章介紹HBase中Region的遷移、合并以及分裂等操作是如何實現(xiàn)的,第9章介紹RegionServer宕機后如何通過HLog進行數(shù)據(jù)恢復(fù),第10章介紹HBase不同集群之間的復(fù)制是如何實現(xiàn)的,第11章介紹HBase如何通過Snapshot機制完成數(shù)據(jù)的備份以及恢復(fù)。
第四部分:HBase運維調(diào)優(yōu)實踐,包含12、13、14三章。其中第12章介紹HBase集群常用的運維管理操作,包括集群如何有效監(jiān)控,基準(zhǔn)性能如何測試等,第13章集中介紹HBase集群的常用調(diào)優(yōu)技巧,第14章重點分析幾個HBase實際運維案例,通過案例分析介紹HBase集群問題定位處理的方法和技巧。
第五部分:HBase 2.x核心特性,包含第15章,重點介紹HBase最新2.x版本的核心功能特性。
第六部分:HBase高級話題,包含第16章,這個章節(jié)重點介紹社區(qū)中比較熱門的二級索引話題以及如何進行HBase內(nèi)核的測試以及開發(fā)。
本書的六個部分都可以單獨成冊,讀者完全可以從書中任何一個部分開始閱讀。當(dāng)然,如果你想更加系統(tǒng)的學(xué)習(xí)HBase,建議你從前往后逐章閱讀。
致謝
在編寫本書的過程中,我們非常感謝給予了我們?nèi)绱硕鄮椭凸膭畹呐笥选⒓胰艘约巴聜。首先感謝HBase官方社區(qū)的開發(fā)者,是他們極其卓越的工作讓我們有機會寫這樣一本書。另外,還要感謝許許多多中國HBase技術(shù)社區(qū)的小伙伴,感謝他們提供的對于HBase系統(tǒng)實際問題以及解決方案的深入見解。同時感謝我們的家人,沒有他們的鼓勵和支持,本書不可能完成。最后,一份特別的感謝要送給本書策劃編輯吳怡,感謝她在全書撰寫過程中所給予的詳細(xì)指點及其有用的建議。
前言
第1章HBase概述
1.1HBase 前生今世
1.2HBase數(shù)據(jù)模型
1.2.1邏輯視圖
1.2.2多維稀疏排序Map
1.2.3物理視圖
1.2.4行式存儲、列式存儲、列簇式存儲
1.3HBase體系結(jié)構(gòu)
1.4 HBase系統(tǒng)特性
第2章基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)與算法
2.1 跳躍表
2.2 LSM樹
2.3 布隆過濾器
2.4 設(shè)計KV存儲引擎Minibase
2.5拓展閱讀
第3章HBase依賴服務(wù)
3.1ZooKeeper簡介
3.2HDFS簡介
3.4拓展閱讀
第4章HBase客戶端
4.1 HBase客戶端實現(xiàn)
4.1.1 定位Meta表
4.1.2 Scan的復(fù)雜之處
4.2 HBase客戶端避坑指南
第5章RegionServer的核心模塊
5.1 RegionServer內(nèi)部結(jié)構(gòu)
5.2 HLog
5.2.1 HLog文件結(jié)構(gòu)
5.2.2 HLog文件存儲
5.2.3 HLog生命周期
5.3 MemStore
5.3.1 MemStore內(nèi)部結(jié)構(gòu)
5.3.2 MemStore的GC問題
5.3.3 MSLAB內(nèi)存管理方式
5.3.4 MemStore Chunk Pool
5.3.5 MSLAB相關(guān)配置
5.4 HFile
5.4.1 HFile邏輯結(jié)構(gòu)
5.4.2 HFile物理結(jié)構(gòu)
5.4.3 HFile的基礎(chǔ)Block
5.4.4 HFile中布隆過濾器相關(guān)的Block
5.4.5 HFile中索引相關(guān)的Block
5.4.6HFile文件查看工具
5.5 BlockCache
5.5.1.LRUBlockCache
5.5.2.SlabCache
5.5.3.BucketCache
5.5.4.不同BlockCache方案性能對比
5.6拓展閱讀
第6章HBase讀寫流程
6.1 HBase寫入流程
6.1.1寫入流程的三個階段
6.1.2 Region寫入流程
6.1.3 MemStore Flush
6.2 BulkLoad功能
6.2.1 BulkLoad核心流程
6.2.2 BulkLoad基礎(chǔ)案例
6.3 HBase讀取流程
6.3.1 Client-Server讀取交互邏輯
6.3.2 Server端Scan框架體系
6.3.3過濾淘汰不符合查詢條件的HFile
6.3.4HFile中讀取待查找Key
思考與練習(xí)
6.4深入理解Coprocessor
6.4.1 Coprocessor分類
6.4.2 Coprocessor加載
第7章 Compaction實現(xiàn)
7.1 Compaction基本工作原理
7.1.1 Compaction基本流程
7.1.2 Compaction觸發(fā)時機
7.1.3 待合并HFile集合選擇策略
7.1.4 挑選合適的線程池
7.1.5 HFile文件合并執(zhí)行
思考與練習(xí)
7.1.6Compaction相關(guān)注意事項
7.2 Compaction高級策略
第8章負(fù)載均衡實現(xiàn)
8.1 Region遷移
8.2 Region合并
8.3 Region分裂
8.4 HBase的負(fù)載均衡應(yīng)用
8.5拓展閱讀
第9章宕機恢復(fù)原理
9.1 HBase常見故障分析
9.2 HBase故障恢復(fù)基本原理
9.3 HBase故障恢復(fù)流程
第10章復(fù)制
10.1 復(fù)制場景及原理
10.1.1管理流程的設(shè)計和問題
10.1.2復(fù)制原理
10.2 串行復(fù)制
10.2.1非串行復(fù)制導(dǎo)致的問題
10.2.2串行復(fù)制的設(shè)計思路
思考與練習(xí)
10.3 同步復(fù)制
10.3.1設(shè)計思路
10.3.2同步復(fù)制和異步復(fù)制對比
10.4拓展閱讀
第11章備份與恢復(fù)
11.1 Snapshot概述
11.2 Snapshot創(chuàng)建
11.2.1 Snapshot技術(shù)基礎(chǔ)原理
11.2.2 在線Snapshot的分布式架構(gòu)兩階段提交
11.2.3 Snapshot核心實現(xiàn)
11.3 Snapshot恢復(fù)
11.4 Snapshot進階
11.5拓展閱讀
第12章HBase運維
12.1 HBase系統(tǒng)監(jiān)控
12.1.1 HBase監(jiān)控指標(biāo)輸出方式
12.1.2 HBase核心監(jiān)控指標(biāo)
12.1.3 HBase表級監(jiān)控
12.2 HBase集群基準(zhǔn)性能測試
12.3 HBase YCSB
12.4 HBase業(yè)務(wù)隔離
12.5 HBase Shell
12.6 HBase HBCK
12.8 HBase核心參數(shù)配置
12.8 HBase系統(tǒng)相關(guān)日志
12.9 HBase表設(shè)計
第13章HBase系統(tǒng)調(diào)優(yōu)
13.1 HBase GC調(diào)優(yōu)
13.2 G1 GC性能調(diào)優(yōu)
13.2.1 CMS和G1 GC的本質(zhì)區(qū)別
13.2.2 測試環(huán)境
13.2.3 G1 GC核心參數(shù)
13.2.4 初始參數(shù)效果
13.3 HBase操作系統(tǒng)調(diào)優(yōu)
13.4 HBase-HDFS調(diào)優(yōu)策略
13.5 HBase讀取性能優(yōu)化
13.5.1HBase服務(wù)器端優(yōu)化
13.5.2 HBase客戶端優(yōu)化
13.5.3 HBase列簇設(shè)計優(yōu)化
13.6 HBase寫入性能調(diào)優(yōu)
13.6.1 HBase服務(wù)器端優(yōu)化
13.6.2 HBase客戶端優(yōu)化
第14章HBase運維案例分析
14.1 RegionServer宕機
案例一:長時間GC導(dǎo)致RegionServer宕機
案例二:系統(tǒng)嚴(yán)重Bug導(dǎo)致RegionServer宕機
14.2 HBase寫入異常
案例一:MemStore占用內(nèi)存大小超過設(shè)定閾值導(dǎo)致寫入阻塞
案例二:RegionServer Active Handler資源被耗盡導(dǎo)致寫入阻塞
案例三:HDFS縮容導(dǎo)致部分寫入異常
14.3總結(jié): HBase運維時問題分析思路
第15章 HBase2.x核心技術(shù)
15.1 Procedure功能
15.2 In Memory Compaction
15.3 MOB對象存儲
15.4 Offheap讀路徑和Offheap寫路徑
15.5異步化設(shè)計
第16章高級話題
16.1 二級索引
16.2 單行事務(wù)和跨行事務(wù)
16.3 HBase開發(fā)與測試
16.3.1 HBase社區(qū)運作機制
16.3.2項目測試
16.3.3拓展閱讀
附錄A HBase熱門問題集錦