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