`
chenchao051
  • 浏览: 137798 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

简单HBase笔记

阅读更多

 一、Client-side write buffer 客户端缓存请求

描述:可以缓存客户端的请求,以此来减少RPC的次数,但是缓存只是被存在一个ArrayList中,所以多线程访问时不安全的。
可以使用getWriteBuffer()方法来取得客户端缓存中的数据。 默认关闭。
二、Scan的Caching
描述: next( )方法请求一行就要使用一次RPC,即使你指定了next(int nbRows)也一样,很明显这在性能上会存在一些问题,特别是每次都是请求一个很小的cell的时候。这时候,我们可以考虑在每次RPC的时候,取出更多的row, 这就被称为 scanner caching。这个cache可以在作用在两个层面上:table与scan. 在table层面上, 所有对这table的scan都会激活cache,你也可以只针对某一个scan进行cache。
但是你需要权衡RPC次数与内存使用,假设你把缓存数设置的太高了,就会适得其反。因为每次RPC需要取更多的数据,然后从服务器传到客户端,假设超过了客户端设置的heap最大值,那么就会发生OOM异常。不仅如此,就算没有发生OOM异常,但是由于传输时间长或者客户端处理的时候过长,没有在lease规定的时间内完成,那么就会抛出ScannerTimeoutException。

三、Scan的Batching
描述:之前说到了scan的caching,是针对行级别的,但是有时候row特别长,那cache起来就很有压力了,这个时候,hbase给我们的另一种解决方案是batching, batching是针对列的。它可以控制每次请求next()要取出多少列。当然,就如之前所说,不要batch太多列,会有OOM与ScannerTimeoutException的风险。
显然2和3可以结合起来使用,在减少RPC次数的情况下,也能控制row和column的获取。

四、RowLock
描述:mutate操作,put delete checkAndPut,等等,都会排它的执行,即它们肯定是串行操作的,不会发生并行操作。而get操作是不加锁的,而是使用multiversion concurrency control style来处理,说白了就是读已经存在的最新的记录。
http://en.wikipedia.org/wiki/Multiversion_concurrency_control, 但是要注意一点,假如lease过期了,那么你回来再想使用这个rowlock的时候,就会抛出UnKnownRowLockException。

五、Preflushing on Stop
描述:当某台rs接收到被关闭的要求时,注意这里,是正常的被通知下线,而不是由于什么自身的异常导致的下线,rs会检查所有的memstore,任何大小超过hbase.hregion.preclose.seize配置的memstore会被强制刷新到硬盘(这里指hdfs). 在这个阶段的时候,rs包括region还是正常可以服务的,等到preflush完后,memstore里面剩下的基本上都不多了,只要再执行一次flush就完成了,注意,到后面的那次flush的时候,rs已经不再接收请求了。preflush与其说是提高了region的可用性,不如说是使得rs的关闭更加平滑。

六、region split
描述: 这个是最最基础的问题了,当然,hbase大多数的bug就是出现在这里。当region中的storefile的总大小大于hbase.hregion.max.filesize设置的大小时,这个region就要split,在这个region一分为二的过程中,进行的非常快,因为hbase只需要为两个新的region(在hbase中也成为daughters)建两个reference file而已.当两个daughters准备上可以上线的时候,后台线程会把父region的store files写到两个子region中,同时也会替换掉reference file。最后master会看看到底需不需要做load balance。

七、Compactions
描述当region内的storefile的数量大于hbase.hstore.compaction.min(hbase.hstore.compactionThreshold)时,就会触发minor compaction,而每次minor ompaction所包含的最大文件数由hbase.hstore.compaction.max指定。并且,hbase.hstore.compaction.min.size(通常设置成和memstore flush的值一样)与hbase.hstore.compaction.max.size(通常设置为Long.MAX_VALUE)会进一步限制参与compact的文件。与minor compaction不同, major compact会把所有的store里面的文件合成一个大文件,compact的类型在检查阶段就已经确定好了。以下几种情况会触发检查compaction,1、shell中的compact或者major_compact请求 2、memstore flush后 3、请求相应的api中的majorCompact( ) 4、后台线程轮询,时间由hbase.server.thread.wakefrequency和hbase.server.thread.wakefrequency,multiplier相乘所得。假如你在shell中请求了major_compact,或者请求了api中的majorCompact,都会强制执行majorCompact,在其它情况下,rs会依据hbase.hregion.majorcompaction来判断是否应该执行major。

split和compact相对来说复杂点,我找时间再把源码拉出来分析下吧。说到源码,我把源码中compact线程中比较重要的一段注释提一下:
合并storefiles,这可能需要一点时间。在这段时间时间中store还是能够正常提供服务的,它还是能从storefile中取值,也能从memstore中写入新的storefile。直到新的合并完的storefile已经全部写到硬盘了,原来的storefiles才会删掉。





分享到:
评论

相关推荐

    Hadoop之HBase学习笔记

    【文件名称列表】"pom.xml"通常是一个Maven项目的配置文件,这表明博主可能提供了使用Maven构建HBase项目的示例,或者在学习过程中创建了一个简单的HBase客户端来演示数据操作。"src"目录通常包含项目的所有源代码,...

    Hbase与zookeeper笔记备份.rar

    本篇笔记主要围绕这两个技术进行深入探讨,结合尚硅谷的视频教程资源,旨在帮助读者全面理解并掌握这两者的核心知识。 一、Zookeeper:分布式协调服务 Zookeeper是由Apache开发的一款开源分布式协调服务,它提供了...

    java大数据作业_3HBase

    设计一个笔记表,表中要求有笔记的属性和笔记的内容 在设计这样的表时,可以考虑使用以下列族和列名: - **列族**: `meta` 和 `content` - **列**: `meta:title`、`meta:author`、`content:text` 示例代码如下: ...

    zookeeper+hbase快速入门全套笔记

    它提供了简单的接口来实现复杂的一致性问题,如命名服务、配置管理、分布式锁、组服务等。 **应用场景包括但不限于:** - **配置管理**:应用程序可以通过Zookeeper存储和检索配置信息,当配置发生变化时能够通知到...

    读写HBase数据.pdf

    Spark提供了连接HBase的库,使得读写HBase变得简单。在pyspark中,可以通过以下步骤实现: 1. 引入HBase的jar包到Spark的类路径中,这样Spark可以理解HBase的数据格式。 2. 创建SparkSession,并配置连接HBase的...

    读书笔记:简单推荐系统应用做了用户行为跟踪masterslave架构基于hbase数据存储,依赖下面多个模块.zip

    读书笔记:简单推荐系统应用做了用户行为跟踪masterslave架构基于hbase数据存储,依赖下面多个模块

    狂神说-Redis完整版笔记

    【Redis完整版笔记】深入解析Redis作为NoSQL数据库的关键特性 Redis是一款高性能的Key-Value内存数据库,广泛应用于缓存、消息队列、计数器等多个场景。在NoSQL数据库的大潮中,Redis以其出色的速度和灵活性...

    Redis学习笔记.pdf

    键值存储数据库使用哈希表存储数据,具有键和指向数据的指针,其优势在于简单和易于部署,但当需要对值的子集进行查询或更新时,效率可能较低。代表产品包括Redis、SSDB、Voldemort、Oracle BDB等。 列存储数据库将...

    BigData文档笔记

    【描述】"bigdata"简单明了地概述了主题,表明这些笔记将涵盖与大数据相关的各种技术和概念。大数据不仅仅是指数据的体积大,它还包含数据的多样性、速度和价值。这些特性使得传统数据处理方法难以应对,因此需要新...

    Hadoop学习笔记.pdf

    ZooKeeper的设计目标是将这些复杂的分布式协调服务封装起来,向应用层提供简单易用的接口。 Hadoop的生态系统还包括了其他一些组件,例如: - Chukwa:它是基于Hadoop的开源数据收集系统,用于监控大型分布式系统...

    大数据学习笔记.pdf

    目录 第一部分 Spark学习 ....................................................................................................................... 6 第1章 Spark介绍 .........................................

    hadoop笔记

    这种模型使得并行处理变得简单,能够充分利用集群中的计算资源。 4. YARN(Yet Another Resource Negotiator):YARN是Hadoop的资源管理系统,负责调度和管理集群中的计算资源。它将原本在Hadoop 1.x中与MapReduce...

    redis学习笔记Redis.md

    ### Redis 学习笔记知识点概览 #### 一、Redis 概述与应用场景 ##### 1.1 NoSQL 数据库简介 - **定义**: NoSQL(Not Only SQL)泛指非关系型数据库,它们通常不使用传统的表格关系来存储数据。 - **特性**: NoSQL ...

    redis笔记.docx

    2. **列存储数据库**:此类数据库将相同类型的列数据存储在一起,例如 Cassandra、HBase 和 Riak 等。它们的优势在于查找速度快,易于进行分布式扩展,适合用于分布式文件系统等场景。 3. **文档型数据库**:此类...

    hadoop 笔记

    除了核心的HDFS和MapReduce之外,Hadoop还有许多其他的子项目,如HBase、Pig、Hive等,这些项目进一步扩展了Hadoop的功能。 **8.4 官方集群搭建参考** 官方文档提供了详细的集群搭建指南,包括配置文件的详细说明...

    ClickHouse笔记.pdf

    ClickHouse是完全的列式存储,与HBase这类近似列式存储的数据库有明显不同。 ### 安装前准备 #### CentOS系统设置 1. **取消打开文件数限制**: 为避免在高并发情况下出现文件描述符不足的问题,需要调整系统...

    2021年-Hive大数据仓库-期末考试知识点重点-笔记整理.pdf

    Hive的优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计。延迟较高,使得Hive适合用于离线的数据分析和清洗工作。 Hive与Hbase的区别: * Hive是基于Hadoop的大数据仓库工具,可以将结构化的数据...

    zookeeper完整学习笔记

    它提供了一种简单、高可用且容错的机制,使得开发者可以专注于核心业务逻辑,而不是复杂的分布式问题。Zookeeper 最初由 Yahoo! 开发,现在已经成为 Hadoop、HBase 和其他分布式框架的标准化组件,比如Apache HBase ...

    redis6笔记,写的相当详细的笔记

    ### Redis 6 笔记详解 #### 一、NoSQL 数据库概述 ##### 技术发展的阶段划分 在介绍Redis之前,我们先了解技术发展的几个关键阶段及其解决的主要问题: 1. **解决功能性问题**:这包括了如Java、JSP、RDBMS等技术...

Global site tag (gtag.js) - Google Analytics