hbase存储大数据量相关配置调优

来源:互联网 发布:在a标签传随机参数js 编辑:程序博客网 时间:2024/06/03 19:36

<property><name>hbase.hregion.majorcompaction</name><value>0</value></property>

配置major合并的间隔时间,默认为1天,可设置为0,禁止自动的major合并,可手动或者通过脚本定期进行major合并,有两种compact:minor和major,minor通常会把数个小的相邻的storeFile合并成一个大的storeFile,minor不会删除标示为删除的数据和过期的数据,major会删除需删除的数据,major合并之后,一个store只有一个storeFile文件,会对store的所有数据进行重写,有较大的性能消耗。


<property><name>hbase.hregion.max.filesize</name><value>21474836480</value></property>

配置region大小,0.94.12版本默认是10G,region的大小与集群支持的总数据量有关系,如果总数据量小,则单个region太大,不利于并行的数据处理,如果集群需支持的总数据量比较大,region太小,则会导致region的个数过多,导致region的管理等成本过高,如果一个RS配置的磁盘总量为3T*12=36T数据量,数据复制3份,则一台RS服务器可以存储10T的数据,如果每个region最大为10G,则最多1000个region,如此看,94.12的这个默认配置还是比较合适的,不过如果要自己管理split,则应该调大该值,并且在建表时规划好region数量和rowkey设计,进行region预建,做到一定时间内,每个region的数据大小在一定的数据量之下,当发现有大的region,或者需要对整个表进行region扩充时再进行split操作,一般提供在线服务的hbase集群均会弃用hbase的自动split,转而自己管理split。

HStoreFile的最大尺寸,换句话说,当一个region里的列族的任意一个HStoreFile超过这个大小,那么region进行split,默认是10737418240;


<property><name>hbase.coprocessor.master.classes</name><value>org.apache.hadoop.hbase.security.access.AccessController</value></property>

由HMaster进程加载的coprocessors,逗号分隔,全部实现org.apache.hadoop.hbase.coprocessor.MasterObserver,同coprocessor类似,加入classpath及全限定名;


<property><name>hbase.client.scanner.timeout.period</name><value>120000</value></property>

结合刚才的caching做的一个,scanner的超时时间,默认是60000毫秒;


<property><name>hbase.hstore.blockingStoreFiles</name><value>2100000000</value></property>

默认值:7
说明:在flush时,当一个region中的Store(Coulmn Family)内有超过7个storefile时,则block所有的写请求进行compaction,以减少storefile数量。

调优:block写请求会严重影响当前regionServer的响应时间,但过多的storefile也会影响读性能。从实际应用来看,为了获取较平滑的响应时间,可将值设为无限大。如果能容忍响应时间出现较大的波峰波谷,那么默认或根据自身场景调整即可。


<property><name>hbase.regionserver.global.memstore.size</name><value>0.4</value></property>

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;


  1. <property><name>hbase.rootdir</name><value>hdfs://bdpha/hbase</value></property>
  2. HBase集群中所有RegionServer共享目录,用来持久化HBase的数据,一般设置的是hdfs的文件目录

  3. <property><name>hbase.rpc.engine</name><value>org.apache.hadoop.hbase.ipc.SecureRpcEngine</value></property>
  4. 打开kerberos安全认证的hbase,要配置“hbase.rpc.engine=org.apache.hadoop.hbase.ipc.SecureRpcEngine”, 按正常的编译、布署,发现启动的时候,报找不到SecureRpcEngine这个类。发现开了security的hbase,需要在maven编译的时候,加上-Psecurity, 这个是跟hadoop有点不一样的。

  5. <property><name>hbase.security.authentication</name><value>simple</value></property>
  6. HBase集群安全认证机制,目前的版本只支持kerberos安全认证
  7. 线上配置:kerberos
  8. 默认值:空

  9. <property><name>hbase.security.authorization</name><value>false</value></property>
  10. HBase是否开启安全授权机制
  11. 线上配置: true
  12. 默认值: false

  13. <property><name>hbase.hstore.compaction.max</name><value>20</value></property>
  14. 每个minor compaction的HStoreFile个数上限,默认是10;

  15. <property>
  16. <name>hbase.coprocessor.region.classes</name
  17. <value>org.apache.hadoop.hbase.security.token.TokenProvider,org.apache.hadoop.hbase.security.access.AccessController</value>
  18. </property>
  19. 逗号分隔的Coprocessores列表,会被加载到默认所有表上。在自己实现了一个Coprocessor后,将其添加到Hbase的classpath并加入全限定名。也可以延迟加载,由HTableDescriptor指定;

  20. <property><name>hbase.regionserver.handler.count</name><value>60</value></property>
  21. 该设置决定了处理RPC的线程数量,默认值是10,通常可以调大,比如:150,当请求内容很大(上MB,比如大的put、使用缓存的scans)的时候,如果该值设置过大则会占用过多的内存,导致频繁的GC,或者出现OutOfMemory,因此该值不是越大越好。考虑到sas盘的io能力,线上一般为50

  22. <property><name>hbase.cluster.distributed</name><value>true</value></property>
  23. 集群的模式,分布式还是单机模式,如果设置成false的话,HBase进程和Zookeeper进程在同一个JVM进程。
  24. 线上配置为true
  25. 默认值:false

  26. <property><name>hfile.block.cache.size</name><value>0.2</value></property>
  27. 一个配置比例,允许最大堆的对应比例的内存作为HFile和HStoreFile的block cache,默认是0.4,即40%,设置为0则disable这个比例,不推荐这么做;

  28. <property><name>hbase.hregion.memstore.flush.size</name><value>134217728</value></property>
  29. Memstore写磁盘的flush阈值,超过这个大小就flush,默认是134217728;

  30. <property><name>zookeeper.session.timeout</name><value>120000</value></property>
  31. 客户端与zk连接超时时间,首先ZK客户端要用,Hbase使用zk的客户端联系总体,同时也被用来启动一个zk server,作为zk的maxSessionTimeout,总的来说就是regionserver与zk的关键参数,如果连接超时,master会重新的balance,regionserver也会被从集群名单中清除,默认是90000;一个问题是如果zk 由hbase自己维护,那么该参数作为regionserver连接是一个值,如果zk在另外的集群,那么zk自己的maxSessionTimeout参数将优先于Hbase的该参数,届时可能会发生超时时间不同的问题;

  32. <property><name>hbase.coprocessor.regionserver.classes</name><value>org.apache.hadoop.hbase.security.access.AccessController</value></property>
  33. Master所使用的协处理器类名。多个类的情况下使用逗号分割。比如使用org.apache.hadoop.hbase.security.access.AccessController提供了安全管控能力。
    默认: null

  34. <property><name>hbase.hregion.memstore.mslab.enabled</name><value>true</value></property>
  35. 默认值:true
    说明:减少因内存碎片导致的Full GC,提高整体性能。

  36. <property><name>hbase.replication</name><value>false</value></property>

  37. <property><name>hbase.zookeeper.quorum</name><value>172.23.144.13:2181,172.23.144.14:2181,172.23.144.15:2181</value></property>
  38. 重要的也是必须设置的,启动zk的服务器列表,逗号分隔,cluster模式下必须设置,默认是localhost,hbase客户端也需要设置这个值去访问zk;


  39. <property><name>hbase.hregion.memstore.block.multiplier</name><value>4</value></property>
  40. 默认值2,如果memstore的内存大小已经超过了hbase.hregion.memstore.flush.size的2倍,则会阻塞memstore的写操作,直到降至该值以下,为避免发生阻塞,最好调大该值,比如:4,不可太大,如果太大,则会增大导致整个RS的memstore内存超过memstore.upperLimit限制的可能性,进而增大阻塞整个RS的写的几率。如果region发生了阻塞会导致大量的线程被阻塞在到该region上,从而其它region的线程数会下降,影响整体的RS服务能力;

  41. <property><name>hbase.superuser</name><value>hadoop</value></property>
  42. Hbase security 开启后的超级用户配置,一系列由逗号隔开的user或者group;

  43. <!--<property><name>zookeeper.znode.parent</name><value>/hbase2</value></property>-->
  44. znode存放root region的地址

  1. </configuration>
阅读全文
0 0