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>