`
hongs_yang
  • 浏览: 60592 次
  • 性别: 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

    在IT行业中,尤其是在大数据处理领域,HBase是一个广泛使用的分布式、高性能、列式存储的NoSQL数据库。HBase是建立在Hadoop文件系统(HDFS)之上,为处理大规模数据提供了一个高效的数据存储解决方案。而Spring Data...

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

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

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

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

    hbase用于查询客户端工具

    HBase是一种分布式、基于列族的NoSQL数据库,它在大数据领域中扮演着重要的角色,尤其是在需要实时查询大规模数据集时。HBase以其高吞吐量、低延迟和水平扩展能力而闻名,常用于存储非结构化和半结构化数据。在HBase...

    hbase配置内置的zookeeper

    ### HBase 配置内置 ZooKeeper 的详细步骤与解析 #### 一、配置背景与目的 在 HBase 的部署环境中,ZooKeeper 起着非常重要的作用,它主要用于协调集群中的各个节点,并且管理 HBase 的元数据。通常情况下,HBase ...

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

    ### HBase权威指南知识点概述 #### 一、引言与背景 - **大数据时代的来临**:随着互联网技术的发展,人类社会产生了前所未为的数据量。这些数据不仅数量巨大,而且种类繁多,传统的数据库系统难以应对这样的挑战。 ...

    HBase开启审计日志

    ### HBase开启审计日志详解 #### 一、概述 HBase是一款分布式列式存储系统,基于Google的Bigtable论文实现。它具有高可靠性、高性能、面向列、可伸缩的特点,非常适合处理海量数据。在大数据领域,HBase被广泛用于...

    基于springboot集成hbase过程解析

    "基于SpringBoot集成HBase过程解析" SpringBoot集成HBase是当前大数据处理和存储解决方案中的一种常见组合。HBase是基于Hadoop的分布式、可扩展的NoSQL数据库,能够存储大量的结构化和非结构化数据。SpringBoot则...

    hbase-2.4.17-bin 安装包

    HBase是Apache Hadoop生态系统中的一个分布式、版本化、列族式存储系统,设计用于处理大规模数据集。这个“hbase-2.4.17-bin”安装包提供了HBase的最新稳定版本2.4.17,适用于大数据处理和分析场景。下面将详细介绍...

    hbase安装与使用

    ### HBase 安装与使用知识点详解 #### 概述 HBase 是一款构建于 Hadoop 之上的分布式、可扩展的大规模数据存储系统。它提供了类似 Google BigTable 的功能特性,非常适合处理海量数据和高并发读写需求的应用场景。...

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

    《HBase资源合集》包含了四本重量级的书籍,分别是《HBase企业应用开发实战》、《HBase权威指南》、《HBase实战》以及《HBase应用架构》。这些书籍深入浅出地探讨了HBase在大数据环境中的应用与开发,是学习和掌握...

    hbase安装包

    HBase,全称为Hadoop Distributed File System上的基础结构(HBase on Hadoop Distributed File System),是一种分布式的、面向列的开源数据库,它构建在Apache Hadoop文件系统(HDFS)之上,提供高可靠性、高性能...

    hbase的hbase-1.2.0-cdh5.14.2.tar.gz资源包

    3. **配置HBase**:编辑`conf/hbase-site.xml`,设置HBase的主配置,如`hbase.rootdir`(HDFS中的HBase目录)和`hbase.zookeeper.quorum`(Zookeeper集群地址)。 4. **启动与停止**:使用`start-hbase.sh`启动HBase...

    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数据可视化系统

    《HBase数据可视化系统构建详解》 在大数据领域,HBase作为一款分布式列式数据库,因其高并发、低延迟和大规模存储的特点,被广泛应用在实时数据处理和分析中。然而,对于非技术人员来说,直接操作HBase命令行进行...

    CDH-Hbase的安装1

    在本文中,我们将深入探讨HBase的安装过程及其在CDH环境中的集成。HBase是Apache Hadoop生态系统中的一个核心组件,它是一个分布式、版本化的、支持列族的NoSQL数据库,特别适合处理大规模的数据存储。CDH(Cloudera...

    HBase学习利器:HBase实战

    ### HBase学习利器:HBase实战 #### 一、HBase简介与背景 HBase是Apache Hadoop生态系统中的一个分布式、可扩展的列族数据库,它提供了类似Bigtable的能力,能够在大规模数据集上进行随机读写操作。HBase是基于...

    scala API 操作hbase表

    在本文中,我们将深入探讨如何使用Scala API操作HBase数据库。HBase是一个分布式、面向列的NoSQL数据库,它构建于Hadoop之上,提供实时访问大量数据的能力。Scala是一种强大的函数式编程语言,与Java虚拟机(JVM)...

    Hbase的安装过程及基本操作

    在本文中,我们将详细讲解Hbase的安装过程以及基本操作,特别针对在Linux环境下使用清华大学镜像进行下载的情况。Hbase是一个分布式的、面向列的数据库,常用于大数据存储,是Apache Hadoop生态系统的一部分。以下是...

Global site tag (gtag.js) - Google Analytics