HBASE-21879 Read HFile ’s Block into ByteBuffer directly.
1.14 MB
18 页
0 下载
172 浏览
0 评论
0 收藏
所属分类:
数据库 / Apache HBase
| 语言 | 格式 | 评分 |
|---|---|---|
英语 | .pdf | 3 |
| 摘要 | ||
文档详细介绍了HBase中的HBASE-21879改进,该改进旨在将HFile的块直接读取到Netty的ByteBuffer中,以减少堆外内存的使用和垃圾回收压力。通过重构API以接受ByteBuffer或byte[],优化了Checksum验证和块解压方法,并引入了ByteBuffAllocator进行内存管理。测试结果显示,该改进显著降低了Young GC压力,提高了吞吐量,并减少了延迟。文档还提供了不同缓存命中率下的性能对比和最佳实践配置。 | ||
| AI总结 | ||
### 文档总结
#### 核心目标
HBASE-21879 的核心目标是将 HFile 的块直接读取到 Netty 的 `ByteBuffer`,避免内存复制,减少堆内存分配和垃圾回收(GC)压力,从而提升性能。
#### 关键优化措施
1. **引入 Netty 的 ByteBuffer**
- 将 HFile 的块读取到 Netty 的 `ByteBuffer`,替代传统的 `byte[]`,减少堆内存的使用。
- 使用 Netty 的 `PooledByteBufAllocator` 进行内存池化管理。
2. **重构下游 API**
- 将依赖 `byte[]` 的 API 抽象为支持 `ByteBuffer` 或 `ByteBuffer` 接口。
- 支持 `ByteBuffer` 的pread 方法(HDFS-3246 进行中),减少堆内存分配。
3. **优化校验和验证与解压**
- 对于单个 `ByteBuffer` 的校验和验证直接使用 Hadoop 接口;对于多个 `ByteBuffer` 的情况,通过小堆缓冲区逐步验证。
- 块解压方法优化为直接在 `ByteBuffer` 上操作,减少堆与直接内存之间的复制。
#### 性能提升
- **GC 压力显著降低**:Young GC 次数减少 20%,Eden 区内存占用减少 33%。
- **吞吐量与延迟**:在高负载场景下,Get QPS 提升 17%,P99 和 P999 延迟显著降低。
- **堆内存分配优化**:通过直接读取和内存池化,减少了 95% 的堆内存分配。
#### 测试与验证
1. **测试场景**:
- **Case 1**:禁用 BlockCache,验证直接读取 HDFS 的性能。
- **Case 2**:启用 BlockCache(缓存命中率 ~65%),验证缓存与直接读取的综合性能。
- **Case 3**:启用 BlockCache(缓存命中率 ~100%),验证小数据集的性能。
2. **测试结果**:
- 在高缓存命中率场景下,性能提升显著,Young GC 压力大幅降低。
- 在低缓存命中率场景下,直接读取 HDFS 的性能优势更加明显。
#### 结论
- HBASE-21879 成功减少了堆内存的分配和 GC 压力,显著提升了性能。
- 优化效果在高负载和高缓存命中率场景下尤为明显。
- 未来优化方向包括进一步减少 DFSClient 的堆内存分配和优化 `ByteBuffer` 的使用。
#### 配置建议
- 配置 `ByteBuffAllocator` 参数以匹配实际负载需求。
- 合理设置缓存大小和内存分配策略,以最大化性能提升。
通过以上优化,HBase 在高负载场景下的性能和稳定性得到了显著提升。 | ||
P1
P2
P3
P4
P5
P6
P7
下载文档到本地,方便使用
- 可预览页数已用完,剩余
11 页请下载阅读 -
文档评分













