搜索

pdf文档 HBASE-21879 Read HFile ’s Block into ByteBuffer directly.

1.14 MB 18 页 0 下载 172 浏览 0 评论 0 收藏
语言 格式 评分
英语
.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 页请下载阅读 -
文档评分
请文明评论,理性发言.