hbase memstorelab
关于MemStore的补充
在通过HStore.add向store中加入�一个kv时,首先把数据写入到memstore中。这一点没有什么说明;
publiclongadd(finalKeyValue
kv) {
lock.readLock().lock();
try{
returnthis.memstore.add(kv);
}finally{
lock.readLock().unlock();
}
}
以上代码中调用memstore.add方法,
longadd(finalKeyValue
kv) {
KeyValue toAdd =maybeCloneWithAllocator(kv);
returninternalAdd(toAdd);
}
在上面的调用中,首先是通过maybeCloneWithAllocator去申请kv的内存。
privateKeyValue maybeCloneWithAllocator(KeyValue
kv) {
检查MemStoreLAB是否存在,假设不存在,表示没有配置MemStoreLAB
此配置通过hbase.hregion.memstore.mslab.enabled完毕,默认值为true.
通过hbase.hregion.memstore.mslab.chunksize配置chunksize大小,默认值为2048*1024(2m),
个人觉得,这块须要依据业务上的KV大小,去配置此大小,不然会导致空间的浪费
通过hbase.hregion.memstore.mslab.max.allocation配置单个KV的最大分配大小,默觉得256*1024(256k),
假设单个KV的大小超过了指定的大小,直接在堆内存上生成。
MemStoreLAB(mslab)主要是为了解决memstoreflush的内存碎片问题,而导致的javagc。
hbase通过mslab每次向内存分配一个chunksize大小的块,全部的kv过来时,向此chunk中加入�,
chunk不够时再又一次申请一个新的chunk块。每次flush时,直接把占用的chunk块进行flush,
从而降低minorgc的发生频率。
if(allocator==
null){
returnkv;
}
intlen = kv.getLength();
检查kv是否超过了配置的单个大小,假设超过,不做处理,否则从一个chunk中得到一个allocation或者新生成一个chunk
Allocation alloc =allocator.allocateBytes(len);
if(alloc ==
null){
//The allocation was too large, allocator decided
//not to do anything with it.
returnkv;
}
assertalloc.getData() !=
null;
System.arraycopy(kv.getBuffer(),kv.getOffset(), alloc.getData(), alloc.getOffset(), len);
KeyValue newKv =
newKeyValue(alloc.getData(), alloc.getOffset(), len);
newKv.setMvccVersion(kv.getMvccVersion());
returnnewKv;
}
在memstore中通过internalAdd-->addToKVSet把一个kv加入�到memstore听kvset容器中,
此容器每一次的add操作都会进行排序操作,排序的比較器通过KeyValue.KVComparator来实现。
kvset是一个KeyValueSkipListSet的实例,此实例里面有一个ConcurrentSkipListMap的map容器。
每一次的add操作,都会把kv当成map的key与value一起插入。
hbase memstorelab的更多相关文章
- HBase笔记4(调优)
Master/Region Server调优 JVM调优 默认的RegionServer内存是1G,而Memstore默认占40%,即400M,实在是太小了,可以通过HBASE_HEAPSIZE参数修 ...
- hbase源码系列(十三)缓存机制MemStore与Block Cache
这一章讲hbase的缓存机制,这里面涉及的内容也是比较多,呵呵,我理解中的缓存是保存在内存中的特定的便于检索的数据结构就是缓存. 之前在讲put的时候,put是被添加到Store里面,这个Store是 ...
- Hbase 学习(五) 调优
1.垃圾回收器调优 当我们往hbase写入数据,它首先写入memstore当中,当menstore的值大于hbase.hregion.memstore.flush.size参数中设置的值后,就会写入硬 ...
- Hbase Region Server整体架构
Region Server的整体架构 本文主要介绍Region的整体架构,后续再慢慢介绍region的各部分具体实现和源码 RegionServer逻辑架构图 RegionServer职责 1. ...
- 13 hbase源码系列(十三)缓存机制MemStore与Block Cache
这一章讲hbase的缓存机制,这里面涉及的内容也是比较多,呵呵,我理解中的缓存是保存在内存中的特定的便于检索的数据结构就是缓存. 之前在讲put的时候,put是被添加到Store里面,这个Store是 ...
- Mapreduce的文件和hbase共同输入
Mapreduce的文件和hbase共同输入 package duogemap; import java.io.IOException; import org.apache.hadoop.co ...
- Redis/HBase/Tair比较
KV系统对比表 对比维度 Redis Redis Cluster Medis Hbase Tair 访问模式 支持Value大小 理论上不超过1GB(建议不超过1MB) 理论上可配置(默认配置1 ...
- Hbase的伪分布式安装
Hbase安装模式介绍 单机模式 1> Hbase不使用HDFS,仅使用本地文件系统 2> ZooKeeper与Hbase运行在同一个JVM中 分布式模式– 伪分布式模式1> 所有进 ...
- Spark踩坑记——数据库(Hbase+Mysql)
[TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...
随机推荐
- 自己动手为PHP7添加新的语法特性
好文章! nikic介绍了如何向PHP添加新的语法特性,原文写的非常精彩,具体是添加in语法功能,使最终实现: <?php $words = ['hello', 'world', 'foo', ...
- BZOJ 1042: [HAOI2008]硬币购物( 背包dp + 容斥原理 )
先按完全背包做一次dp, dp(x)表示x元的东西有多少种方案, 然后再容斥一下. ---------------------------------------------------------- ...
- currentStyle和getComputedStyle的兼容写法
今天学习javascript的时候,教程中介绍了一种简单实现jQuery 中css()方法的写法 <!DOCTYPE html> <html lang="en"& ...
- web.xml的配置问题
[转]http://perfy315.iteye.com/blog/2009258 首先 classpath是指 WEB-INF文件夹下的classes目录 ,指的就是java文件编译之后的path. ...
- 无线网络wifi (WPA/WPA2)密码破解方法
无线网络password破解WPA/WPA2教程 本教程用于探索无线路由安全漏洞,禁止用于非法用途,违者法律必究(与我无关) 在动手破解WPA/WPA2前,应该先了解一下基础知识,本文适合新手阅读 首 ...
- C# 课堂总结2-数据类型及转换方式
一.输入输出语句 Console.ReadLine(); 会等待直到用户按下回车,一次读入一行Console.ReadKey(); 则是等待用户按下任意键,一次读入一个字符. 二.数据类型 主要掌握: ...
- Maven和Eclipse联合开发(转)
最近公司突然把以前的架构推到从来,这个还真需要勇气,不过也是的,基础不好,再好的房子也站不稳.公司采用Maven作为项目管理,WebService项目框架采用SDHI.(Spring+Dubbo+He ...
- IE浏览器下web调试工具之--IE WebDeveloper介绍
做Web项目的架构设计.开发.测试,免不了要熟悉Web页面调试工具,以此来获知哪些浏览器支持Web页面的显示,哪些浏览器下显示有问题. 目前市面上比较火爆的浏览器内核提供商,有微软的IE.mozill ...
- 17.1 Replication Configuration 复制:
17.1 Replication Configuration 复制: 17.1.1 How to Set Up Replication 17.1.2 Replication Formats 17.1. ...
- VMware Player 使用错误集锦
1.执行VMware Player 弹出"开机时出错:内部错误"的提示.虚拟机执行不了,例如以下图: 解决的方法: 以管理员身份执行. 可能如今登录windows的 ...