内容简介:本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。版权声明:禁止转载,欢迎学习。QQ邮箱地址:1120746959@qq.com,如有任何学术交流,可随时联系。HBase中Master的角色被弱化了,就算短时间待机都不会受影响,但不能宕机时间太久,数据的读取和写入都跟他没有什么关系。那么Master主要负责什么呢?创建表,修改列族配置,Region的分割和合并操作。HBase所有数据的写入操作第
本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。版权声明:禁止转载,欢迎学习。QQ邮箱地址:1120746959@qq.com,如有任何学术交流,可随时联系。
1 弱化的Master
HBase中Master的角色被弱化了,就算短时间待机都不会受影响,但不能宕机时间太久,数据的读取和写入都跟他没有什么关系。那么Master主要负责什么呢?创建表,修改列族配置,Region的分割和合并操作。
2 干保险业的WAL
HBase所有数据的写入操作第一步先二话不说写进WAL中,然后进一步写进MemStore中。等到MemStore的数据达到一定的数量时才刷写到最终存储的HFile中。如果在刷写的时候宕机或者断电了,干保险业的WAl就会起到数据恢复的作用。为什么呢?因为WAL是放在HDFS上的,宕机是不影响WAL文件的。
3 MemStore 真的是加速机吗?
注意数据写入到MemStore之前,是要先要写入到WAL的,所以增加MemStore并不能加快写入速度,MemStore最大的意义,在于维持数据按照rowkey的顺序排列,进而数据在MemStore中被整理成LSM树,最后再刷写到HFile上。
4 Store 和 Column Family的关系
在一个RegionServer中,会有多个Region,而在每一个Region中,会根据 Column Family生成多个Store。注意一个Store又会对应一个MemStore。而一个RegionServer对应一个全局的BlockCache。
5 Minor compact 和 Major Compact
-
Minor compact :可以用于把多个HFile文件进行合并,同时可以删除TTL过期的数据,但是手动删除数据操作是不能被删除的。为什么这里可以删除TTL过期的数据?因为MemStore在LSM整理时,对于TTL过期只要不写入HFile文件就算是删除了,而对于手动删除数据操作则可能位于不同的HFile文件中,因此做不到删除。
-
Major Compact:是把一个Store中的HFile文件合并为一个HFile文件,而不是把一个Region内的所有HFile文件,因为一个Region可能有多个Collumn Family对应的Store。
6 RegioneServer的JVM参数调优
-
编辑hbase-env . sh,调整HBASE_HEAPSIZE大小,默认是1G,而MemStore则占用40%,也就是400M。显然是不够的。因此需要根据需要设置,比如:
export HBASE_HEAPSIZE =8G 复制代码
-
PermSize的调整:
(1) HBASE_MASTER_OPTS
export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -Xmx4g -Xms4g" 复制代码
(2) HBASE_REGIONSERVER_OPTS
export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -Xms8g -Xmx8g" 复制代码
注意永远至少留10%的内存给操作系统。
-
举例如下:一台16GB的机器,上面有MapReduce服务,RegionServer 和 DataNode
分配策略如下:
- 系统进程:2G
- MapReduce:8GB
- RegionServer服务:4GB
- TaskTracker:1GB
- DataNode:1GB
7 朱丽叶暂停FULL GC
-
原因主要是Zookeeper惹的祸,在RegionerServer发生FULL GC的时候,STW期间太长,被ZK标记为宕机,当RegionerServer GC完成后,苏醒了发现被标记为宕机了,这时候RegionerServer GC就自杀,防止脑裂发生。醒来再自杀,朱丽叶暂停,哈哈!
-
JVM提供4种GC方案
-
如果你的RegionServer内存大于32GB,建议使用G1GC策略,因为G1Gc会把堆内存划分为多个Region,然后对各个Region单独进行GC,这样整体的Full GC 可以被最大限度地避免。另外通过设置MaxGCPauseMillis最大暂停时间,避免时间太长RegionServer自杀。
export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -Xms8g -Xmx8g -XX:+UseG1GC -XX:+MaxGCPauseMillis=100" 复制代码
-
如果你的RegionServer内存小于4GB,就不需要考虑G1GC策略了,直接使用
-XX:+UseParNewGC (年轻代使用) -XX:+UseConcMarkSweepGC(年老代使用) export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -Xms8g -Xmx8g -XX:+UseParNewGC -XX:+UseConcMarkSweepGC " 复制代码
-
8 Justin Kestelyn 测试调优论文
- 32GB heap : -XX:G1NewSizePercent=3 设置要用作年轻代大小最小值的堆百分比。默认值是 Java 堆的 5%。这是一个实验性的标志
- 64GB heap: -XX:G1NewSizePercent=2
- 100GB 或者更大的heap时,-XX:G1NewSizePercent=1
9 总结
网上的Hbase调优资料参差不齐,实在是不忍卒读,有些都是拼凑且版本过时的东西,我这里决定综合所有优质资源进行整合,写一份最全,最有深度,不过时的技术博客。辛苦成文,各自珍惜,谢谢!
本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。版权声明:禁止转载,欢迎学习。QQ邮箱地址:1120746959@qq.com,如有任何学术交流,可随时联系。
秦凯新 于深圳 20182309
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Kernel Hack实战:修改并编译手机内核源码对抗反调试
- 内核必须懂(六): 使用kgdb调试内核
- Linux内核如何替换内核函数并调用原始函数
- Linux内核工程师是怎么步入内核殿堂的?
- Linux内核工程师是怎么步入内核殿堂的?
- 面试官:说说操作系统微内核和 Dubbo 微内核?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。