内容
HBase项目自2006年提交第一行代码以来,经历了13年的蓬勃发展。现在已经有大量企业采用HBase来存储和分析飞速增长的业务数据。从全球范围来看,国内HBase的关注度更是高居榜首,这得益于国内互联网、移动互联网、物联网等领域庞大的数据体量。诸多国内大型科技公司,如阿里巴巴、小米、腾讯、网易、华为、滴滴、快手、中国移动等,都已经把HBase作为极重要的基础设施,很多公司对HBase社区也有长期的投入。截至2019年8月,HBase全球社区已经拥有了83位HBase Committer,而国内就有20位左右的Committer,占了近1/4的比例。近一两年,HBase在国内更是得到了长足的发展,2018年中国HBase技术社区成立,一年时间里社区在多个城市相继组织了9次线下技术沙龙活动,为HBase更好地在国内各公司茁壮成长做出了卓越的贡献。
作者
胡争 小米公司HBase工程师,Apache HBase PMC成员,负责Apache HBase项目研发及小米HBase集群维护,对HBase及相关分布式存储系统有很多独到的见解。开源技术爱好者,长期活跃在Apache开源社区,热衷技术分享,博客地址为http://openinx.github.io。
范欣欣 现就职于网易杭州研究院数据科学中心,负责HBase以及分布式时序数据库的内核开发运维工作,对HBase的底层工作原理进行了长时间的探索和深入研究,撰写了大量有关HBase和时序数据库相关的技术文章,深受读者好评。此外,对大数据生态以及数据仓库也有深刻而独到的理解。博客地址为http://hbasefly.com。
目录
前 言
第1章 HBase概述 1
1.1 HBase前生今世 1
1.2 HBase数据模型 4
1.2.1 逻辑视图 4
1.2.2 多维稀疏排序Map 5
1.2.3 物理视图 7
1.2.4 行式存储、列式存储、列簇式存储 7
1.3 HBase体系结构 9
1.4 HBase系统特性 11
第2章 基础数据结构与算法 13
2.1 跳跃表 14
2.2 LSM树 17
2.3 布隆过滤器 21
2.4 设计KV存储引擎MiniBase 25
第3章 HBase依赖服务 34
3.1 ZooKeeper简介 34
3.2 HBase中ZooKeeper核心配置 37
3.3 HDFS简介 39
3.4 HBase在HDFS中的文件布局 44
第4章 HBase客户端 48
4.1 HBase客户端实现 48
4.1.1 定位Meta表 51
4.1.2 Scan的复杂之处 53
4.2 HBase客户端避坑指南 57
第5章 RegionServer的核心模块 63
5.1 RegionServer内部结构 63
5.2 HLog 64
5.2.1 HLog文件结构 64
5.2.2 HLog文件存储 65
5.2.3 HLog生命周期 66
5.3 MemStore 67
5.3.1 MemStore内部结构 68
5.3.2 MemStore的GC问题 68
5.3.3 MSLAB内存管理方式 69
5.3.4 MemStore Chunk Pool 71
5.3.5 MSLAB相关配置 72
5.4 HFile 72
5.4.1 HFile逻辑结构 73
5.4.2 HFile物理结构 74
5.4.3 HFile的基础Block 75
5.4.4 HFile中与布隆过滤器相关的Block 77
5.4.5 HFile中索引相关的Block 79
5.4.6 HFile文件查看工具 81
5.4.7 HFile V3版本 83
5.5 BlockCache 84
5.5.1 LRUBlockCache 84
5.5.2 SlabCache 86
5.5.3 BucketCache 86
第6章 HBase读写流程 93
6.1 HBase写入流程 93
6.1.1 写入流程的三个阶段 93
6.1.2 Region写入流程 96
6.1.3 MemStore Flush 98
6.2 BulkLoad功能 104
6.2.1 BulkLoad核心流程 104
6.2.2 BulkLoad基础案例 105
6.3 HBase读取流程 107
6.3.1 Client-Server读取交互逻辑 108
6.3.2 Server端Scan框架体系 109
6.3.3 过滤淘汰不符合查询条件的HFile 112
6.3.4 从HFile中读取待查找Key 112
6.4 深入理解Coprocessor 115
6.4.1 Coprocessor分类 116
6.4.2 Coprocessor加载 118
第7章 Compaction实现 120
7.1 Compaction基本工作原理 120
7.1.1 Compaction基本流程 122
7.1.2 Compaction触发时机 123
7.1.3 待合并HFile集合选择策略 124
7.1.4 挑选合适的执行线程池 125
7.1.5 HFile文件合并执行 126
7.1.6 Compaction相关注意事项 127
7.2 Compaction高级策略 128
第8章 负载均衡实现 133
8.1 Region迁移 133
8.2 Region合并 137
8.3 Region分裂 137
8.4 HBase的负载均衡应用 144
第9章 宕机恢复原理 147
9.1 HBase常见故障分析 147
9.2 HBase故障恢复基本原理 148
9.3 HBase故障恢复流程 149
9.4 HBase故障时间优化 154
第10章 复制 158
10.1 复制场景及原理 158
10.1.1 管理流程的设计和问题 159
10.1.2 复制原理 161
10.2 串行复制 164
10.2.1 非串行复制导致的问题 164
10.2.2 串行复制的设计思路 166
10.3 同步复制 167
10.3.1 设计思路 168
10.3.2 同步复制和异步复制对比 171
第11章 备份与恢复 173
11.1 Snapshot概述 173
11.2 Snapshot创建 175
11.2.1 Snapshot技术基础原理 175
11.2.2 在线Snapshot的分布式架构—两阶段提交 176
11.2.3 Snapshot核心实现 178
11.3 Snapshot恢复 179
11.4 Snapshot进阶 181
第12章 HBase运维 184
12.1 HBase系统监控 184
12.1.1 HBase监控指标输出方式 184
12.1.2 HBase核心监控指标 185
12.1.3 HBase表级监控 187
12.2 HBase集群基准性能测试 189
12.3 HBase YCSB 192
12.4 HBase业务隔离 194
12.5 HBase HBCK 195
12.6 HBase核心参数配置 198
12.7 HBase表设计 203
12.8 Salted Table 206
第13章 HBase系统调优 209
13.1 HBase GC调优 209
13.2 G1 GC性能调优 211
13.3 HBase操作系统调优 223
13.4 HBase-HDFS调优策略 228
13.5 HBase读取性能优化 230
13.5.1 HBase服务器端优化 231
13.5.2 HBase客户端优化 232
13.5.3 HBase列簇设计优化 233
13.6 HBase写入性能调优 233
13.6.1 HBase服务器端优化 234
13.6.2 HBase客户端优化 235
第14章 HBase运维案例分析 237
14.1 RegionServer宕机 237
14.2 HBase写入异常 241
14.3 HBase运维时问题分析思路 250
第15章 HBase 2.x核心技术 253
15.1 Procedure功能 253
15.2 In Memory Compaction 268
15.3 MOB对象存储 273
15.4 Offheap读路径和Offheap写路径 277
15.5 异步化设计 283
第16章 高级话题 289
16.1 二级索引 289
16.2 单行事务和跨行事务 293
16.3 HBase开发与测试 301
16.3.1 HBase社区运作机制 301
16.3.2 项目测试 303
附录A HBase热门问题集锦 308