- 浏览: 2663292 次
- 来自: 杭州
文章分类
- 全部博客 (1188)
- webwork (4)
- 网摘 (18)
- java (103)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (14)
- svn (1)
- webx3 (12)
- mysql (81)
- css (1)
- HTML (6)
- apache (3)
- 测试 (2)
- javascript (1)
- 储存 (1)
- jvm (5)
- code (13)
- 多线程 (12)
- Spring (18)
- webxs (2)
- python (119)
- duitang (0)
- mongo (3)
- nosql (4)
- tomcat (4)
- memcached (20)
- 算法 (28)
- django (28)
- shell (1)
- 工作总结 (5)
- solr (42)
- beansdb (6)
- nginx (3)
- 性能 (30)
- 数据推荐 (1)
- maven (8)
- tonado (1)
- uwsgi (5)
- hessian (4)
- ibatis (3)
- Security (2)
- HTPP (1)
- gevent (6)
- 读书笔记 (1)
- Maxent (2)
- mogo (0)
- thread (3)
- 架构 (5)
- NIO (5)
- 正则 (1)
- lucene (5)
- feed (4)
- redis (17)
- TCP (6)
- test (0)
- python,code (1)
- PIL (3)
- guava (2)
- jython (4)
- httpclient (2)
- cache (3)
- signal (1)
- dubbo (7)
- HTTP (4)
- json (3)
- java socket (1)
- io (2)
- socket (22)
- hash (2)
- Cassandra (1)
- 分布式文件系统 (5)
- Dynamo (2)
- gc (8)
- scp (1)
- rsync (1)
- mecached (0)
- mongoDB (29)
- Thrift (1)
- scribe (2)
- 服务化 (3)
- 问题 (83)
- mat (1)
- classloader (2)
- javaBean (1)
- 文档集合 (27)
- 消息队列 (3)
- nginx,文档集合 (1)
- dboss (12)
- libevent (1)
- 读书 (0)
- 数学 (3)
- 流程 (0)
- HBase (34)
- 自动化测试 (1)
- ubuntu (2)
- 并发 (1)
- sping (1)
- 图形 (1)
- freemarker (1)
- jdbc (3)
- dbcp (0)
- sharding (1)
- 性能测试 (1)
- 设计模式 (2)
- unicode (1)
- OceanBase (3)
- jmagick (1)
- gunicorn (1)
- url (1)
- form (1)
- 安全 (2)
- nlp (8)
- libmemcached (1)
- 规则引擎 (1)
- awk (2)
- 服务器 (1)
- snmpd (1)
- btrace (1)
- 代码 (1)
- cygwin (1)
- mahout (3)
- 电子书 (1)
- 机器学习 (5)
- 数据挖掘 (1)
- nltk (6)
- pool (1)
- log4j (2)
- 总结 (11)
- c++ (1)
- java源代码 (1)
- ocr (1)
- 基础算法 (3)
- SA (1)
- 笔记 (1)
- ml (4)
- zokeeper (0)
- jms (1)
- zookeeper (5)
- zkclient (1)
- hadoop (13)
- mq (2)
- git (9)
- 问题,io (1)
- storm (11)
- zk (1)
- 性能优化 (2)
- example (1)
- tmux (1)
- 环境 (2)
- kyro (1)
- 日志系统 (3)
- hdfs (2)
- python_socket (2)
- date (2)
- elasticsearch (1)
- jetty (1)
- 树 (1)
- 汽车 (1)
- mdrill (1)
- 车 (1)
- 日志 (1)
- web (1)
- 编译原理 (1)
- 信息检索 (1)
- 性能,linux (1)
- spam (1)
- 序列化 (1)
- fabric (2)
- guice (1)
- disruptor (1)
- executor (1)
- logback (2)
- 开源 (1)
- 设计 (1)
- 监控 (3)
- english (1)
- 问题记录 (1)
- Bitmap (1)
- 云计算 (1)
- 问题排查 (1)
- highchat (1)
- mac (3)
- docker (1)
- jdk (1)
- 表达式 (1)
- 网络 (1)
- 时间管理 (1)
- 时间序列 (1)
- OLAP (1)
- Big Table (0)
- sql (1)
- kafka (1)
- md5 (1)
- springboot (1)
- spring security (1)
- Spring Boot (3)
- mybatis (1)
- java8 (1)
- 分布式事务 (1)
- 限流 (1)
- Shadowsocks (0)
- 2018 (1)
- 服务治理 (1)
- 设计原则 (1)
- log (0)
- perftools (1)
最新评论
-
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介 -
107x:
不错,谢谢!
Python机器学习库
介绍BucketCache前,先对HBase的Cache
做个介绍:
一.
HBase在读取时,会以Block为单位进行cache,用来提升读的性能;
二.
Block可以分类为DataBlock(默认大小64K,存储KV)、BloomBlock(默认大小128K,存储BloomFilter数据)、IndexBlock(默认大小128K,索引数据,用来加快Row所在DataBlock的定位)
三.
对于一次随机读,Block的访问顺序为BloomBlock、IndexBlock、DataBlock,如果Region下面的StoreFile数目为2个,那么一次随机读至少访问2次BloomBlock+1次IndexBlock+1次DataBlock
四.
我们通常将BloomBlock和IndexBlock统称为MetaBlock,MetaBlock线上系统中基本命中率都是100%
五.
Block的cache命中率对HBase的读性能影响十分大,所以DataBlockEncoding将KV在内存中进行压缩,对于单行多列和Row相似的场景,可以提高内存使用率,增加读性能
六.
HBase中管理缓存的Block的类为BlockCache,其实现目前主要是下面三种:
6.1 LruBlockCache
,默认的BlockCache实现,也是目前使用的BlockCache,使用一个HashMap维护Block Key到Block的映射,采用严格的LRU算法来淘汰Block,初始化时会指定容量大小,当使用量达到85%的时候开始淘汰block至75%的比例。
优点:直接采用jvm提供的HashMap来管理Cache,简单可依赖;内存用多少占多少,JVM会帮你回收淘汰的BlOCK占用的内存
缺点:
1.一个Block从被缓存至被淘汰,基本就伴随着Heap中的位置从New区晋升到Old区
2.晋升在Old区的Block被淘汰后,最终由CMS进行垃圾回收,随之带来的是Heap碎片
3.因为碎片问题,随之而来的是GC时晋升失败的FullGC,我们的线上系统根据不同的业务特点,因为这个而发生FullGC的频率,有1天的,1周的,1月半年的都有。对于高频率的,
在运维上通过在半夜手工触发FullGC来缓解
4.如果缓存的速度比淘汰的速度快,很不幸,现在的代码有OOM的风险(这个可以修改下代码避免)
6.2 SlabCache,
针
对LruBlockCache的碎片问题一种解决方案,使用堆外内存,处于实验性质,真实测试后,我们定位为不可用。说下它的原理:它由多个
SingleSizeCache组成(所谓SingleSizeCache,就是只缓存固定大小的block,其内部维护一个ByteBuffer
List,每个ByteBuffer的空间都是一样的,比如64K的SingleSizeCache,ByteBuffer的空间都是64K,cache
Block时把Block的内容复制到ByteBuffer中,所以block的大小必须小于等于64K才能被这个SingleSizeCache缓存;
淘汰block的时候只需要将相应的ByteBuffer标记为
空闲,下次cache的时候对其上的内存直接进行覆盖就行
了),cache
Block的时候,选择一个小于且最接近的SingleSizeCache进行缓存,淘汰block亦此。由于SingleSize的局限性,其使用上和
LruBlockCache搭配使用,叫做DoubleBlockCache,cache
block的时候LruBlockCache和SlabCache都缓存一份,get
block的时候顺序为LruBlockCache、SlabCache,如果只有SlabCache命中,那么再将block缓存到
LruBlockCache中(本人觉得它的这个设计很费,你觉得呢)
优点:其思想:申请固定内存空间,Block的读写都在这片区域中进行
缺点:
1.cache block和 get block的时候,需要内存复制
2.SingleSizeCache的设计,导致内存使用率很低
3.与LruBlockCache搭配使用不合理,导致所有的block都会去LruBlockCache中逗留一下,结果是CMS和碎片都不能有所改善
6.3 BucketCache
,可以看成是对SlabCache思想在实现上的一种改进及功能扩展,其优点是解决LruBlockCache的缺点及支持面向高性能读的大缓存空间.
1.何谓大缓存
?缓存Block的存储介质不再仅仅依赖在内存上,而是可以选择为Fusion-io、SSD等高速磁盘,我们称之为二级缓存
2.何谓Bucket?
我们将缓存空间划分为一个个的Bucket,每个Bucket都贴上一个size标签,将Block缓存在最接近且小于size的bucket中(和SingleSizeCache很相似)
3.怎么解决CMS 碎片问题?
Block存储在Bucket中,而每个Bucket的物理存储是不变的,也就是说系统刚启动的时候,我们就申请了一堆Bucket内存空间,而这些内存空间是一直在Old区,block的Get/Cache动作只是对这片空间的访问/覆写,CMS/碎片自然大大减少
4.怎么使用?
上面的描述指出BucketCache可以有两种用法:
4.1 与LruBlockCache搭配,作为主要的内存cache方案使用
4.2 作为二级缓存使用,将Block缓存在我们的高速盘(Fusion-IO)中
5.BucketCache中的Cache/Get Block逻辑?
简单地描述下:
CacheBlock的时候,将Block放在一个RAMMap和一个Queue中,然后
WriterThread异步从Queue中remove
Block写入到IOEngine(内存或高速盘)中,并将BlockKey及其位置、长度等信息记录在backingMap
GetBlock的时候,先访问RAMMap,然后访问backingMap获取block的位置及长度,从IOEngine读取数据
6.Block在IOEngine中的位置是怎么分配的?
我
们将物理空间划分为一堆等大的Bucket,每一个Bucket有一个序号及一个size标签,于是Block所在bucket的序号及其在bucket
中的offset与block在物理空间的offset就形成了一一对应。我们通过BucketAllocator为指定大小的Block寻找一个
Bucket进行存放,于是就得到了其在物理空间上的位置。
上图描述了BucketAllocator对于Bucket的组织管理:
6.1
每个Bucket都有一个size标签,目前对于size的分类,是在启动时候就确定了,如默认的有(8+1)K、(16+1)K、(32+1)K、(40+1)K、(48+1)K、(56+1)K、(64+1)K、(96+1)K ... (512+1)K
6.2
相同size标签的Bucket由同一个BucketSizeInfo管理
6.3
Bucket的size标签可以动态调整,比如64K的block数目比较多,65K的bucket被用完了以后,其他size标签的完全空闲的bucket可以转换成为65K的bucket,但是至少保留一个该size的bucket
6.4
如果最大size的bucket为513K,那么超过这个大小的block无法存储,直接拒绝
6.5
如果某个size的bucket用完了,那么会依照LRU算法触发block淘汰
问题:
6.6.
如果系统一开始都是某个size的block,突然变成另外个size的block(不能存在同个size的bucket中),根据6.5不是会不停地进行淘汰算法?
是的,但是由于淘汰是异步的,影响不大,而且随着淘汰进行,bucket的大小会逐渐向那个block size大小bucket转移,最终稳定
6.7
BucketAllocator中allocate block的流程?
6.8
BucketAllocator中free block的流程?
6.9
第一种使用的测试结果
6.10
第二种使用的测试结果
6.11
更多细节,尽在代码中
https://issues.apache.org/jira/browse/HBASE-7404
发表评论
-
NoSQL HBase
2017-03-07 16:39 710Hbase架构 Hmaster: 元数据,schema管理 ... -
HBase伪分布环境搭建过程记录
2015-02-12 14:11 594公司项目组需要在异地机房进行测试,买的是阿里云的机器, ... -
HBase的get过程(一)
2014-11-16 13:45 1371原文:http://punishzhou.iteye.com ... -
HBase的数据的update
2014-11-16 13:33 868hbase是以rowkey,column,t ... -
hbase的行锁与多版本并发控制(MVCC)
2014-11-16 12:57 6399参考:http://www.rigongyizu.com/h ... -
facebook的HBase经验
2014-11-12 22:16 871见附件 -
HBase Memstore理解笔记
2014-02-09 19:32 698HBase BlockCache理解笔记 ... -
hbase example code
2014-01-16 16:58 1060本地连接hbase: Configuration con ... -
HBASE之RowKey排序解析
2014-01-15 13:59 3481HBASE之RowKey排序解析 学了hbase一段 ... -
Facebook数据仓库揭秘:RCFile高效存储结构
2014-01-04 10:16 972本文介绍了Facebook公司 ... -
HBase in 2013
2013-12-31 20:50 764原文:http://yanbohappy.sinaapp.c ... -
hbase文档集合
2013-12-28 18:44 623问题总结 一次奇异的getRegionInfo异常定位两 ... -
hbase上应用lucene创建索引及检索
2013-12-28 18:23 641hbasene(https://github.com ... -
hbase Region Server定位
2013-12-28 17:32 2509参考:http://iwinit.iteye.c ... -
hbase scan性能
2013-12-26 18:41 0今天把hbase一个表的数据导到另外一个表,源表大概300 ... -
hbase API code
2013-12-26 16:11 0package mytest; import jav ... -
HBase在淘宝主搜索的Dump中的性能调优
2013-12-26 16:01 990目前HBase已经运用于淘宝主搜索的全量和增量的数据存储,有 ... -
HBase二级索引与Join
2013-12-26 15:59 1042二级索引与索引Join是Online业务系统要求存储引擎提供 ... -
HBase的rowkey设计
2013-12-26 15:45 9518访问hbase table中的行,只有三种方式: 1 通 ... -
分布式系统概述(Hadoop与HBase的前生今世)
2013-12-26 15:37 1054古代,人们用牛来拉重物。当一头牛拉不动一根圆木时,他们不曾想 ...
相关推荐
### HBase Bucket Cache:一种高效的缓存管理方案 #### 概述 HBase Bucket Cache 是一个针对 HBase 的块缓存实现,旨在解决 CMS(Concurrent Mark Sweep)垃圾收集器和堆内存碎片带来的性能问题,并提供更大的缓存...
HBase 中有两种 Cache 机制:L1 Cache 和 L2 Cache。L1 Cache 是基于 Java Heap 的缓存,用于存储经常访问的数据。L2 Cache 是基于 Off-heap 的缓存,用于存储更多的数据。Off-heap 缓存可以减少 Java Heap 的大小,...
首先,传统的HBase Cache分为两种类型:L1 on-heap LRUCache和L2 Bucket Cache。L1缓存位于堆内存中,是Java Heap上的缓存,受限于Java堆的大小。L2缓存则利用堆外内存或文件系统来实现,可以拥有比L1更大的缓存空间...
例如,`org.apache.hadoop.hbase.regionserver.HStore`类实现了MemStore和BlockCache,它们分别缓存内存中的新写入数据和硬盘上的热数据,提高读写效率。同时,HBase还支持Compaction操作,通过`org.apache.hadoop....
5. **BlockCache**:配置BlockCache大小,缓存最近访问的数据,提高读取速度。 ### 总结 HBase是大数据处理领域的重要工具,尤其适合实时查询和大规模数据存储。理解并掌握HBase的核心概念、安装配置、数据模型...
11. **优化策略**:包括合理设置Region大小、预分区表、选择合适的Column Family、启用BlockCache等,以提升HBase的性能。 12. **安全配置**:在生产环境中,可能需要配置HBase与Kerberos进行集成,以实现身份验证...
Hbase底层剖析结构,Hbase底层剖析结构,Hbase底层剖析结构
这个阈值可以通过配置参数`hbase.mob.file.cache.size`来设置。同时,为了加快访问速度,HBase还提供了Mob Compaction机制,定期对Mob File进行合并,以减少读取时的磁盘I/O。 在HBase 2.0中,使用MOB存储图片和小...
HBase的Block Cache是 RegionServer 中的一块缓存区域,用于存储频繁访问的数据块。增大Block Cache的大小可以提高读取性能。默认情况下,HBase的Block Cache大小为0.0,可以根据实际情况调整这个值。例如,将Block ...
5. **文件系统和缓存设置**:`fs.defaultFS`设定默认的HDFS文件系统,`hbase.hregion.blockmultiplier`控制BlockCache的大小,`hbase.hregion.memstore.block.multiplier`则用于控制MemStore的大小。 6. **客户端...
例如,它改进了BlockCache的管理,提高了缓存效率;增强了MemStore的压缩算法,降低了存储成本;同时,还优化了Region分裂过程,减少了对系统的影响。 2. **多版本支持**:HBase允许用户保留多个版本的数据,便于...
- **BlockCache**和**MemStore**:缓存机制用于提高读写性能。 8. **扩展性**: HBase支持水平扩展,可以通过增加RegionServer来处理更多数据。 9. **监控与运维**: HBase提供丰富的监控指标,如JMX、Web UI等...
可以通过调整表分区策略、预分割表、使用合适的MemStore大小、开启BlockCache等手段提升性能。同时,了解HBase的Region Server、Zookeeper的角色和工作原理也对理解和优化HBase至关重要。 总的来说,理解并熟练运用...
- 可通过调整配置参数优化性能,如Region大小、BlockCache设置等。 在解压“hbase-1.3.1-bin.zip”后,你可以找到启动和配置HBase所需的所有文件,包括bin目录下的可执行脚本、conf目录中的配置文件、lib目录中的...
- BlockCache: 缓存热数据,加速读取速度。 - Region Splitting & Balancing: 自动分裂大Region和负载均衡,保持集群健康运行。 6. **HBase MPI** - MPI(Message Passing Interface)通常用于高性能计算,将...
3. **实时查询**:HBase支持实时读写操作,通过内存缓存和BlockCache机制,提供了亚秒级的查询响应速度。 4. **稀疏性**:HBase可以存储大量的稀疏数据,即许多行或列可能存在大量缺失值,只存储有实际数据的位置,...
<name>hbase.regionserver.hfile.mob.cache.enabled <value>true ``` #### 三、MOB文件管理 MOB功能引入了一种新的读写路径,即MOB文件。这些文件通过两种方式清理和压缩:过期MOB文件清理器和MOB压缩器。 ###...
10. **性能优化**:根据查询和操作的性能反馈,指导用户调整Hbase的配置参数,如Memstore大小、BlockCache设置等。 "**hbase-data-browser-v4.0-RC**"这个文件名可能是该管理器的一个特定版本,4.0代表主版本号,RC...
- **BlockCache和MemStore**:缓存机制,提升读取性能。 - **Compaction**:定期合并Region中的文件,减少数据文件的数量,优化读写性能。 5. **HBase的应用场景** - 实时查询:HBase适合实时读取大量数据,如...
5. **性能优化**:分享在项目实践中遇到的问题及解决方案,如Region大小调整、Compaction策略、BlockCache的使用等,以提高Hbase的读写性能。 6. **案例分析**:通过实际项目案例,展示Hbase在互联网、物联网、日志...