Hbase 集群启动脚本分析

来源:互联网 发布:韩版衣服淘宝装修 编辑:程序博客网 时间:2024/04/28 08:32

说明

本文主要分析一下Hbase集群启动过程,只涉及到核心过程,不涉及到具体内容,hbase的版本是hbase-0.94.27.tar

整体流程:

  1. 运行start-hbase.sh脚本
  2. 执行 $bin/hbase-config.sh 设置配置参数
  3. 根据集群启动是否是分布式的模式,在本地仅启动master或者启动整个集群
  4. 判断启动模式:重新启动集群(restart)or初次启动集群(start)(缺省:start)
  5. 如果是分布式模式,依次启动如下服务:
    启动zookeeper org.apache.hadoop.hbase.zookeeper.HQuorumPeer(这种情况是使用HBase自身管理Zookeeper)
    启动master org.apache.hadoop.hbase.master.HMaster
    启动${HBASE_REGIONSERVERS}目录中指定的regionserver org.apache.hbase.regionserver.HRegionServer
    启动${HBASE_BACKUP_MASTERS}中指定的master-backup
  6. 启动5中的服务会调用hbase-daemons.sh脚本,而该脚本最终调用hbase脚本启动服务对应的进程

start-hbase.sh脚本

  1. 执行hbase-config.sh脚本,设置环境变量
    这里写图片描述
  2. 判断集群启动的模式,autorestart 或者start[默认]
    这里写图片描述
  3. 判断分布模式
    这里写图片描述
  4. 根据不同的分布模式,启动不同的服务;如果不是分布式模型,仅仅启动master服务,否则启动所有服务
    这里写图片描述
    由上可见,在启动服务的时候,调用的是hbase-daemons.sh和hbase-daemon.sh脚本完成的,首先看一下hbase-daemon.sh脚本

hbase-daemon.sh

  1. 该脚本的用法如下:
    这里写图片描述
    可以看出,command命令必须制定,以start-hbase.sh脚本中启动master为例
    hbase-daemon –config ${HBASE_CONFI_DIR} start master
    这里的command 就是start;而参数args就是master
  2. 执行$bin/hbase-config.sh和$bin/hbase-common.sh设置环境变量
  3. 设置调度的优先级
  4. 判断$startStop=$1的类型,做相应的操作,这里以start命令为例跟踪进去
    这里写图片描述
    在start的时候,首先做预处理操作,然后打印启动状态信息,然后使用nohup后台启动命令
    注意:在使用nohup启动的时候,命令再次运行了该脚本内容,只是这次将startStop的状态设置为 foreground_start,于是根据到case foreground_start选项中:
    这里写图片描述
    从红框中的源代码内容可以看到,最终的启动脚本都是调用/bin/hbase 命令来启动的

接下来分析下hbase-daemons.sh脚本的启动过程:

hbase-daemons.sh

  1. 执行$bin/hbase-config.sh 设置环境变量
  2. 执行在多个节点上批量启动服务的命令
    这里写图片描述
    从源代码中可以看出,该脚本最终调用hbase-daemon.sh脚本启动,实现批量在多个节点上启动服务
    hbase-daemon.sh脚本内容已经分析过,且知道,最用调用hbase的守护进程启动各个服务,下面来分析下hbase守护进程

hbase

  1. 运行$bin/hbase-config.sh,设置环境变量信息

  2. 判断是否运行在cygwin环境中 这里写图片描述

  3. 判断输入参数个数,如果为0,则给出使用说明帮助
    这里写图片描述

  4. 取出命令名称这里写图片描述,并设置或者重写重要的环境参数

  5. 根据命令参数,找到要运行的类,以启动master为例
    这里写图片描述

  6. 运行指定的类
    这里写图片描述

ZooKeeper

zookeeper中的QuorumPeer的HBase版本,实现HBase自己管理zookeeper相关的功能
需要ZKConfig类来解析zoo.cfg文件中的配置
启动过程:
1. 解析Zookeeper的配置
2. 运行zkServer(zkConfig)
 2.1如果zkConfig是分布式的,则运行QuorumPeerMain
  2.1.1 首先实例化一个QuorumPeerMain对象,并调用initializeAndRun()
  2.1.2 解析配置参数
  2.1.3 清理数据目录
  2.1.4 实例化QuorumPeer()并启动(如果是Standlone模式也会运行ZooKeeperServerMain)
   2.2否则运行ZooKeeperServerMain

HMaster

  1. 实例化了一个HMasterCommandLine对象,启动一个新的进程,调用startMaster()方法
  2. 如果是local模式,则转向LocalHBaseCluster,在同一个JVM里同时启动master和regionserver
  3. 否则仅仅启动master
0 0
原创粉丝点击