為什么要寫這本書
Apache HBase是基于Apache Hadoop構(gòu)建的一個(gè)高可用、高性能、多版本的分布式NoSQL數(shù)據(jù)庫(kù),是Google BigTable的開源實(shí)現(xiàn),通過在廉價(jià)服務(wù)器上搭建起大規(guī)模結(jié)構(gòu)化存儲(chǔ)集群,提供海量數(shù)據(jù)高性能的隨機(jī)讀寫能力。
HBase項(xiàng)目自2006年提交第一行代碼以來,直到如今,經(jīng)歷了13年的蓬勃發(fā)展,F(xiàn)在已經(jīng)有大量企業(yè)采用HBase來存儲(chǔ)和分析自身飛速增長(zhǎng)的業(yè)務(wù)數(shù)據(jù)。從全球范圍來看,國(guó)內(nèi)HBase的關(guān)注度更是高居榜首,這得益于國(guó)內(nèi)互聯(lián)網(wǎng)、移動(dòng)互聯(lián)網(wǎng)、物聯(lián)網(wǎng)等方向龐大的數(shù)據(jù)體量。諸多國(guó)內(nèi)大型科技公司,如阿里巴巴、小米、騰訊、網(wǎng)易、華為、滴滴、快手、中國(guó)移動(dòng)等等都已經(jīng)把HBase作為極重要的基礎(chǔ)依賴,很多公司對(duì)HBase社區(qū)也有長(zhǎng)期的投入。截止到目前為止,HBase全球社區(qū)已經(jīng)擁有了74位HBase Committer,而國(guó)內(nèi)就有20位左右的Committer,占了近1/3的比例。近一兩年,HBase在國(guó)內(nèi)更是得到了長(zhǎng)足的發(fā)展,2018年中國(guó)HBase技術(shù)社區(qū)成立,一年時(shí)間里社區(qū)在多個(gè)城市相繼組織了9次線下技術(shù)沙龍活動(dòng),為HBase更好地在國(guó)內(nèi)各公司茁壯成長(zhǎng)做出了卓越的貢獻(xiàn)。
然而,和社區(qū)用戶多次交流后發(fā)現(xiàn),他們都希望我們能推薦一本HBase的書。當(dāng)前市面上有關(guān)HBase的書籍大部分都集中于如何使用HBase,例如HBase集群部署、客戶端API以及協(xié)處理器等。誠(chéng)然,這對(duì)快速掌握和使用HBase非常有好處,但是許多HBase使用者并不滿足于此,他們更希望能了解和掌握其內(nèi)部運(yùn)行原理。因此,當(dāng)機(jī)械工業(yè)出版社的編輯吳怡老師,聯(lián)系到我們是否有想法為HBase寫一本書時(shí),我們毫不猶豫地就答應(yīng)了。
本書會(huì)從設(shè)計(jì)的角度對(duì)HBase的整個(gè)體系架構(gòu)和各核心組件進(jìn)行系統(tǒng)的分析和講解。與此同時(shí),還會(huì)介紹常用的性能調(diào)優(yōu)策略以及問題診斷的方法和技巧,幫助讀者更好的在實(shí)際生產(chǎn)環(huán)境實(shí)踐。另外,本書最后章節(jié)會(huì)集中介紹HBase 2.x版本的核心特性,例如Procedure v2、In Memory Compactions以及MOB等。
讀者對(duì)象
本書不是一本教你如何部署HBase集群、使用HBase客戶端API進(jìn)行讀寫操作的書,本書面向那些使用HBase作為數(shù)據(jù)庫(kù)后端存儲(chǔ)的應(yīng)用程序開發(fā)者、有一定經(jīng)驗(yàn)的運(yùn)維人員和對(duì)HBase內(nèi)核設(shè)計(jì)感興趣的技術(shù)極客。
如果你想深入了解HBase的每個(gè)組件是如何工作的,如果你想更好地運(yùn)維或者調(diào)優(yōu)你的HBase集群,如果你想了解HBase 2.x版本的核心特性,就請(qǐng)閱讀本書。想要更好的學(xué)習(xí)本書,需要具備如下條件:
了解HBase的基本操作
了解C、Java等高級(jí)語(yǔ)言
對(duì)一些基本算法有所了解,因?yàn)楸緯鴷?huì)從源代碼層面分析HBase的工作機(jī)制,如果你能了解這些算法,會(huì)對(duì)你的理解非常有幫助
如何閱讀本書
本書有16個(gè)章節(jié),分為6個(gè)主要部分:
第一部分: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章重點(diǎn)介紹HBase所依賴的核心組件,包括ZooKeeper、HDFS等,第4章介紹HBase客戶端組件實(shí)現(xiàn),第5章介紹RegionServer內(nèi)部組件的實(shí)現(xiàn)。
第三部分:HBase核心工作原理,包含6、7、8、9、10、11六章。其中第6章介紹HBase讀寫流程,第7章介紹HBase Compaction的實(shí)現(xiàn)原理,第8章介紹HBase中Region的遷移、合并以及分裂等操作是如何實(shí)現(xiàn)的,第9章介紹RegionServer宕機(jī)后如何通過HLog進(jìn)行數(shù)據(jù)恢復(fù),第10章介紹HBase不同集群之間的復(fù)制是如何實(shí)現(xiàn)的,第11章介紹HBase如何通過Snapshot機(jī)制完成數(shù)據(jù)的備份以及恢復(fù)。
第四部分:HBase運(yùn)維調(diào)優(yōu)實(shí)踐,包含12、13、14三章。其中第12章介紹HBase集群常用的運(yùn)維管理操作,包括集群如何有效監(jiān)控,基準(zhǔn)性能如何測(cè)試等,第13章集中介紹HBase集群的常用調(diào)優(yōu)技巧,第14章重點(diǎn)分析幾個(gè)HBase實(shí)際運(yùn)維案例,通過案例分析介紹HBase集群?jiǎn)栴}定位處理的方法和技巧。
第五部分:HBase 2.x核心特性,包含第15章,重點(diǎn)介紹HBase最新2.x版本的核心功能特性。
第六部分:HBase高級(jí)話題,包含第16章,這個(gè)章節(jié)重點(diǎn)介紹社區(qū)中比較熱門的二級(jí)索引話題以及如何進(jìn)行HBase內(nèi)核的測(cè)試以及開發(fā)。
本書的六個(gè)部分都可以單獨(dú)成冊(cè),讀者完全可以從書中任何一個(gè)部分開始閱讀。當(dāng)然,如果你想更加系統(tǒng)的學(xué)習(xí)HBase,建議你從前往后逐章閱讀。
致謝
在編寫本書的過程中,我們非常感謝給予了我們?nèi)绱硕鄮椭凸膭?lì)的朋友、家人以及同事們。首先感謝HBase官方社區(qū)的開發(fā)者,是他們極其卓越的工作讓我們有機(jī)會(huì)寫這樣一本書。另外,還要感謝許許多多中國(guó)HBase技術(shù)社區(qū)的小伙伴,感謝他們提供的對(duì)于HBase系統(tǒng)實(shí)際問題以及解決方案的深入見解。同時(shí)感謝我們的家人,沒有他們的鼓勵(lì)和支持,本書不可能完成。最后,一份特別的感謝要送給本書策劃編輯吳怡,感謝她在全書撰寫過程中所給予的詳細(xì)指點(diǎn)及其有用的建議。
前言
第1章HBase概述
1.1HBase 前生今世
1.2HBase數(shù)據(jù)模型
1.2.1邏輯視圖
1.2.2多維稀疏排序Map
1.2.3物理視圖
1.2.4行式存儲(chǔ)、列式存儲(chǔ)、列簇式存儲(chǔ)
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è)計(jì)KV存儲(chǔ)引擎Minibase
2.5拓展閱讀
第3章HBase依賴服務(wù)
3.1ZooKeeper簡(jiǎn)介
3.2HDFS簡(jiǎn)介
3.4拓展閱讀
第4章HBase客戶端
4.1 HBase客戶端實(shí)現(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文件存儲(chǔ)
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方案性能對(duì)比
5.6拓展閱讀
第6章HBase讀寫流程
6.1 HBase寫入流程
6.1.1寫入流程的三個(gè)階段
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實(shí)現(xiàn)
7.1 Compaction基本工作原理
7.1.1 Compaction基本流程
7.1.2 Compaction觸發(fā)時(shí)機(jī)
7.1.3 待合并HFile集合選擇策略
7.1.4 挑選合適的線程池
7.1.5 HFile文件合并執(zhí)行
思考與練習(xí)
7.1.6Compaction相關(guān)注意事項(xiàng)
7.2 Compaction高級(jí)策略
第8章負(fù)載均衡實(shí)現(xiàn)
8.1 Region遷移
8.2 Region合并
8.3 Region分裂
8.4 HBase的負(fù)載均衡應(yīng)用
8.5拓展閱讀
第9章宕機(jī)恢復(fù)原理
9.1 HBase常見故障分析
9.2 HBase故障恢復(fù)基本原理
9.3 HBase故障恢復(fù)流程
第10章復(fù)制
10.1 復(fù)制場(chǎng)景及原理
10.1.1管理流程的設(shè)計(jì)和問題
10.1.2復(fù)制原理
10.2 串行復(fù)制
10.2.1非串行復(fù)制導(dǎo)致的問題
10.2.2串行復(fù)制的設(shè)計(jì)思路
思考與練習(xí)
10.3 同步復(fù)制
10.3.1設(shè)計(jì)思路
10.3.2同步復(fù)制和異步復(fù)制對(duì)比
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核心實(shí)現(xiàn)
11.3 Snapshot恢復(fù)
11.4 Snapshot進(jìn)階
11.5拓展閱讀
第12章HBase運(yùn)維
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表級(jí)監(jiān)控
12.2 HBase集群基準(zhǔn)性能測(cè)試
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è)計(jì)
第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 測(cè)試環(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è)計(jì)優(yōu)化
13.6 HBase寫入性能調(diào)優(yōu)
13.6.1 HBase服務(wù)器端優(yōu)化
13.6.2 HBase客戶端優(yōu)化
第14章HBase運(yùn)維案例分析
14.1 RegionServer宕機(jī)
案例一:長(zhǎng)時(shí)間GC導(dǎo)致RegionServer宕機(jī)
案例二:系統(tǒng)嚴(yán)重Bug導(dǎo)致RegionServer宕機(jī)
14.2 HBase寫入異常
案例一:MemStore占用內(nèi)存大小超過設(shè)定閾值導(dǎo)致寫入阻塞
案例二:RegionServer Active Handler資源被耗盡導(dǎo)致寫入阻塞
案例三:HDFS縮容導(dǎo)致部分寫入異常
14.3總結(jié): HBase運(yùn)維時(shí)問題分析思路
第15章 HBase2.x核心技術(shù)
15.1 Procedure功能
15.2 In Memory Compaction
15.3 MOB對(duì)象存儲(chǔ)
15.4 Offheap讀路徑和Offheap寫路徑
15.5異步化設(shè)計(jì)
第16章高級(jí)話題
16.1 二級(jí)索引
16.2 單行事務(wù)和跨行事務(wù)
16.3 HBase開發(fā)與測(cè)試
16.3.1 HBase社區(qū)運(yùn)作機(jī)制
16.3.2項(xiàng)目測(cè)試
16.3.3拓展閱讀
附錄A HBase熱門問題集錦