• 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>

  • 相关阅读:
    【算法】欧几里德算法--求最大公约数
    g++编译器的使用
    How arduino IDE works?
    【算法】反转链表
    判断一个数是否含有相同的数字
    Java集合ArrayList源码解读
    【算法】二分查找
    移动架构-原型模式
    移动架构-单例模式
    移动架构-简单工厂模式
  • 原文地址:https://www.cnblogs.com/DeeFOX/p/3287187.html
Copyright © 2020-2023  润新知