`
san_yun
  • 浏览: 2652147 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

HBase Memstore理解笔记

 
阅读更多

HBase BlockCache理解笔记

 

HBase read path. Data is reconciled from the BlockCache, the MemStore, and the HFiles to give the client an up-to-date view of the row(s) it asked for.

 

 

HBase Memstore理解笔记

 

当RegionServer收到了写请求,它会把请求指到相应的Region。每个Region都存储一定数目的行。每行数据可被分成多个列族(column family)。每个column family的数据被存储在HStore中,而HStore由Memstore和若干个HFile组成。Memstore是在RegionServer的内存中,而HFile被写入HDFS。当写请求被处理时,数据首先被写入Memstore,然后,当某个门限满足了之后,Memstore的数据被flush到HFile里。

 

使用Memstore方案的主要原因就是HBase存储数据必须要以row排序,这样才能高效的查询。而DFS的设计是针对连续读写的,不允许修改文件,所以HBase就不能高效的把收到的数据写入磁盘,因为收到的写请求一般都是无序的,直接写入磁盘会导致磁盘的数据也无序,就无法高效查询了。为了解决这个问题,HBase把收到的写请求换存在内存中(也就是Memstore),在flush之前将缓存的数据排序,然后将数据快速的批量顺序写入HDFS中。注意,实际中的HFile可并不只是简单的若干行有序数据。

 

除了解决了无序问题,Memstore还有以下好处:

 

1.它可以作为内存中的cache,保存了最近新添加/修改的数据。当新写入数据的访问频率比旧数据多很多的情况下,这是一个很有用的特性。

2.把写请求缓存起来批处理是一个很经典的优化手段,例如,假如对于每个cell,只需要保存一个版本,那么当memstore中存在同个cell的多个更新的话,就只需要把最新的修改写入HFile即可。

 

需要注意的一点是:每个column family的memstore的每次flush都会创建一个HFile。

读请求就简单多了:HBase首先检查memstore里是否有要读的数据,然后去HFile中查找,最后把merge后的结果返回给client。

 

Frequent Memstore Flushes

如果写请求的量非常大,大到HBase都来不及做flush,那么HBase可能就会block写操作了,为了避免这种情况,提高flush的频率是一种显而易见的方法。但是,这会影响读操作的性能,还会给集群带来额外的压力。

每当Memstore flush的时候,每个CF就会创建一个HFile。频繁的flush就会创建过多的HFile。这样HBase在处理读操作的时候就会查找很多HFile,导致读性能无法容忍。为了避免打开过多的HFile以至于影响读请求的性能,HBase采取了合并HFile的解决方案。HBase会周期性的将多个小HFile合并为一个大的HFile。很明显,Memstore flush创建的小文件越多,给系统带来的负载也就越大。更严重的是,合并HFile的操作和其他服务是同步进行的,当HBase觉得合并HFile的速度不够快,它也会block写操作,这是谁都不希望看到的。

Hint:监控Compaction Queue的size。一旦它持续增长,就需要采取措施以防出现问题。

 

Multiple Column Families & Memstore Flush

所有CF的memstore都是同时flush的。这意味着,每次flush都会创建N个HFile,一个CF一个。因此,如果各个CF的数据量不平衡,就会导致创建过多的HFile,因为只要有一个CF的memstore达到了门限,所有的CF都要做flush动作。这样也会导致过多的HFile,影响集群的性能。

Hint: 很多情况下,只有一个CF是最佳设计。

 

HLog (WAL) Size & Memstore Flush

HLog(WAL)包含了RegionServer上所有已经写入Memstore但是还没有flush到HFile的写操作。因为Memstore中的数据并没有持久化,我们需要WAL,当RegionServer挂了的时候,可以根据WAL恢复数据。

当HLog,也就是HBase的WAL,逐渐的变得很大了,复现操作就会消耗很多的时间。因此HBase会设置一个WAL大小的门限,当达到这个门限的时候,就会命令Memstore做flush,这样可以减小WAL。所以当HLog过大了,也会触发Memstore的flush。那么就要注意了,到底是Memstore的门限优先级高还是HLog的优先级高呢?答案是前者,正确的配置应该是让Memstore先达到容量门限,否则的话,每次因为WAL大小超限而进行flush,不就无法充分使用Memstore的资源了么。况且,WAL超标有可能会导致很多个Region进行memstore flush,这并不是触发memstore flush的最佳方式。

 

Hint: 保证hbase.regionserver.hlog.blocksize * hbase.regionserver.maxlogs略大于hbase.regionserver.global.memstore.lowerLimit * HBASE_HEAPSIZE.

 

Compression & Memstore Flush

压缩存储在HFile里的数据是一个好习惯。不仅可以节约空间,也可以显著的减少磁盘和网络的IO。当Memstore flush的时候,数据会被压缩。压缩不能拖慢flush太多,否则会遇到很多本文提到的问题,比如由于Memstore过大而block写操作。

Hint: 在选择压缩类型的时候,应该更看重压缩速度而不是压缩比率,SNAPPY是一个好选择。

 

分享到:
评论

相关推荐

    大数据Hbase 的学习笔记

    自己在大数据培训班学习整理的笔记,比较详细,适合新手学习,我感觉还是挺有帮助的,希望可以帮助到你

    HBase完整学习笔记

    【HBase完整学习笔记】 HBase是一款开源的分布式NoSQL数据库,主要设计用于处理海量结构化数据,尤其适合大数据分析场景。它与传统的关系型数据库(如Oracle、MySQL)不同,采用列式存储方式,这使得HBase在压缩...

    IT十八掌_HBase阶段学习笔记(课堂笔记与原理图解)

    IT十八掌大数据第三期配套课堂笔记! 1 、HBase的特点 2 、HBase访问接口 3 、HBase存储结构与格式 4 、HBase设计 5 、关键算法和流程 6 、HBase安装 7、HBase的Shell操作 8、HBase客户端

    hbase 相关的笔记

    **HBase:分布式大数据存储系统** HBase,全称为Apache HBase,是构建在Hadoop文件系统(HDFS)之上的...这份"Hbase相关的笔记"很可能包含了关于HBase的基础概念、架构、操作和优化等内容,是深入学习HBase的好资源。

    HBase学习笔记(个人整理)

    【HBase基本概念】 HBase,全称为Hadoop Database,是一种分布式的、可扩展的、版本化的、面向列的Java实现的开源键值数据库。它建立在Apache Hadoop...理解和熟练运用HBase,对于大数据开发者和架构师来说至关重要。

    Hbase与zookeeper笔记备份.rar

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

    Hadoop与HBase自学笔记

    ### Hadoop与HBase自学笔记知识点总结 #### 一、Hadoop与HBase简介 - **Hadoop**:是一款能够对大量数据进行分布式处理的软件框架。它通过提供高可靠性和高扩展性的分布式计算能力,使得用户能够在廉价的硬件设备...

    hadoop,hbase,zookeeper安装笔记

    hadoop,hbase,zookeeper安装笔记hadoop,hbase,zookeeper安装笔记hadoop,hbase,zookeeper安装笔记

    Hbase课程资料笔记,介绍、原理、入门实操.zip

    **HBase简介** HBase,全称为Hadoop Database,是一个基于Google Bigtable设计思想的开源分布式数据库,主要在Apache Hadoop生态系统中运行。HBase提供了一个高可靠性、高性能、可伸缩的列式存储系统,适合处理大...

    HBase自学笔记

    ### HBase自学笔记知识点梳理 #### 一、HBase简介 **HBase** 是一个建立在 **Hadoop** 之上的非关系型数据库系统。...通过这些知识点的学习,可以帮助我们更好地理解和掌握HBase的核心技术和应用场景。

    docker之hbase集群学习笔记

    docker版hbase集群构建,从docker安装开始,再到docker中下载并运行hadoop镜像,之后下载并配置hbase。最后对整个流程做总结,遇到的问题,以及一些docker基础知识和hbase教程。

    Hbase源码笔记资料.zip

    hive编译,jars,HBaseScanner构建.pptx,HBase之RegionServer命令启动流程.pptx,扩展.docx,尚硅谷大数据技术之HBase.xmind,尚硅谷大数据技术之HBase.pdf等等 很全。

    Hadoop之HBase学习笔记

    【标题】"Hadoop之HBase学习笔记"主要聚焦于Hadoop生态中的分布式数据库HBase。HBase是一个基于Google Bigtable理念设计的开源NoSQL数据库,它运行在Hadoop之上,提供高性能、高可靠性以及可水平扩展的数据存储能力...

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

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

    尚硅谷大数据技术之 Hbase1

    【尚硅谷大数据技术之 Hbase1】主要涵盖了HBase的基础概念、核心组件和架构,以及安装过程。HBase是一个基于列式存储的分布式...通过理解这些基础知识,开发者能够更好地掌握如何利用HBase处理大数据场景下的复杂需求。

    HbaseTemplate 操作hbase

    首先,我们需要理解Spring Data Hadoop提供的HbaseTemplate类。这是一个封装了HBase操作的模板类,简化了Java开发人员与HBase交互的复杂性。通过HbaseTemplate,我们可以执行常见的CRUD(创建、读取、更新和删除)...

    Hbase笔记 —— 利用JavaAPI的方式操作Hbase数据库(往hbase的表中批量插入数据).pdf

    在本文档中,我们将深入探讨如何使用Java API与HBase数据库进行交互,特别是关于如何创建表、修改表结构以及批量插入数据。...理解这些基本操作对于高效地使用HBase至关重要,特别是在大数据处理和分析的场景下。

Global site tag (gtag.js) - Google Analytics