HBase性能调优

1、datanode的最大文件数

vi $HADOOP_HOME/conf/hdfs-site.xml

<property>

  <name>dfs.datanode.max.xcievers</name>

  <value>8192</value>

</property>

 

2、解决“打开文件过多”错误(修改的时候要视机器内存而定,ubuntu1210默认为1024,ulimit -n)

vi /etc/security/limits.conf

hadoop soft nofile 65535

hadoop hard nofile 65535

 

vi /etc/pam.d/login

session required pam_limits.so

 

3、解决“无法创建新的本地线程”错误(修改的时候要视机器内存而定,ubuntu1210默认为31916,ulimit -u)

vi /etc/security/limits.conf

hadoop soft nproc 32000

hadoop hard nproc 32000

 

vi /etc/pam.d/login

session required pam_limits.so

 

4、vi $HBASE_HOME/conf/hbase-site.xml

<property>

  <name>zookeeper.session.timeout</name>

  <value>120000</value>

</property>

 

5、修改内存交换的频率

root# sysctl -w vm.swappiness=0(重启后失效)

永久修改

root# echo “vm.smappiness = 0” >> /etc/sysctil.conf

0是不交换,可以改成10,100是最高值。

 

6、调整HBASE_HEAPSIZE大小和JVM参数主要是针对GC(好像!hbase_heapsize的大小在32位机器中限制了?)

vi $HBASE_HOME/conf/hbase-env.sh

export HBASE_HEAPSIZE=4000

export HBASE_OPTS="$HBASE_OPTS -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:$HBASE_LOG_DIR/gc-hbase.log -XX:CMSInitaltingOccupancyFraction=70"

export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -Xmx1500m -Xms1500m -XX:+UseParNewGC -XX:NewSize=100m -XX:MaxNewSize=100m -XX:ParallelGCThreads=4"

 

7、禁止自动调用主合并

vi $HBASE_HOME/conf/hbase-site.xml

<property>

  <name>hbase.hregion.majorcompaction</name>

  <value>0</value>

  或者(7天) <value>604800000</value>

  <description>主合并自动启动的时间,但主合并自动启动还有其他很多因素决定</description>

</property>

<property>

  <name>hbase.hregion.majorcompaction.jitter</name>

  <value>0.5</value>

  <description>每个regionserver的majorcompaction之间的间隔,数值越少,间隔越短</description>

 </property>

<property>

  <name>hbase.hregion.max.filesize</name>

  <value>128*1024*1024</value>

  <description>region split触发的最低阀值,也就是小于value时一定不会split,看情况而定,但建议不要太小</description>

 </property>

<property>

  <name>hbase.regionserver.handler.count</name>

  <value>20</value>

  <description>region split触发的最低阀值,也就是小于value时一定不会split,看情况而定,但建议不要太小</description>

</property>

 

8、避免更新阻塞

vi $HBASE_HOME/conf/hbase-site.xml

<property>

  <name>hbase.hregion.memstore.block.multiplier</name>

  <value>8</value>

  <description>为了防止合并/分割的时间过长而倒置内存耗尽,在某一Region的MemStore的大小达到一定阀值时,HBase会对更新进行阻塞。该阀值的定义是:hbase.hregion.memstore.flush.size * hbase.hregion.memstore.block.multiplier,对于写密集集群,阀值的默认值是128m*2,会使得阻塞经常出现,但调高也有可能增大写盘是出现合并/分割的可能性</description>

</property>

<property>

  <name>hbase.hstore.blockingStoreFiles</name>

  <value>20</value>

  <description>任何一个Store的StoreFiles数超过了上述的值(默认为7),那么该区域的更新就会被阻塞,直到合并完成或超过hbase.hstore.blockingWaitingTime(默认为90秒)所指定的时间为止。加大后副作用:每次合并会合并更多的文件,也就是合并次数少了,但一次合并的耗时就大了</description> 

</property>

 

9、调节MemStore内存大小

调高下面两个值有助于减少更新因MemStore大小限制而被阻塞的机会,并保证MemStore和块缓存加在一起消耗最多70%的RegionServer的堆空间

vi $HBASE_HOME/conf/hbase-site.xml

<property>

  <name>hbase.regionserver.global.memstore.upperLimit</name>

  <value>0.55</value>

  <description>控制一台RegionServer中所有MemStore的总大小的最大值,超过该值后,新的更新会被阻塞,并且强行写盘</description> 

</property>

<property>

  <name>hbase.regionserver.global.memstore.lowerLimit</name>

  <value>0.45</value>

  <description>系统一直写盘,直到MemStore所占用的总内存大小低于该属性的值为止</description> 

</property>

<property>

  <name>hbase.block.cache.size</name>

  <value>0.15</value>

  <description>RegionServer堆空间最大值的百分之多少分配给块缓存,写密集则少,读密集则应该大</description> 

</property>

posted on 2013-08-28 14:50  DeeFOX  阅读(1427)  评论(0编辑  收藏  举报

导航