Java_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>
=========================================================================
hbase.tmp.dir
- 本地文件系统tmp目录,一般配置成local模式的设置一下,但是最好还是需要设置一下,因为很多文件都会默认设置成它下面的
- 线上配置
<
property
>
<
name
>hbase.tmp.dir</
name
>
<
value
>/mnt/dfs/11/hbase/hbase-tmp</
value
>
</
property
>
- 默认值:
${java.io.tmpdir}/hbase-${user.name}
写到系统的/tmp目录
hbase.rootdir
- HBase集群中所有RegionServer共享目录,用来持久化HBase的数据,一般设置的是hdfs的文件目录,如hdfs://namenode.example.org:9000/hbase
- 线上配置
<
property
>
<
name
>hbase.rootdir</
name
>
<
value
>hdfs://mycluster/hbase</
value
>
</
property
>
- 默认值:
${hbase.tmp.dir}/hbase
hbase.cluster.distributed
- 集群的模式,分布式还是单机模式,如果设置成false的话,HBase进程和Zookeeper进程在同一个JVM进程。
- 线上配置为true
- 默认值:false
hbase.zookeeper.quorum
- zookeeper集群的URL配置,多个host中间用逗号(,)分割
- 线上配置
<
property
>
<
name
>hbase.zookeeper.quorum</
name
> <
value
>inspurXXX.xxx.xxx.org,inspurXXX.xxx.xxx.org,inspurXXX.xxx.xxx.org,inspurXXX.xxx.xxx.org,inspurXXX.xxx.xxx.org</
value
>
</
property
>
- 默认值:localhost
hbase.zookeeper.property.dataDir
- ZooKeeper的zoo.conf中的配置。 快照的存储位置
- 线上配置:/home/hadoop/zookeeperData
- 默认值:${hbase.tmp.dir}/zookeeper
zookeeper.session.timeout
- 客户端与zk连接超时时间
- 线上配置:1200000(20min)
- 默认值:180000(3min)
hbase.zookeeper.property.tickTime
- Client端与zk发送心跳的时间间隔
- 线上配置:6000(6s)
- 默认值:6000
hbase.security.authentication
- HBase集群安全认证机制,目前的版本只支持kerberos安全认证。
- 线上配置:kerberos
- 默认值:空
hbase.security.authorization
- HBase是否开启安全授权机制
- 线上配置: true
- 默认值: false
hbase.regionserver.kerberos.principal
- regionserver的kerberos认证的主体名称(由三部分组成:服务或用户名称、实例名称以及域名)
- 线上配置:hbase/_HOST@HADOOP.xxx.xxx.COM
- 默认:无
hbase.regionserver.keytab.file
- regionserver keytab文件路径
- 线上配置:/home/hadoop/etc/conf/hbase.keytab
- 默认值:无
hbase.master.kerberos.principal
- master的kerberos认证的主体名称(由三部分组成:服务或用户名称、实例名称以及域名)
- 线上配置:hbase/_HOST@HADOOP.xxx.xxx.COM
- 默认:无
hbase.master.keytab.file
- master keytab文件路径
- 线上配置:/home/hadoop/etc/conf/hbase.keytab
- 默认值:无
hbase.regionserver.handler.count
- regionserver处理IO请求的线程数
- 线上配置:50
- 默认配置:10
hbase.regionserver.global.memstore.upperLimit
- RegionServer进程block进行flush触发条件:该节点上所有region的memstore之和达到upperLimit*heapsize
- 线上配置:0.45
- 默认配置:0.4
hbase.regionserver.global.memstore.lowerLimit
- RegionServer进程触发flush的一个条件:该节点上所有region的memstore之和达到lowerLimit*heapsize
- 线上配置:0.4
- 默认配置:0.35
hbase.client.write.buffer
- 客户端写buffer,设置autoFlush为false时,当客户端写满buffer才flush
- 线上配置:8388608(8M)
- 默认配置:2097152(2M)
hbase.hregion.max.filesize
- 单个ColumnFamily的region大小,若按照ConstantSizeRegionSplitPolicy策略,超过设置的该值则自动split
- 线上配置:107374182400(100G)
- 默认配置:21474836480(20G)
hbase.hregion.memstore.block.multiplier
- 超过memstore大小的倍数达到该值则block所有写入请求,自我保护
- 线上配置:8(内存够大可以适当调大一些,出现这种情况需要客户端做调整)
- 默认配置:2
hbase.hregion.memstore.flush.size
- memstore大小,当达到该值则会flush到外存设备
- 线上配置:104857600(100M)
- 默认值: 134217728(128M)
hbase.hregion.memstore.mslab.enabled
- 是否开启mslab方案,减少因内存碎片导致的Full GC,提高整体性能
- 线上配置:true
- 默认配置: true
hbase.regionserver.maxlogs
- regionserver的hlog数量
- 线上配置:128
- 默认配置:32
hbase.regionserver.hlog.blocksize
- hlog大小上限,达到该值则block,进行roll掉
- 线上配置:536870912(512M)
- 默认配置:hdfs配置的block大小
hbase.hstore.compaction.min
- 进入minor compact队列的storefiles最小个数
- 线上配置:10
- 默认配置:3
hbase.hstore.compaction.max
- 单次minor compact最多的文件个数
- 线上配置:30
- 默认配置:10
hbase.hstore.blockingStoreFiles
- 当某一个region的storefile个数达到该值则block写入,等待compact
- 线上配置:100(生产环境可以设置得很大)
- 默认配置: 7
hbase.hstore.blockingWaitTime
- block的等待时间
- 线上配置:90000(90s)
- 默认配置:90000(90s)
hbase.hregion.majorcompaction
- 触发major compact的周期
- 线上配置:0(关掉major compact)
- 默认配置:86400000(1d)
hbase.regionserver.thread.compaction.large
- large compact线程池的线程个数
- 线上配置:5
- 默认配置:1
hbase.regionserver.thread.compaction.small
- small compact线程池的线程个数
- 线上配置:5
- 默认配置:1
hbase.regionserver.thread.compaction.throttle
- compact(major和minor)请求进入large和small compact线程池的临界点
- 线上配置:10737418240(10G)
- 默认配置:2 * this.minFilesToCompact * this.region.memstoreFlushSize
hbase.hstore.compaction.max.size
- minor compact队列中storefile文件最大size
- 线上配置:21474836480(20G)
- 默认配置:Long.MAX_VALUE
hbase.rpc.timeout
- RPC请求timeout时间
- 线上配置:300000(5min)
- 默认配置:60000(10s)
hbase.regionserver.region.split.policy
- split操作默认的策略
- 线上配置: org.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy(采取老的策略,自己控制split)
- 默认配置: org.apache.hadoop.hbase.regionserver.IncreasingToUpperBoundRegionSplitPolicy(在region没有达到maxFileSize的前提下,如果fileSize达到regionCount * regionCount * flushSize则进行split操作)
hbase.regionserver.regionSplitLimit
- 单台RegionServer上region数上限
- 线上配置:150
- 默认配置:2147483647
hbase-env.sh配置
指定系统运行环境
export JAVA_HOME= /usr/lib/jvm/java-6-sun/ #JDK HOME export HBASE_HOME= /home/hadoop/cdh4/hbase-0 .94.2-cdh4.2.1 # HBase 安装目录 export HBASE_LOG_DIR= /mnt/dfs/11/hbase/hbase-logs #日志输出路径 |
JVM参数调优
export HBASE_OPTS="-verbose:gc -XX:+PrintGCDetails -Xloggc:${HBASE_LOG_DIR} /hbase-gc .log -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime \ -server -Xmx20480m -Xms20480m -Xmn10240m -Xss256k -XX:SurvivorRatio=4 -XX:MaxPermSize=256m -XX:MaxTenuringThreshold=15 \ -XX:ParallelGCThreads=16 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection \ -XX:+CMSClassUnloadingEnabled -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSMaxAbortablePrecleanTime=5000 \ " |
Java_Hbase优化的更多相关文章
- 关于DOM的操作以及性能优化问题-重绘重排
写在前面: 大家都知道DOM的操作很昂贵. 然后贵在什么地方呢? 一.访问DOM元素 二.修改DOM引起的重绘重排 一.访问DOM 像书上的比喻:把DOM和JavaScript(这里指ECMScri ...
- In-Memory:内存优化表的事务处理
内存优化表(Memory-Optimized Table,简称MOT)使用乐观策略(optimistic approach)实现事务的并发控制,在读取MOT时,使用多行版本化(Multi-Row ve ...
- 试试SQLSERVER2014的内存优化表
试试SQLSERVER2014的内存优化表 SQL Server 2014中的内存引擎(代号为Hekaton)将OLTP提升到了新的高度. 现在,存储引擎已整合进当前的数据库管理系统,而使用先进内存技 ...
- 01.SQLServer性能优化之----强大的文件组----分盘存储
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 文章内容皆自己的理解,如有不足之处欢迎指正~谢谢 前天有学弟问逆天:“逆天,有没有一种方 ...
- 03.SQLServer性能优化之---存储优化系列
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 概 述:http://www.cnblogs.com/dunitian/p/60413 ...
- 前端网络、JavaScript优化以及开发小技巧
一.网络优化 YSlow有23条规则,中文可以参考这里.这几十条规则最主要是在做消除或减少不必要的网络延迟,将需要传输的数据压缩至最少. 1)合并压缩CSS.JavaScript.图片,静态资源CDN ...
- 数据库优化案例——————某市中心医院HIS系统
记得在自己学习数据库知识的时候特别喜欢看案例,因为优化的手段是容易掌握的,但是整体的优化思想是很难学会的.这也是为什么自己特别喜欢看案例,今天也开始分享自己做的优化案例. 最近一直很忙,博客产出也少的 ...
- 【前端性能】高性能滚动 scroll 及页面渲染优化
最近在研究页面渲染及web动画的性能问题,以及拜读<CSS SECRET>(CSS揭秘)这本大作. 本文主要想谈谈页面优化之滚动优化. 主要内容包括了为何需要优化滚动事件,滚动与页面渲染的 ...
- Web性能优化:What? Why? How?
为什么要提升web性能? Web性能黄金准则:只有10%~20%的最终用户响应时间花在了下载html文档上,其余的80%~90%时间花在了下载页面组件上. web性能对于用户体验有及其重要的影响,根据 ...
随机推荐
- Java执行groovy脚本
Binding binding = new Binding(); binding.setVariable("foo", new Integer(2)); GroovyShell s ...
- ruby 安装更新
wget http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.2.tar.gz tar xfvz ruby-2.2.2.tar.gz cd ruby-2. ...
- Shell脚本文件中常用的操作语句
1. 清空文件中的内容 cat /dev/null >> /var/log/messages 2. 脚本中判断用户是不是root用户 ROOT_UID = 0 # ...
- Spark shell的原理
Spark shell是一个特别适合快速开发Spark原型程序的工具,可以帮助我们熟悉Scala语言.即使你对Scala不熟悉,仍然可以使用这个工具.Spark shell使得用户可以和Spark集群 ...
- SFTPTool 和 FTPTooL.java
两个工具类依赖的jar包: FTPTool.java public static void main(String[] args) throws Exception{ FTPTooL ftpTool ...
- TcxDBVerticalGrid优秀的编辑控件
- POJ 2342 Anniversary party (树dp)
题目链接:http://poj.org/problem?id=2342 有n个人,每个人有活跃值.下面n-1行u和v表示u的上司是v,有直接上司和下属的关系不能同时参加party,问你party最大的 ...
- Linux syslog 学习
最经有在看lighttpd facgi相关的东西.在lighttpd官网上看到如下sample code. #include <stdlib.h> #include <string. ...
- PL/SQL devloper 常用设置
1)代码自动完成 Tools->Preferences->User Interface->Key Configuration. 找到Tools/Code Assistant,修改为自 ...
- [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server 不存在或访问被拒绝
一般连接sql数据库,IP_connstr="driver={SQL Server}; server=127.0.0.1;database=数据库名字;uid=sa;pwd=密码" ...