1、HMaster
          HMaster的任务前面已经说过了,两个大方向:一、管理Hbase Table的 DDL操作 二、region的分配工作,任务不是很艰巨,但是如果采用默认自动split region的方式,     HMaster会稍微忙一些,负载不大,可适度对此进程做适量放大heap 的操作,但不可太大,因为更耗内存的是HRegionServer
     2、HRegionServer
          这个进程是HBase中的核心守护进程,原则上是每个slave启动一个HRegionServer,但多种情况可能导致HRegionServer 意外退出,下面举几个简单的方面:
    • 网络不好,导致RegionServer 和 HMaster通信超时,RegionServer被认为已经挂掉,从而退出集群 --网络问题,无法从软件方面解决,关于通信超时的设置下面做个简单介绍
    • Java full GC ,这个过程会block所有的线程,如果此事件过长,导致Session expired 会话过期,导致退出集群--下文会阐述
    • 各节点时间不一致,导致RegionServer 退出。-- hbase.master.maxclockskew 增大容忍度,默认是30s,但不要太大,毕竟时间不一致是不正常现象,可将所有节点和同一服务器时间做同步,也可以和时间服务器同步。
          第一种情况 和其它原因导致的RegionServer 超时挂掉的问题,我们要首先要调高Session的容忍度,默认180000其实这个回话有效期已经够长的了,但是有的集群是可以
   降低了这个值,可能会造成Session 超时,这个参数是 zookeeper.session.timeout 默认18000。
          针对上面这个参数,有的博文认为即使设为180000也不能真正的达到目的,因为zookeeper 会将minSessionTimeout 设为 2*ticktimes ,而将maxSessionTimeout 设为
   20*ticktimes 当 zookeeper.session.timeout 设置超过20*ticktimes 的时候,系统会取 min(zookeeper.session.timeout,20*ticktimes) 来出来。
          针对上述观点,我从源码中找到了结论,首先如果是分布式的Hbase那 会启动HQuorumPeer 进程 看下这个源码:
    • HQuorumPeer.main 方法中会调用 writeMyID(zkProperties) ,而就在此方法中已经将 maxSessionTimeout设置为 zookeeper.session.timeout 的时长。
    • 调用HQuorunPeer.runZKServer
    • 调用QuorumPeerMain.runFromConfig
    • 设置quorumPeer.setMaxSessionTimeout(config.getMaxSessionTimeout());
    • 由此可看此件并没有直接和tickTime对比的机会。倒是minSessionTimeout没有设置,默认是2*ticktime
          由此可见 其实如果设置了Zookeeper.session.timeout的话 不会轻易去截取20*ticktime,再不信可以用echo conf|nc zserver 2181 看一下 zookeeper系统参数
          第二种情况是要讨论的,导致产生这个问题的主要原因是很多,产生的情景很多,比如在做 major compact的过程中,时间过长,导致Full GC等,那就尽量去减少这种情
   况的发生。二个方面
    • 适度增大守护进程的HeapSize
    • 调整内存回收参数
          第一个方面:Hbase 默认各守护进程为1G  在hbase-env.sh中有配置 export HBASE_HEAPSIZE=1000,当我们启动hbase各守护进程的时候,那所有的hbase守护进程都
     将是1000的heapsize,对于有的进程,够用,但有些进程取远远不够,我们可以考虑增大此参数,比如export HBASE-HEAPSIZE=6000 那就把守护进程的heap 内存调大到
     6G,但是这样会有问题,有些进程不需要这么多,虽然设置的比较大不影响内存的实际占用,但却混淆了对各进程内存占用的认识。所以上述参数不做改变,在下面的参数中
     修改守护进程Heap 内存。
    • export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS $HBASE_JMX_BASE -Xmx2000m -Xms2000m -Xmn750m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitatingOccupancyFraction=70"
    • export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS $HBASE_JMX_BASE -Xmx6000m -Xms6000m -Xmn2250m -XX:+UseParNewGC
                    -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70"
    • export HBASE_THRIFT_OPTS="$HBASE_THRIFT_OPTS $HBASE_JMX_BASE -Xms100m -Xmx2000m"
    • export HBASE_ZOOKEEPER_OPTS="$HBASE_ZOOKEEPER_OPTS $HBASE_JMX_BASE -Xms100m -Xmx2000m"
            我们分别对各守护进程设置堆内存 其中-Xmx 表示最大可用内存,-Xms表示出事分配内存 -Xmn 表示 年轻代堆内存分配,这个值网上有的建议按照3/3 总heapsize来设
     置,因为是经验值,暂无法考证合理性,更多详细的堆内存分配参数,本地不做过多阐述,后面有机会可做一个单元来解释。那其它参数是什么意思呢?
     -XX:+UseParNewGC 等,这就到了我们说的第二个方面:
            第二个方面:调整内存回收参数,比如-XX:+UseParNewGC 表示年轻带内存回收策略采用并发收集,此参数在JDK5.0已经自动配置,不需再手动配置;
     -XX:+UseConcMarkSweepGC 表示年老代并发收集;
     -XX:+CMSInitatingOccupancyFraction 表示年老代内存占用超过此比例即开始做CMS,这个参数很重要在JDK 5.0以后此值默认是90 也就是当年老代对内存占用90%以上时,
     才开始做内存收集,而此时剩余的10%依然接受从年轻代迁移过来的对象,迁移过快,导致年老代heap 100%时,Full GC 即开始,才是会暂停所有的任务,直至Full GC 完
     成,此时是造成RegionServer 意外退出的元凶,那为了安全起见,在调大堆内存的情况下 蒋此值降低到一个较低的阀值,减少Full GC的产生,那我建议此值设70%。
          3、HQuorumPeer 
               此守护集成是Zookeeper的守护进程,因为我们用的是Hbase内置的ZooKeeper 所以此进程启动过程中,会读取hbase-env.sh 所以守护进程对内存和 HBASE-HEAPSIZE
     的一致,所以也应在hbase-env.sh中合理设置,见HRegionServer 小节中的参数设置方法。
          4、ThriftServer
               同上

HBase 学习笔记---守护进程及内存调优的更多相关文章

  1. JVM学习笔记(四)------内存调优【转】

    转自:http://blog.csdn.net/cutesource/article/details/5907418 版权声明:本文为博主原创文章,未经博主允许不得转载. 首先需要注意的是在对JVM内 ...

  2. JVM学习笔记(四)------内存调优

    首先需要注意的是在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提 ...

  3. python学习笔记——守护进程

    1 基本描述 守护进程:是系统中独立的后台服务进程, 特点:独立与终端并且周期性地执行某个任务,其生命周期长,一般随系统启动和终止. 缺点:进程的创建和销毁的时候需要消耗较多的计算机资源. 2 参考 ...

  4. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

  5. Linux内核学习笔记-2.进程管理

    原创文章,转载请注明:Linux内核学习笔记-2.进程管理) By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...

  6. Linux内核学习笔记二——进程

    Linux内核学习笔记二——进程   一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器 ...

  7. Linux学习笔记(六) 进程管理

    1.进程基础 当输入一个命令时,shell 会同时启动一个进程,这种任务与进程分离的方式是 Linux 系统上重要的概念 每个执行的任务都称为进程,在每个进程启动时,系统都会给它指定一个唯一的 ID, ...

  8. HBase学习笔记之HBase的安装和配置

    HBase学习笔记之HBase的安装和配置 我是为了调研和验证hbase的bulkload功能,才安装hbase,学习hbase的.为了快速的验证bulkload功能,我安装了一个节点的hadoop集 ...

  9. JUC学习笔记——共享模型之内存

    JUC学习笔记--共享模型之内存 在本系列内容中我们会对JUC做一个系统的学习,本片将会介绍JUC的内存部分 我们会分为以下几部分进行介绍: Java内存模型 可见性 模式之两阶段终止 模式之Balk ...

随机推荐

  1. nutch 生产者队列的大小如何控制 threadcount * 50

    如果topN 设置为1000万 ,不会这1000万都放到QueueFeeder(内存)中,而是从文件系统中(hdfs)中迭代不断填充QueueFeeder.队列中默认存放 threadcount * ...

  2. 严重: The web application [] registered the JDBC driver 错误

    近日发现启动tomcat的时候报如下警告: -- :: org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc 严重: The ...

  3. JavaScript注入漏洞的原理及防范

    初次接触: 初次接触JavaScript注入漏洞后,如果不对这种漏洞的作用机理仔细分析并提取出其发生的某种模式,你就不能做到快速的发现项目中可能存在的所有注入风险并在代码中防范. 发生模式: Java ...

  4. Codeforces Round #215 (Div. 1)

    A Sereja and Algorithm 题意:给定有x,y,z组成的字符串,每次询问某一段s[l, r]能否变成变成zyxzyx的循环体. 分析: 分析每一段x,y,z数目是否满足构成循环体,当 ...

  5. ANDROID_MARS学习笔记_S02_008_ANIMATION第二种使用方式:xml

    一.简介 二.代码1.res\anim下的xml(1)alpha.xml.xml <?xml version="1.0" encoding="utf-8" ...

  6. 【大话QT之十】实现FTP断点续传(需要设置ftp服务器为“PASV”被动接收方式)

    应用需求: 网盘开发工作逐步进入各部分的整合阶段,当用户在客户端修改或新增加一个文件时,该文件要同步上传到服务器端对应的用户目录下,因此针对数据传输(即:上传.下载)这一块现在既定了三种传输方式,即: ...

  7. vi编辑器的三种模式

    1.命令模式(command mode)—执行命令 在该模式中,可以输入命令来执行许多种功能.控制屏幕光标的移动,字符.字或行的删除,移动复制某区段及进入Insert mode下,或者到 last l ...

  8. Oracle系列之函数

    涉及到表的处理请参看原表结构与数据  Oracle建表插数据等等 如何调用该过程 call function_name(参数值1,参数值2); 创建function来查询某个雇员的工资 create ...

  9. 利用switch case判断是今天的第多少天

    static void Main(string[] args)        {            while (true)            {                int m1 ...

  10. Reflector+Reflexil 相结合实现对DLL文件修改

    在工作过程中,我们有可能遇到这样的问题:公司发给客户的软件包突然报错了,但是你知道哪里报错了,而这个代码已经编译成DLL文件了,源代码不在自己这里.怎么办呢?还好现在有Reflexil插件,这个插件只 ...