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

1.14 MB 18 页 0 评论
语言 格式 评分
英语
.pdf
3
摘要
文档讨论了HBASE-21879的改进措施,该措施通过将HFile的块直接读取到ByteBuffer中,以减少Java垃圾回收对RPC延迟的影响。在写入路径中,数据包从客户端接收后分配到offheap内存,直到成功写入WAL日志和Memstore。在读取路径中,优先从BucketCache读取,缓存未命中时读取HFile块。性能测试显示,HBASE-21879减少了GC压力,但在某些情况下可能对吞吐量产生更大影响。通过调整配置参数如hbase.bucketcache.size和hbase.server.allocator.buffer.size,可以优化offheap内存管理,减少堆分配,提升性能。
AI总结
### 总结 #### 背景 为了减少Java垃圾回收(GC)对HBase 2.x中p99/p999 RPC延迟的影响,引入了off-heap读写路径。堆外内存(offheap)不会被JVM垃圾回收,因此需要显式释放内存。写路径中,客户端请求包被分配到堆外内存并保留,直到数据成功写入WAL日志和Memstore。读路径优先从BucketCache读取,若缓存未命中则从HFile读取。整个过程尽量避免堆内存分配,以降低GC压力。 #### 性能测试结果 1. **禁用BlockCache(hfile.block.cache.size=0)**: - **GC压力**:Young GC计数减少13.6%,Eden使用量减少81.7%。 - **吞吐量**:Get QPS提升17.2%,平均延迟降低14.7%,P99延迟降低10.7%。 - **堆分配**:通过堆分配火焰图发现,块的堆分配减少了95%,大部分堆分配来自DFSClient。 2. **启用BlockCache(缓存命中率~65%)**: - **GC压力**:Young GC计数减少20%,Eden使用量减少33%。 - **吞吐量**:Get QPS略降3%,平均延迟增加3.4%,P99延迟增加2%。 - 原因:缓存命中率提升导致堆外内存分配减少,GC压力差异缩小。 3. **启用BlockCache(缓存命中率~100%)**: - **GC压力**:Young GC计数变化不大,Eden使用量无变化。 - **吞吐量**:Get QPS提升2.1%,P99延迟降低37.8%,P999延迟降低25%。 - 发现:HBASE-21879对吞吐量和延迟影响不大,且在P99/P999延迟上有优势。 #### 结论 - HBASE-21879显著降低了GC压力,尤其在禁用缓存的情况下效果最明显,100% Get场景的吞吐量提升17%,Eden使用量减少81%。 - 在缓存命中率较高的情况下,GC压力差异缩小,但延迟表现仍优于未优化场景。 #### 最佳实践 1. **ByteBuffAllocator配置**: -buffer.size=130KB,适用于禁用BlockCache的情况。 -globals配置:hbase.server.allocator.max.buffer.count=16131,hbase.server.allocator.buffer.size=133120。 2. **优化方向**: - 使用SingleByteBuff替代MultiByteBuff以简化数据结构和加快校验。 - 优化DFSClient的堆分配。 - 统一BucketEntry和HFileBlock的引用计数。 #### 相关工作 - HDFS优化问题:HDFS-3246, HDFS-14535, HDFS-14541, HDFS-14483。 总结来看,HBASE-21879通过优化读路径的内存分配策略,显著降低了GC压力并提升了系统性能,尤其是在堆内存分配和延迟表现上表现优异。
P1
P2
P3
P4
P5
P6
P7
下载文档到本地,方便使用
- 可预览页数已用完,剩余 11 页请下载阅读 -
文档评分
请文明评论,理性发言.