HBase集群启动脚本流程分析

本文详细分析了HBase集群的启动流程,从start-hbase.sh开始,涉及hbase-config.sh、hbase-env.sh、hbase-daemons.sh等脚本的作用。在分布式模式下,HBase会启动Zookeeper、Master、RegionServer等进程。hbase-daemon.sh是关键脚本,负责启动前的环境清理、日志滚动及进程启动。通过对启动流程的理解,有助于更好地管理和维护HBase集群。
摘要由CSDN通过智能技术生成

在安装HBase的时候需要配置一些参数,这些参数在HBase启动的时候发挥着怎样的作用,如何影响的HBase的运行,出现启动错误时如何快速定位错误的位置。在解决这些问题之前,先从源码的角度分析一下HBase的启动流程,了解HBase是怎么启动的。

启动流程概述

启动HBase会执行start-hbase.sh,然后脚本会先执行hbase-config.sh,做一系列的配置设置,包括常用路径、regionservers和backup-masters列表、常用端口等。在hbase-config.sh中会执行hbase-env.sh,主要对JAVA的环境参数、ssh,、pid路径等进行配置。start-hbase.sh最后会根据hbase.cluster.distributed来确定启动模式,分为本地和分布式。
分布式启动HBase,使用hbase-daemons.sh逐步启动zookeeper、master、regionserver、master-backup。具体会调用相关的脚本(如zookeeper会调用zookeerper.sh)来进行环境的配置和登录到相关的机器节点上执行hbase-daemon.sh。
hbase-daemon.sh的职责就是启动各个进程,在启动过程中会先做进程判断,日志滚动等准备,最后执行启动命名,逐步的启动各个节点上的进程。在启动过程中,会在屏幕中打印启动信息。
执行流程图:
这里写图片描述

具体启动流程

接下来分析每一步的源码,了解整个执行的过程。

start-hbase.sh

作为HBase启动的入口,在执行hbase-config.sh设置完运行的环境变量后,会执行命令,获取hbase.cluster.distributed的值来确定HBase的启动模式。

distMode=`$bin/hbase --config "$HBASE_CONF_DIR" org.apache.hadoop.hbase.util.HBaseConfTool hbase.cluster.distributed | head -n 1`

具体的代码实现:

hbase.cluster.distributed在hbase-site.xml中进行配置,默认值为false。false将启动standalone模式,true将启动distributed模式,在配置分布式的时候需要改成true。

if [ "$distMode" == 'false' ] 
then
  "$bin"/hbase-daemon.sh --config "${HBASE_CONF_DIR}" $commandToRun master $@
else
  "$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" $commandToRun zookeeper
  "$bin"/hbase-daemon.sh --config "${HBASE_CONF_DIR}" $commandToRun master 
  "$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" \
    --hosts "${HBASE_REGIONSERVERS}" $commandToRun regionserver
  "$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" \
    --hosts "${HBASE_BACKUP_MASTERS}" $commandToRun master-backup
fi

standalone模式将会在一个JVM中运行所有的HBase和zookeeper。distributed模式会逐渐启动zookeeper、master、regionserver、master-backup等进程和节点。在启动节点时,$commandToRun有两种选择,可以是start(默认),还可以是autorestart。

hbase-config.sh

由于启动的脚本如hbase-daemon.sh,zookeerper.sh等都不是在一台机器上运行,因此每个脚本在执行前都会先执行一下hbase-config.sh来配置运行时的环境变量。
在hbase-config.sh中首先会检查hbase-config.sh是否是一个软连接,找到hbase-config.sh的真实路径。然后设置HBASE_HOME,判断是否指定了hbase的配置文件路径,如果没有将采用默认的配置文件路径。
脚本会设置一些默认的参数,包括HBASE_CONF_DIR、HBASE_REGIONSERVERS、HBASE_BACKUP_MASTERS、HBASE_THRIFT_JMX_OPTS等,然后执行hbase-env.sh配置HBase的AVA的运行环境和ssh参数等。程序会判断是否设置HBASE_REGIONSERVER_MLOCK为true,这个主要是判断系统是否使用了mlock来锁住内存,防止这段内存被操作系统swap掉。这将阻止Linux 将这个内存页调度到交换空间(swap space),即使该程序已有一段时间没有访问这段空间。最后如果检测到了JAVA_HOME后,程序将会继续运行。

hbase-env.sh

hbase-env.sh中设置了HBase运行中的一些重要的JVM参数,后续在进行HBase调优时会用到这些参数。除此之外还有一些进程优先级,SSH参数等。主要参数如下:
1、JAVA_HOME
JAVA的JDK路径,需要java 1.7以上
2、HBASE_HEAPSIZE
堆的最大使用量。默认情况下是JVM默认值
3、HBASE_OFFHEAPSIZE
如果打算使用堆缓存,可以设置该值。例如,要分配8G的offheap,将值设置为“8G”。
4、HBASE_OPTS
默认为”-XX:+UseConcMarkSweepGC”
使用CMS收集器对年老代进行垃圾收集,CMS收集器通过多线程并发进行垃圾回收,尽量减少垃圾收集造成的停顿。
5、PermSize设置非堆内存初始值
仅仅是JDK7需要配置,JDK8+后就不需要
6、HBASE_MASTER_OPTS、HBASE_REGIONSERVER_OPTS
配置非堆内存,初始分配的堆内存,大允许分配的堆内存,按需分配
7、java回收机制,分别配置sever和client端
HBase会在启动的时候讲Java的一些配置打印到.out日志中

SERVER_GC_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
SERVER_GC_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:<FILE-PATH&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值