hbase参数调整

简单的参数调整,适合初级学习

1.hbase中hfile的默认最大值(hbase.hregion.max.filesize) 256MB  --10GB??


根据结果得到如下结论:值越小,平均吞吐量越大,但吞吐量越不稳定;值越大,平均吞吐量越小,吞吐量不稳定的时间相对更小。


2. autoflush=false的影响 2M(hbase.client.write.buffer决定)


3.<name>hbase.hregion.memstore.flush.size</name> 128MB


hbase存储目录:
1./hbase/.tmp
当对表做创建或者删除操作的时候,会将表move 到该 tmp 目录下,然后再去做处理操作。
2./hbase/MasterProcWALs
3./hbas/WALs
大家都知道 HBase 是支持 WAL(Write Ahead Log) 的,HBase 会在第一次启动之初会给每一台 RegionServer 在.log 下创建一个目录,若客户端如果开启WAL 模式,会先将数据写入一份到.log 下,当 RegionServer crash 或者目录达到一定大小,会开启 replay 模式,类似 MySQL 的 binlog。
4./hbase/archive
HBase 在做 Split或者 compact 操作完成之后,会将 HFile 移到.archive 目录中,然后将之前的 hfile 删除掉,该目录由 HMaster 上的一个定时任务定期去清理。
5./hbase/corrupt
  存储HBase做损坏的日志文件,一般都是为空的。 
6./hbase/data
这个才是 hbase 的核心目录,0.98版本里支持 namespace 的概念模型,系统会预置两个 namespace 即:hbase和default
7./hbase/hbase.id
它是一个文件,存储集群唯一的 cluster id 号,是一个 uuid。
8./hbase/hbase.version
同样也是一个文件,存储集群的版本号,貌似是加密的,看不到,只能通过web-ui 才能正确显示出来。
9./hbase/oldWALs
这里对应0.94的.oldlogs 目录,取名为 oldWALs 是不是更好了呢!
--10./hbase/.snapshot
     hbase若开启了 snapshot 功能之后,对某一个用户表建立一个 snapshot 之后,snapshot 都存储在该目录下,如对表test 做了一个 名为sp_test 的snapshot,就会在/hbase/.snapshot/目录下创建一个sp_test 文件夹,snapshot 之后的所有写入都是记录在这个 snapshot 之上。  
--11./hbase/.hbck
     HBase 运维过程中偶尔会遇到元数据不一致的情况,这时候会用到提供的 hbck 工具去修复,修复过程中会使用该目录作为临时过度缓冲。


查看属性
./jps -v|grep "Region"




export HBASE_OPTS="$HBASE_OPTS -XX:+UseCompressedOops -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSParallelRemarkEnabled  -XX:CMSInitiatingOccupancyFraction=75 -XX:SoftRefLRUPolicyMSPerMB=0"


-XX:+UseCompressedOops 
压缩指针,解决内存占用


-XX:+UseParNewGC 
设置年轻代为并行收集 
 
-XX:+UseConcMarkSweepG 
 使用CMS内存收集 
 
-XX:+CMSClassUnloadingEnabled 
相对于并行收集器,CMS收集器默认不会对永久代进行垃圾回收。如果希望对永久代进行垃圾回收,可用设置标志-XX:+CMSClassUnloadingEnabled。 在早期JVM版本中,要求设置额外的标志-XX:+CMSPermGenSweepingEnabled。注意,即使没有设置这个标志,一旦永久代耗尽空 间也会尝试进行垃圾回收,但是收集不会是并行的,而再一次进行Full GC。


-XX:+UseCMSCompactAtFullCollection 
使用并发收集器时,开启对年老代的压缩.


-XX:CMSFullGCsBeforeCompaction 
由于并发收集器不对内存空间进行压缩,整理,所以运行一段时间以后会产生”碎片”,使得运行效率降低.此值设置运行多少次GC以后对内存空间进行压缩,整理.


-XX:+CMSParallelRemarkEnabled 
降低标记停顿


-XX:CMSInitiatingOccupancyFraction=75 
使用cms作为垃圾回收使用75%后开始CMS收集


-XX:SoftRefLRUPolicyMSPerMB 
每兆堆空闲空间中SoftReference的存活时间




----
oldWALs 32MB左右?


----
关注一下dmesg和message的log
---------------
export HBASE_HEAPSIZE=6G


    <property>  
        <name>hfile.block.cache.size</name>  
        <value>0.3</value>  
    </property>  
    
<property>
   <name>hbase.regionserver.global.memstore.size.lower.limit</name>  
        <value>0.5</value>  
    </property>  
    <property>  
        <name>hbase.regionserver.global.memstore.size</name>  
        <value>0.5</value>  
    </property> 

 -===这样在HEAP_SIZE=4G时候,


    hfile.block.cache.size计算值为4G*0.3=1.2G;
     hbase.regionserver.global.memstore.size计算值为4G*0.5=2G;
     hbase.regionserver.global.memstore.size.lower.limit计算值为4G*0.5*0.5=1G;
     并且0.3+0.5<=0.8,没有超过hbase设置的不能超过0.8这个值
------
<property>  
        <!--htable.setWriteBufferSize(5242880);//5M -->  
        <name>hbase.client.write.buffer</name>  
        <value>5242880</value>  
</property> 


默认是 2097152; HTable客户端的写缓冲的默认大小。这个值越大,需要消耗的内存越大。因为缓冲在客户端和服务端都有实例,所以需要消耗客户端和服务端两个地方的内存。得到的好处是,可以减少RPC的次数
------
<property>    
        <name>hbase.regionserver.handler.count</name>    
        <value>100</value>    
        <description>Count of RPC Listener instances spun up on RegionServers.Same property is used by the Master for count of master handlers.</description>    
</property> 


默认30;;;参数hbase.regionserver.handler.count的本质是设置一个RegsionServer可以同时处理多少请求。 如果定的太高,吞吐量反而会降低;如果定的太低,请求会被阻塞,得不到响应。你可以打开RPC-level日志读Log,来决定对于你的集群什么值是合适的。(请求队列也是会消耗内存的)


-------


    1 .每一个Region都有一个Memstore,Memstore默认大小为128MB,可通过hbase.hregion.memstore.flush.size更改;
    2 Region会随着split操作逐步增多,为了控制Memstore之和导致OOM错误,在hbase老版本中是通过hbase.regionserver.global.memstore.upperLimit和hbase.regionserver.global.memstore.lowerLimit进行控制,新版本中使用hbase.regionserver.global.memstore.size和hbase.regionserver.global.memstore.lowerLimit控制;
    3 Hbase-env.sh中HEAP_SIZE=4G时,老版本Hbase.regionserver.global.memstore.upperLimit(默认HEAP_SIZE*0.4)=1.6G,hbase.regionserver.global.memstore.lowerLimit(默认HEAP_SIZE*0.35)=1.4G,新版本hbase.regionserver.global.memstore.size(默认HEAP_SIZE*0.4)=1.6G和Hbase.regionserver.global.memstore.lowerLimit(hbase.regionserver.global.memstore.size*HEAP_SIZE*0.95)=1.52G;

    4 Memstore总和达到第一个临界值,会在所有memstore中选择一个最大的那个进行flushing,此时不会阻塞写;
    Memstore总和达到第二个临界值,会阻塞所有的读写,将当前所有memstore进行flushing。
    每一个Region都有一个BlockCache,BlockCache总和默认打下为HEAP_SIZE乘以0.4,默认是通过hfile.block.cache.size设置;
    所有的读请求,先到BlockCache中查找,基本Memstore中有的值在BlockCache中也都有,找不到再去Hfile中找。
    5 hbase中默认规定Memstore总和最大值(hbase.regionserver.global.memstore.size默认0.4)和BlockCache总和最大值(hfile.block.cache.size默认0.4)之和不能大于0.8,因为要预留0.2的HEAP_SIZE供其他操作使用,这个可详见hbase源代码Org.apache.hadoop.hbase.io.util.HeapMemorySizeUtil.java文件。








  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HBase中,创建表时可以使用多个参数来定义表的属性和行为。下面是一些常见的HBase建表参数的详解: 1. 表的名称(NAME):表在HBase中的唯一标识符。 2. 列族(COLUMN FAMILIES):表中数据的逻辑组织单元,可以包含多个列(Column)。列族在表创建时定义,之后不能修改。 3. 最大版本数(VERSIONS):指定每个单元格(Cell)最多保存的版本数,默认为1。当设置为1时,只保存最新版本。 4. 最小版本数(MIN_VERSIONS):指定每个单元格至少保存的版本数,默认为0。当设置为0时,只保存最新版本。 5. TTL(TIME TO LIVE):指定每个单元格的存活时间,以秒为单位。过期的单元格将被自动删除。 6. 块大小(BLOCK SIZE):HBase将表数据以块(Block)的形式存储在HDFS上。块大小是指每个块的大小,默认为64KB。 7. 压缩类型(COMPRESSION):指定表中数据的压缩算法。常用的算法有Gzip、Snappy等。 8. 数据复制(REPLICATION SCOPE):指定数据复制的范围。可以选择在集群内部复制或跨集群复制。 9. 分区器(SPLIT POLICY):HBase使用行键(Row Key)对数据进行分区和存储。分区器定义了如何将数据分布到不同的Region Server上。 10. 预分区(PRE-SPLIT):在创建表时,可以预先将表分成若干个区域(Region),提高并发性能和负载均衡能力。 以上是一些常见的HBase建表参数,具体使用时可以根据实际需求进行调整。还有其他一些高级参数可供选择,如缓存大小、写入策略等,根据具体情况选择合适的参数进行配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值