`
hongs_yang
  • 浏览: 59740 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Hbase MemStoreLAB

阅读更多

关于MemStore的补充

 

在通过HStore.addstore中添加一个kv时,首先把数据写入到memstore中。这一点没有什么说明;

 

publiclong add(final KeyValue kv) {

 

lock.readLock().lock();

 

try {

 

returnthis.memstore.add(kv);

 

} finally {

 

lock.readLock().unlock();

 

}

 

}

 

 

 

以上代码中调用memstore.add方法,

 

long add(final KeyValue kv) {

 

KeyValue toAdd = maybeCloneWithAllocator(kv);

 

return internalAdd(toAdd);

 

}

 

在上面的调用中,首先是通过maybeCloneWithAllocator去申请kv的内存。

 

private KeyValue 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)主要是为了解决memstore flush的内存碎片问题,而导致的java gc

 

hbase通过mslab每次向内存分配一个chunksize大小的块,所有的kv过来时,向此chunk中添加,

 

chunk不够时再重新申请一个新的chunk块。每次flush时,直接把占用的chunk块进行flush,

 

从而减少minor gc的发生频率。

 

if (allocator == null) {

 

return kv;

 

}

 

 

 

int len = 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.

 

return kv;

 

}

 

assert alloc.getData() != null;

 

System.arraycopy(kv.getBuffer(), kv.getOffset(), alloc.getData(), alloc.getOffset(), len);

 

KeyValue newKv = new KeyValue(alloc.getData(), alloc.getOffset(), len);

 

newKv.setMvccVersion(kv.getMvccVersion());

 

return newKv;

 

}

 

 

 

memstore中通过internalAdd-->addToKVSet把一个kv添加到memstorekvset容器中,

 

此容器每一次的add操作都会进行排序操作,排序的比较器通过KeyValue.KVComparator来实现。

 

kvset是一个KeyValueSkipListSet的实例,此实例里面有一个ConcurrentSkipListMapmap容器。

 

每一次的add操作,都会把kv当成mapkeyvalue一起插入。

 

0
0
分享到:
评论

相关推荐

    HbaseTemplate 操作hbase

    java 利用 sping-data-hadoop HbaseTemplate 操作hbase find get execute 等方法 可以直接运行

    pinpoint的hbase初始化脚本hbase-create.hbase

    搭建pinpoint需要的hbase初始化脚本hbase-create.hbase

    HBase(hbase-2.4.9-bin.tar.gz)

    HBase(hbase-2.4.9-bin.tar.gz)是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System...

    HBase数据库设计.doc

    1. HBase有哪些基本的特征? 1 HBase特征: 1 2. HBase相对于关系数据库能解决的问题是什么? 2 HBase与关系数据的区别? 2 HBase与RDBMS的区别? 2 3. HBase的数据模式是怎么样的?即有哪些元素?如何存储?等 3 1...

    hbase-sdk是基于hbase-client和hbase-thrift的原生API封装的一款轻量级的HBase ORM框架

    hbase-sdk是基于hbase-client和hbase-thrift的原生API封装的一款轻量级的HBase ORM框架。 针对HBase各版本API(1.x~2.x)间的差异,在其上剥离出了一层统一的抽象。并提供了以类SQL的方式来读写HBase表中的数据。对...

    hbase-2.3.5单机一键部署工具

    注意:zookeeper3.4.13和hbase2.3.5都是采用docker-compose方式部署 原文链接:https://blog.csdn.net/m0_37814112/article/details/120915194 说明:使用外部zookeeper3.4.13之hbase2.3.5一键部署工具,支持部署、...

    java大数据作业_3HBase

    1. 请用java集合的代码描述HBase的表结构 2. 请简述HBase中数据写入最后导致Region分裂的全过程 3. 如果设计一个笔记的表,表中要求有笔记的属性和笔记的内容,怎么做 4. HBase部署时如何指定多个zookeeper 5. HBase...

    实验三:熟悉常用的HBase操作

    A.3实验三:熟悉常用的HBase操作 本实验对应第5章的内容。 A.3.1 实验目的 (1)理解HBase在Hadoop体系结构中的角色。(2)熟练使用HBase操作常用的 Shell命令。(3)熟悉HBase操作常用的 Java API。 A.3.2 实验平台 (1...

    Hbase资源整理集合

    HBase 官方文档.pdf HBase的操作和编程.pdf HBase Cpressr优化与实验 郭磊涛.pdf null【HBase】Data Migratin frm Gri t Clu Cmputing - Natural Sienes .pdf 分布式数据库HBase快照的设计与实现.pdf 【HBase】...

    HBase海量数据存储实战视频教程

    从HBase的集群搭建、HBaseshell操作、java编程、架构、原理、涉及的数据结构,并且结合陌陌海量消息存储案例来讲解实战HBase 课程亮点 1,知识体系完备,从小白到大神各阶段读者均能学有所获。 2,生动形象,化繁为...

    大数据开发之Hbase基本使用及存储设计实战教程(视频+笔记+代码)

    │ Day15[Hbase 基本使用及存储设计].pdf │ ├─02_视频 │ Day1501_Hbase的介绍及其发展.mp4 │ Day1502_Hbase中的特殊概念.mp4 │ Day1503_Hbase与MYSQL的存储比较.mp4 │ Day1504_Hbase部署环境准备.mp4 │ Day...

    Hbase权威指南(HBase: The Definitive Guide)

    如果你正在寻找一种具备可伸缩性的存储解决方案来适应几乎没有穷尽的数据的话,这本书将可以向你表明apache hbase完全能够满足你的需求。作为google bigtable架构的开源实现,hbase能够支持数以十亿计的记录数和数以...

    HBase开启审计日志

    HBase开启审计日志

    HBase的图形化管理工具/Hbase的GUI工具

    由于网上下的不支持最新的hadoop,hbase 版本自己稍微修改了下,支持最新版本HBase的图形化管理工具,目前修改改为hadoop-2.7.1版本,hbase-1.1.2版本,依赖可以自己切换,源代码已经包括再里边了,如想修改直接修改...

    HBase学习利器:HBase实战

    HBase开发实战,HBase学习利器:HBase实战

    hbase-shell批量命令执行脚本的方法

    批量执行hbase shell 命令 #!/bin/bash source /etc/profile exec $HBASE_HOME/bin/hbase shell <<EOF truncate 'tracker_total_apk_fact_zyt' major_compact('t_abc') disable 't_abc' drop 't_abc' create...

    hbase 资源合集 hbase 企业应用开发实战 权威指南 hbase 实战 hbase 应用架构

    hbase 资源合集 hbase 企业应用开发实战 权威指南 hbase 实战 hbase 应用架构

    Hbase2.2.4.rar

    Hbase2.2.4安装包,HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供...

    HBase3.0参考指南

    HBase3.0参考指南 This is the official reference guide for the HBase version it ships with. Herein you will find either the definitive documentation on an HBase topic as of its standing when the ...

Global site tag (gtag.js) - Google Analytics