- 浏览: 354062 次
- 性别:
- 来自: 杭州
最新评论
-
penkee:
为何我启动 zookKeeper bookie 10 不能创 ...
bookkeeper安装及测试体验 -
Golden-jin:
1楼也好时髦呀
bookkeeper简单分析 -
xGss2000:
要是减少到300个 region,block就0.04s了。话 ...
多region下的hbase写入问题 -
brandom520:
请问lz,我从hbase0.94版本上的数据导入到0.96.1 ...
在不同版本hdfs集群之间转移数据 -
huanghaifeng1990:
您好,我想请问一下,我执行了会发生OOM溢出的Deflater ...
perftools查看堆外内存并解决hbase内存溢出
首先要清楚reginserver中内存是如何使用的。
reginserver中内存总体分成三部分:blocksize专供读使用的内存,memstore供读写使用的内存,其它内存。
其中前两者的大小在配置中分别通过hfile.block.cache.size以及hbase.regionserver.global.memstore.upperLimit来控制,两者的大小之和被hbase硬编码为不可以大于等于0.8。所以如果发生了oom,那么一定是这里的其它内存使用过多造成的。
其它内存包括哪些呢?最主要的部分是接收临时数据、flush时产生的snapshot,以及compact产生的内存等。以目前我的运维经验来看,大多数oom是发生在compact期间。所以当发生oom时,可以优先查看一下是否包含compact失败。
compact的原理是将hdfs上原有的相应列数据按行读入内存,再写回hdfs。不幸的是有时候由于version或宽表的原因,导致某一个rowkey非常巨大,引起了内存消耗。此时,compact消耗的内存就由最大的rowkey来决定。
另外,代码org.apache.hadoop.hbase.HTableDescriptor中有方法
己经修改了文章。
不过一般网络IO的影响会随着hdfs集群的扩大而减小,所以尽量使用更多的datanode节点吧。
datanode的数目 >= regionserver的数目。
这一点不认同。
你好,你的意思是?
compaction过程,由于每个SSTable本身内部是排序的,这个compaction过程是一个merge-sort过程,
所以并不需要将数据都读入内存中来排序吧,只需要一定的缓存就可以了吧?
compaction消耗的内存不是由hbase.hregion.max.filesize来决定的吧?IMHO,compaction消耗的内存与以下几方面有关:1)文件缓存的大小(HDFS层面上)2)compaction涉及到的文件数目吧。
谢谢!之前没有仔细看compact的代码。不过compaction消耗的内存也可能会很大,因为有时候用户会使用很多个version,这时会导致产生很大的row,读入内存就会发生oom了
己经修改了文章。
不过一般网络IO的影响会随着hdfs集群的扩大而减小,所以尽量使用更多的datanode节点吧。
这一点不认同。
你好,你的意思是?
compaction过程,由于每个SSTable本身内部是排序的,这个compaction过程是一个merge-sort过程,
所以并不需要将数据都读入内存中来排序吧,只需要一定的缓存就可以了吧?
compaction消耗的内存不是由hbase.hregion.max.filesize来决定的吧?IMHO,compaction消耗的内存与以下几方面有关:1)文件缓存的大小(HDFS层面上)2)compaction涉及到的文件数目吧。
这一点不认同。
你好,你的意思是?
这一点不认同。
reginserver中内存总体分成三部分:blocksize专供读使用的内存,memstore供读写使用的内存,其它内存。
其中前两者的大小在配置中分别通过hfile.block.cache.size以及hbase.regionserver.global.memstore.upperLimit来控制,两者的大小之和被hbase硬编码为不可以大于等于0.8。所以如果发生了oom,那么一定是这里的其它内存使用过多造成的。
其它内存包括哪些呢?最主要的部分是接收临时数据、flush时产生的snapshot,以及compact产生的内存等。以目前我的运维经验来看,大多数oom是发生在compact期间。所以当发生oom时,可以优先查看一下是否包含compact失败。
compact的原理是将hdfs上原有的相应列数据按行读入内存,再写回hdfs。不幸的是有时候由于version或宽表的原因,导致某一个rowkey非常巨大,引起了内存消耗。此时,compact消耗的内存就由最大的rowkey来决定。
另外,代码org.apache.hadoop.hbase.HTableDescriptor中有方法
public void setMaxFileSize(long maxFileSize),该方法比hbase.hregion.max.filesize优先级要高,所以代码里面如果进行了这个设置,会优先使用代码中的值。在发生oom的时候也要检查下代码中是否进行了该项设置。
评论
9 楼
uestzengting
2011-12-09
regionserver compact消耗的内存主要决于三个因素:
1.同一时间点regionserver上正在进行compact操作的region数
2.region一次compact过程中输入的storefile文件个数
3.一行kv记录本身的大小
控制好这三项,regionserver在compact的过程中才不会发生oom
第1项hbase本身有防范措施,就是在做major compact操作的时间间隔上不是一个固定值,默认是24小时的正负20%的时间范围内随机进行compact,这样可以避免同一时间点都有一批region都在做compact
第2项可以通过控制flush的效率来控制storfile的文件个数,文件个数越少越不容易溢出。
第3项就通过应用来控制了。
1.同一时间点regionserver上正在进行compact操作的region数
2.region一次compact过程中输入的storefile文件个数
3.一行kv记录本身的大小
控制好这三项,regionserver在compact的过程中才不会发生oom
第1项hbase本身有防范措施,就是在做major compact操作的时间间隔上不是一个固定值,默认是24小时的正负20%的时间范围内随机进行compact,这样可以避免同一时间点都有一批region都在做compact
第2项可以通过控制flush的效率来控制storfile的文件个数,文件个数越少越不容易溢出。
第3项就通过应用来控制了。
8 楼
杨俊华
2011-10-11
lc_koven 写道
杨俊华 写道
是的。
compaction其实是是通过storefile的read将store file文件以stream形式读入,再合并的。所以,不是一下子加载到内存里面的。
所以,hbase.hregion.max.filesize 的大小不会影响内存的占用。
在《hbase definition》中,建议可以调大到1G。
调大filesize的大小,有助于减少region的数目,减低split的频率。
但是,filesize增大,对compact的影响,我认为主要在IO上,而且是网络IO。因为 storefile里面的文件是在hdfs上面。
compaction其实是是通过storefile的read将store file文件以stream形式读入,再合并的。所以,不是一下子加载到内存里面的。
所以,hbase.hregion.max.filesize 的大小不会影响内存的占用。
在《hbase definition》中,建议可以调大到1G。
调大filesize的大小,有助于减少region的数目,减低split的频率。
但是,filesize增大,对compact的影响,我认为主要在IO上,而且是网络IO。因为 storefile里面的文件是在hdfs上面。
己经修改了文章。
不过一般网络IO的影响会随着hdfs集群的扩大而减小,所以尽量使用更多的datanode节点吧。
datanode的数目 >= regionserver的数目。
7 楼
杨俊华
2011-10-11
是的,很大的行的确是一个问题。
有可能一行就导致OOME。
这种情况就不仅仅在compaction.如果一行过大,客户端读取的时候,哪怕HBase不挂,客户端也会挂。
理论上要避免造成很大行的情况。在插入数据的时候就要有意避免。可以考虑不要放在一个行的多version,而是用不同的rowkey分割为多行。而多version仅仅给数据比较小得列使用。
HBase 0.90有一个 intrarow scan,可以解决客户端读取过大row OOME的问题。
https://issues.apache.org/jira/browse/HBASE-1537
To continue scaling numbers of columns or versions in a single row, we need a mechanism to scan within a row so we can return some columns at a time. Currently, an entire row must come back as one piece.
但是,依然无法解决compaction读过大行OOME的问题。
Very wide rows -- 30M plus -- cause us OOME
https://issues.apache.org/jira/browse/HBASE-3421
这个bug要到Hbase-0.90.5才fix。
但是还是建议不要存那么大得行。你读出来不费劲吗。
我们以前也遇到过,后来就让application自己想办法避免大行。
有可能一行就导致OOME。
这种情况就不仅仅在compaction.如果一行过大,客户端读取的时候,哪怕HBase不挂,客户端也会挂。
理论上要避免造成很大行的情况。在插入数据的时候就要有意避免。可以考虑不要放在一个行的多version,而是用不同的rowkey分割为多行。而多version仅仅给数据比较小得列使用。
HBase 0.90有一个 intrarow scan,可以解决客户端读取过大row OOME的问题。
https://issues.apache.org/jira/browse/HBASE-1537
To continue scaling numbers of columns or versions in a single row, we need a mechanism to scan within a row so we can return some columns at a time. Currently, an entire row must come back as one piece.
但是,依然无法解决compaction读过大行OOME的问题。
Very wide rows -- 30M plus -- cause us OOME
https://issues.apache.org/jira/browse/HBASE-3421
这个bug要到Hbase-0.90.5才fix。
但是还是建议不要存那么大得行。你读出来不费劲吗。
我们以前也遇到过,后来就让application自己想办法避免大行。
6 楼
lc_koven
2011-10-11
AntyRao 写道
lc_koven 写道
AntyRao 写道
引用
compact的原理是将hdfs上原有的相应列数据读入内存,然后在内存中做一次merge,再写回hdfs。compact消耗的内存是由hbase.hregion.max.filesize值决定的,这个值的意思是当某一个region的任何一列下的storefile总大小大于该值后,就会发生split,而split之后相应的compact的大小就降下去了。因此当hbase.hregion.max.filesize设置为256MB(默认值)时,内存中最多会申请512MB,调大这个值内存使用量会继续上升。
这一点不认同。
你好,你的意思是?
compaction过程,由于每个SSTable本身内部是排序的,这个compaction过程是一个merge-sort过程,
引用
compact的原理是将hdfs上原有的相应列数据读入内存,然后在内存中做一次merge
所以并不需要将数据都读入内存中来排序吧,只需要一定的缓存就可以了吧?
引用
compact消耗的内存是由hbase.hregion.max.filesize值决定的
compaction消耗的内存不是由hbase.hregion.max.filesize来决定的吧?IMHO,compaction消耗的内存与以下几方面有关:1)文件缓存的大小(HDFS层面上)2)compaction涉及到的文件数目吧。
谢谢!之前没有仔细看compact的代码。不过compaction消耗的内存也可能会很大,因为有时候用户会使用很多个version,这时会导致产生很大的row,读入内存就会发生oom了
5 楼
lc_koven
2011-10-11
杨俊华 写道
是的。
compaction其实是是通过storefile的read将store file文件以stream形式读入,再合并的。所以,不是一下子加载到内存里面的。
所以,hbase.hregion.max.filesize 的大小不会影响内存的占用。
在《hbase definition》中,建议可以调大到1G。
调大filesize的大小,有助于减少region的数目,减低split的频率。
但是,filesize增大,对compact的影响,我认为主要在IO上,而且是网络IO。因为 storefile里面的文件是在hdfs上面。
compaction其实是是通过storefile的read将store file文件以stream形式读入,再合并的。所以,不是一下子加载到内存里面的。
所以,hbase.hregion.max.filesize 的大小不会影响内存的占用。
在《hbase definition》中,建议可以调大到1G。
调大filesize的大小,有助于减少region的数目,减低split的频率。
但是,filesize增大,对compact的影响,我认为主要在IO上,而且是网络IO。因为 storefile里面的文件是在hdfs上面。
己经修改了文章。
不过一般网络IO的影响会随着hdfs集群的扩大而减小,所以尽量使用更多的datanode节点吧。
4 楼
杨俊华
2011-10-11
是的。
compaction其实是是通过storefile的read将store file文件以stream形式读入,再合并的。所以,不是一下子加载到内存里面的。
所以,hbase.hregion.max.filesize 的大小不会影响内存的占用。
在《hbase definition》中,建议可以调大到1G。
调大filesize的大小,有助于减少region的数目,减低split的频率。
但是,filesize增大,对compact的影响,我认为主要在IO上,而且是网络IO。因为 storefile里面的文件是在hdfs上面。
compaction其实是是通过storefile的read将store file文件以stream形式读入,再合并的。所以,不是一下子加载到内存里面的。
所以,hbase.hregion.max.filesize 的大小不会影响内存的占用。
在《hbase definition》中,建议可以调大到1G。
调大filesize的大小,有助于减少region的数目,减低split的频率。
但是,filesize增大,对compact的影响,我认为主要在IO上,而且是网络IO。因为 storefile里面的文件是在hdfs上面。
3 楼
AntyRao
2011-10-11
lc_koven 写道
AntyRao 写道
引用
compact的原理是将hdfs上原有的相应列数据读入内存,然后在内存中做一次merge,再写回hdfs。compact消耗的内存是由hbase.hregion.max.filesize值决定的,这个值的意思是当某一个region的任何一列下的storefile总大小大于该值后,就会发生split,而split之后相应的compact的大小就降下去了。因此当hbase.hregion.max.filesize设置为256MB(默认值)时,内存中最多会申请512MB,调大这个值内存使用量会继续上升。
这一点不认同。
你好,你的意思是?
compaction过程,由于每个SSTable本身内部是排序的,这个compaction过程是一个merge-sort过程,
引用
compact的原理是将hdfs上原有的相应列数据读入内存,然后在内存中做一次merge
所以并不需要将数据都读入内存中来排序吧,只需要一定的缓存就可以了吧?
引用
compact消耗的内存是由hbase.hregion.max.filesize值决定的
compaction消耗的内存不是由hbase.hregion.max.filesize来决定的吧?IMHO,compaction消耗的内存与以下几方面有关:1)文件缓存的大小(HDFS层面上)2)compaction涉及到的文件数目吧。
2 楼
lc_koven
2011-10-08
AntyRao 写道
引用
compact的原理是将hdfs上原有的相应列数据读入内存,然后在内存中做一次merge,再写回hdfs。compact消耗的内存是由hbase.hregion.max.filesize值决定的,这个值的意思是当某一个region的任何一列下的storefile总大小大于该值后,就会发生split,而split之后相应的compact的大小就降下去了。因此当hbase.hregion.max.filesize设置为256MB(默认值)时,内存中最多会申请512MB,调大这个值内存使用量会继续上升。
这一点不认同。
你好,你的意思是?
1 楼
AntyRao
2011-10-08
引用
compact的原理是将hdfs上原有的相应列数据读入内存,然后在内存中做一次merge,再写回hdfs。compact消耗的内存是由hbase.hregion.max.filesize值决定的,这个值的意思是当某一个region的任何一列下的storefile总大小大于该值后,就会发生split,而split之后相应的compact的大小就降下去了。因此当hbase.hregion.max.filesize设置为256MB(默认值)时,内存中最多会申请512MB,调大这个值内存使用量会继续上升。
这一点不认同。
发表评论
-
lease引发的血案
2011-12-19 23:01 6172今天线上出现了一个故障惊出一身冷汗,经过查明原来是lease引 ... -
hbase写被block住的典型案例分析
2011-11-10 22:32 5946今天一个线上集群出现莫名奇妙不能写入数据的bug,lo ... -
在不同版本hdfs集群之间转移数据
2011-10-26 18:56 7232本文仅供记录一下程序心得: 很多人会有这样一个需求:将 ... -
hbase中的deleteColumn
2011-10-26 16:59 5167Delete类的接口有两个方法:deleteColum ... -
splitlog期间丢失数据的问题
2011-10-18 22:26 3707splitlog是保证在重启或rs挂掉后,恢复hlog ... -
hbase中多次加载root及meta的bug
2011-10-18 22:24 3208执行以下case可以见到root或meta被加载两次: ... -
两次hbase丢失数据的故障及原因分析
2011-10-18 18:12 16840hbase的稳定性是近期社区的重要关注点,毕竟稳定的系 ... -
hbase的export与import工具
2011-09-01 08:01 11326hbase提供了导出表的方案,将指定的表导出到HDFS ... -
disable table失败的处理
2011-08-30 20:02 4349相信每一个维护hbase集群的运维人员一定碰到过dis ... -
使用zookeeper管理多个hbase集群
2011-08-16 15:30 18167zookeeper是hbase集群的"协调器 ... -
一次奇异的getRegionInfo异常定位
2011-08-10 19:55 2532今天在线上环境的 ... -
多region下的hbase写入问题
2011-08-10 13:13 9255最近在集群上发现hbase写入性能受到较大下降,测试环 ... -
hbase上应用lucene创建索引及检索
2011-07-21 17:14 11637hbasene(https://github.com/ ... -
hbase-0.90.4的主要更新
2011-07-15 22:15 2828apache邮件列表中提 ... -
hbase中缓存的优先级
2011-06-15 16:30 4139今天同事问到hbase中in-memory属性的作用, ... -
hbase交流记录
2011-06-02 10:34 3546前几天和公司的同事杨传辉(http://www.nosqlno ... -
secondary index for hbase
2011-05-07 23:05 5802最近因为业务需求 ... -
hdfs上的append测试
2011-05-04 23:42 6579hbase在写入数据之前会先写hlog,hlog目前是se ... -
hbase写入性能影响续
2011-04-18 15:28 10611今天发现hbase在写入一张新表时,写入过程中时常会出 ... -
hbase中的缓存的计算与使用
2011-04-13 20:20 8379hbase中的缓存分了两层:memstore和b ...
相关推荐
`hbase.regionserver.global.memstore.upperLimit` 和 `hbase.regionserver.global.memstore.lowerLimit` - **含义**:分别定义了RegionServer所有MemStore占用内存的比例上限和下限。 - **默认值**:分别为0.4和...
在HBase的分布式架构中,`org.apache.hadoop.hbase.client.HConnectionManager`负责管理客户端与HBase服务器之间的连接,而`org.apache.hadoop.hbase.regionserver.HRegionServer`是处理Region服务的主要组件,它...
NULL 博文链接:https://bnmnba.iteye.com/blog/2322332
`hbase.hregion.memstore.block.multiplier`控制内存中memstore的大小,防止过多数据堆积导致RegionServer崩溃。 10. **性能优化** - `hbase.client.scanner.caching`设置每次从RegionServer拉取的数据行数,以...
源码中的`org.apache.hadoop.hbase.regionserver.Store`和`org.apache.hadoop.hbase.regionserver.HStore`类涉及到了Compaction的具体实现。 10. **HBase客户端API**:HBase提供Java、REST、Thrift等多种客户端API...
在大数据存储领域,HBase作为一个分布式列式数据库,被广泛应用于处理海量结构化数据。...这份资料中的“HBase配置项说明及调优建议.xlsx”应该包含了详细的参数解释和实践案例,是学习和优化HBase不可或缺的参考资源。
总的来说,这些文件和标签展示了HBase的基础配置、数据操作以及HBase与Hive的集成,这些都是大数据处理和分析中不可或缺的部分。通过理解和调整这些配置,可以优化HBase系统的性能,提升大数据处理的效率和可靠性。
* hbase.regionserver.info.bindAddress:0.0.0.0,这个参数指定了 HBase RegionServer WEB-UI 绑定的地址。 十、HBase RegionServer IPC 配置 * hbase.ipc.server.callqueue.handler.factor:0.1,这个参数指定了...
HBase的参数主要分布在`hbase-site.xml`和`hbase-default.xml`两个配置文件中。`hbase-site.xml`用于覆盖默认配置,而`hbase-default.xml`则包含了所有可能的配置项及其默认值。 三、关键参数详解 1. `hbase....
增加磁盘时,需要将新的磁盘添加到RegionServer中,然后重新启动RegionServer。 七、遇到问题及解决办法 遇到问题时,需要检查HBase的日志文件,查看错误信息,然后根据错误信息进行解决。例如,如果 RegionServer...
HBase MOB(Medium Object Blob)功能是为了解决在HBase中存储较大二进制数据(如图像、文档等)时性能下降的问题。当HBase处理的数据量达到10MB级别时,由于分片和压缩导致的写放大效应会严重影响性能。为了优化这...
实验中,客户端通过Zookeeper获取RegionServer地址,持续向HBase的RegionServer发送Row数据。为直观展现性能测试结果,设计了一款基于JFreeChart的实时图表生成程序,每隔3分钟自动绘制耗时统计图,并将其存储于特定...
HBase的BlockingStoreFiles是RegionServer中的一个参数,用于控制StoreFile的数量。增大这个参数可以提高写入性能。默认情况下,HBase的BlockingStoreFiles为7,可以根据实际情况调整这个值。例如,将...
`hbase.master.info.port`和`hbase.regionserver.info.port`分别设置了Master和RegionServer的Web UI端口,可以通过这些端口监控HBase的状态。 内存管理方面,`hbase.master.maxHeapSize`和`hbase.regionserver....
HBase 的RegionServer 节点是 HBase 集群中的主要组件,负责存储和管理数据。RegionServer 节点可以水平扩展以提高系统性能。 6. HBase 客户端 HBase 客户端提供了多种方式来访问 HBase 数据库,包括 Java API、 ...
hbase.regionserver.codecs C.3. LZO C.4. GZIP C.5. SNAPPY C.6. Changing Compression Schemes D. YCSB: The Yahoo! Cloud Serving Benchmark and HBase E. HFile format version 2 E.1. Motivation E.2. HFile ...