HBase配置&启动脚本分析
本文档基于hbase-0.96.1.1-cdh5.0.2,对HBase配置&启动脚本进行分析
date:2016/8/4
author:wangxl
HBase配置&启动脚本分析
剔除window相关脚本,我们主要分析配置文件与.sh文件
1 文件概览
conf
├── hadoop-metrics2-hbase.properties
├── hbase-env.sh
├── hbase-policy.xml
├── hbase-site.xml
├── log4j.properties
└── regionservers
bin
├── graceful_stop.sh
├── hbase
├── hbase-cleanup.sh
├── hbase-common.sh
├── hbase-config.sh
├── hbase-daemon.sh
├── hbase-daemons.sh
├── local-master-backup.sh
├── local-regionservers.sh
├── master-backup.sh
├── regionservers.sh
├── rolling-restart.sh
├── start-hbase.sh
├── stop-hbase.sh
└── zookeepers.sh
2 分析
我们依据集群的构建步骤,先分析集群服务脚本,从中穿插配置文件,最后分析自带shell执行流程。
2.1 服务启动脚本分析
#start-hbase.sh
1.执行"$bin"/hbase-config.sh [--->hbase-config.sh]
2.如果带参为autorestart,则commandToRun="autorestart",否则commandToRun="start"
3.设置distMode=HBASE_ENV_INIT,也就是hbase-config.sh中设置的HBASE_ENV_INIT[只要HBASE_ENV_INIT无值且${HBASE_CONF_DIR}/hbase-env.sh存在就为true]
$distMode为false,则hbase-daemon.sh $commandToRun master $@
$distMode为true,则
"$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
4.转向hbase-daemons.sh [--->hbase-daemons.sh]
#hbase-config.sh
1.设置HBASE_HOME为本脚本所在目录
2.判断参数个数,可以设置--config或--hosts[注:一般无]
3.HBASE_CONF_DIR设置为$HBASE_CONF_DIR或$HBASE_HOME/conf[优先前者]
4.HBASE_REGIONSERVERS为$HBASE_REGIONSERVERS或$HBASE_CONF_DIR/regionservers
5.HBASE_BACKUP_MASTERS为$HBASE_BACKUP_MASTERS或$HBASE_CONF_DIR/backup-masters
6.设置Thrift JMX参数,条件是:
HBASE_JMX_OPTS字符长度非0 && HBASE_THRIFT_JMX_OPTS无值
成立则:HBASE_THRIFT_JMX_OPTS="$HBASE_JMX_OPTS -Dcom.sun.management.jmxremote.port=10103"
HBASE_THRIFT_JMX_OPTS有值,则设置并导出HBASE_THRIFT_OPTS=$HBASE_THRIFT_JMX_OPTS
7.设置REST JMX参数,条件是:
HBASE_JMX_OPTS字符长度非0 && HBASE_REST_JMX_OPTS无值
成立则:HBASE_REST_JMX_OPTS="$HBASE_JMX_OPTS -Dcom.sun.management.jmxremote.port=10105"
HBASE_REST_JMX_OPTS有值,则设置并导出HBASE_REST_OPTS=$HBASE_REST_JMX_OPTS
8.HBASE_ENV_INIT无值且${HBASE_CONF_DIR}/hbase-env.sh存在,执行"${HBASE_CONF_DIR}/hbase-env.sh",并export HBASE_ENV_INIT="true" [--->hbase-env.sh]
9.HBASE_REGIONSERVER_UID无值则HBASE_REGIONSERVER_UID="hbase"
#hbase-env.sh
设置并导出环境变量
1.JAVA_HOME
2.PID/LOG目录
3.SSH端口
4.内存参数
5.JMX
6.远程Debug
#hbase-daemons.sh
1.参数不足,打印帮助
2.执行"$bin"/hbase-config.sh [--->hbase-config.sh]
3.remote_cmd=cd hbase-0.96.1.1-cdh5.0.2; hbase-daemon.sh --config conf start master [省略了路径]
4.args=--hosts regionservers --config conf cd hbase-0.96.1.1-cdh5.0.2; hbase-daemon.sh --config conf start master [省略了路径]
5.command=master
6.进入case,判断command,进入exec "$bin/regionservers.sh" $args
7.转向regionservers.sh [--->regionservers.sh ]
#regionservers.sh
1.参数不足,打印帮助
2.执行"$bin"/hbase-config.sh [--->hbase-config.sh]
3.设置HOSTLIST
4.遍历HOSTLIST,SSH到各节点,执行操作hbase-daemon.sh [--->hbase-daemon.sh]
#hbase-daemon.sh
1.参数不足,打印帮助
2.执行"$bin"/hbase-config.sh [--->hbase-config.sh]
3.执行"$bin"/hbase-common.sh [--->hbase-common.sh]
4.获取参数,以
startStop=start
command=regionserver
5.日志回滚函数(hbase_rotate_log),清楚zk函数(cleanZNode),启动前检查函数(check_before_start),等待完成函数(wait_until_done),略过
6.HBASE_LOG_DIR为"",则export HBASE_LOG_DIR="$HBASE_HOME/logs",并创建
7.HBASE_PID_DIR为"",则HBASE_PID_DIR=/tmp
8.HBASE_IDENT_STRING为"",则export HBASE_IDENT_STRING="$USER"
9.设置JAVA
10.导出HBASE_LOG_PREFIX和HBASE_LOGFILE,用于拼接日志文件名
11.export HBASE_ROOT_LOGGER=${HBASE_ROOT_LOGGER:-"INFO,RFA"},这里看一看出HBASE_ROOT_LOGGER不设置,
HBASE_ROOT_LOGGER默认设置的是INFO,RFA,所以想更改日志为DRFA,得去修改hbase-env.sh中的HBASE_ROOT_LOGGER选项
12.拼接各种日志文件,如服务,pid,gc日志文件
13.HBASE_NICENESS为"",则export HBASE_NICENESS=0
14.进入case,选择start分支:
check_before_start
hbase_rotate_log $logout
hbase_rotate_log $loggc
echo starting $command, logging to $logout
nohup $thiscmd --config "${HBASE_CONF_DIR}" internal_start $command $args < /dev/null > ${logout} 2>&1 &
sleep 1; head "${logout}"
重点分析nohup $thiscmd --config "${HBASE_CONF_DIR}" internal_start $command $args < /dev/null > ${logout} 2>&1 &
直译:nohup hbase-daemon.sh --config conf internal_start master 2>&1 &
15.重复上诉步骤,再次进入case,选择internal_start分支:
echo "`date` Starting $command on `hostname`" >> $loglog
echo "`ulimit -a`" >> $loglog 2>&1
nice -n $HBASE_NICENESS "$HBASE_HOME"/bin/hbase \
--config "${HBASE_CONF_DIR}" \
$command "$@" start >> "$logout" 2>&1 &
echo $! > $pid
wait
cleanZNode
16.最重要的一句话:nice -n 0 hbase -config conf master start
17.转向hbase脚本 [--->hbase]
#hbase
1.执行"$bin"/hbase-config.sh [--->hbase-config.sh]
2.参数无,打印帮助
3.COMMAND=$1,即COMMAND=master,判断hbase-env-$COMMAND.sh存在,则执行"$HBASE_HOME/conf/hbase-env-$COMMAND.sh"
4.JAVA_HEAP_MAX=-Xmx1000m,HBASE_HEAPSIZE不为"",JAVA_HEAP_MAX="-Xmx""$HBASE_HEAPSIZE""m"
5.CLASSPATH添加$JAVA_HOME/lib/tools.jar
6.CLASSPATH添加$HBASE_HOME/hbase-jars/hbase*.jar
7.CLASSPATH添加$HBASE_HOME/lib/*.jar
8.设置HBASE_LOG_DIR
9.添加hadoop依赖至CLASSPATH和JAVA_LIBRARY_PATH(hadoop-2.3.0-cdh5.0.2/lib/native)
10.CLASSPATH添加用户自定义HBASE_CLASSPATH/HBASE_CLASSPATH_PREFIX[我们可以添加自己的jar至此]
11.COMMAND为("master" "regionserver" "thrift" "thrift2" "rest" "avro" "zookeeper")其中一个即为服务
为服务,则HBASE_OPTS="$HBASE_OPTS $SERVER_GC_OPTS"
其它,则HBASE_OPTS="$HBASE_OPTS $CLIENT_GC_OPTS"
12.根据对用COMMAND,设置对应CLASS,如CLASS='org.apache.hadoop.hbase.master.HMaster'
13.设置HBASE_OPTS,包含-Dhbase.log.dir -Dhbase.log.file -Dhbase.home.dir -Dhbase.id.str -Dhbase.root.logger -Djava.library.path=$JAVA_LIBRARY_PATH"(JAVA_LIBRARY_PATH不为空)
注意:-Dhbase.root.logger=${HBASE_ROOT_LOGGER:-INFO,console}",说明-Dhbase.root.logger默认使用的是HBASE_ROOT_LOGGER,而HBASE_ROOT_LOGGER默认都有值的,所以INFO,console基本不可能用
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$JAVA_LIBRARY_PATH"
为master和regionserver设置-Dhbase.security.logger
14.最后export CLASSPATH
15.执行exec "$JAVA" -Dproc_$COMMAND -XX:OnOutOfMemoryError="kill -9 %p" $JAVA_HEAP_MAX $HBASE_OPTS $CLASS "$@"
直译:
java -Dproc_master -XX:OnOutOfMemoryError=kill -9 %p -Xmx1000m -XX:+UseConcMarkSweepGC -Xmx2048m -Xms2048m -Xmn1024m -XX:PermSize=100m -XX:MaxPermSize=100m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8070 -Dhbase.log.dir=/opt/hadoop/hadoop-cluster/logs/hbase -Dhbase.log.file=hbase-hadoop-master-hadoop-dev-214.log -Dhbase.home.dir=/opt/hadoop/hadoop-cluster/modules/hbase-0.96.1.1-cdh5.0.2 -Dhbase.id.str=hadoop -Dhbase.root.logger=INFO,DRFA -Djava.library.path=/opt/hadoop/hadoop-cluster/modules/hadoop-2.3.0-cdh5.0.2/lib/native -Dhbase.security.logger=INFO,RFAS org.apache.hadoop.hbase.master.HMaster
#hbase-common.sh
内部就一个函数,waitForProcessEnd() ,Shared function to wait for a process end. Take the pid and the command name as parameters
2.2 其它脚本
1.graceful_stop.sh: move服务器上的所有region后,再stop/restart该服务器,可以用来进行版本的热升级
2.rolling-restart.sh:可以用来挨个滚动重启
3 小结
启动整个集群(hbase-daemons.sh)
-->启动节点同服务(hbase-daemons.sh)
-->ssh分发(regionservers.sh)
-->单机单服务(hbase-daemon.sh)
-->构造Java服务(hbase)
其它:环境变量+加载JAR+OPTS+日志
HBase配置&启动脚本分析的更多相关文章
- Spark配置&启动脚本分析
本文档基于Spark2.0,对spark启动脚本进行分析. date:2016/8/3 author:wangxl Spark配置&启动脚本分析 我们主要关注3类文件,配置文件,启动脚本文件以 ...
- Hadoop启动脚本分析
Hadoop启动脚本分析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 能看到这篇博客的你估计对Hadoop已经有一个系统的了解了,最起码各种搭建方式你应该是会的,不会也没有关系, ...
- 4. hadoop启动脚本分析
4. hadoop启动脚本分析 1. hadoop的端口 ``` 50070 //namenode http port 50075 //datanode http port 50090 //2name ...
- hadoop启动脚本分析及常见命令
进程------------------ [hdfs]start-dfs.sh NameNode NN DataNode DN SecondaryNamenode 2NN [yarn]start-ya ...
- busybox rootfs 启动脚本分析(二)
上次分析了busybox的启动脚本,这次分析一下init.d中一些脚本的内容. 参考链接 http://www.cnblogs.com/helloworldtoyou/p/6169678.html h ...
- busybox rootfs 启动脚本分析(一)
imx6文件系统启动脚本分析.开机运行/sbin/init,读取/etc/inittab文件,进行初始化. 参考链接 http://blog.163.com/wghbeyond@126/blog/st ...
- Hadoop 2.0+YARN启动脚本分析与实战经验
start-all.sh脚本现在已经废弃,推荐使用start-dfs.sh和start-yarn.sh分别启动HDFS和YARN. 在新一代的Hadoop里面HDFS称为了统一存储的平台,而YARN成 ...
- Jenkins|简单Job配置|启动脚本|测试报告
目录 1.Jenkins安装 2.Jenkins启动脚本 3.节点配置 4.任务配置 5.集成HTML测试报告 1.Jenkins安装 操作环境:Ubuntu jenkins针对windows,ubu ...
- Hadoop 启动脚本分析与实战经验
start-all.sh脚本现在已经废弃,推荐使用start-dfs.sh和start-yarn.sh分别启动HDFS和YARN. 在新一代的Hadoop里面HDFS称为了统一存储的平台,而YARN成 ...
随机推荐
- C#操作Flash动画
对于在C#开发的过程中没有接触过Flash相关开发的人员来说,没有系统的资料进行学习,那么这篇文档针对于初学者来说是很好的学习DEMO. 本文章中的DEMO实现了C#的COM控件库中本来就带有对fla ...
- [Database] Deadlock avoidance protocol
如何避免Deadlock,如果我们能提前知道各个Process对于资源的需求情况,我们就可以用Banker's algorithm (银行家算法) 来解决问题.可是这在现在中不好实现,因为很难提前知道 ...
- c++模板编程-异质链表
概念: 像一个普通的链表结点中,其中成员next通常是指向同类型结点的指针.这就约束了链表中结点必须是同一类型,从而整个链表都只能保存同一类型的数据.而异质链表则是让next指向任何一种类型,也包括存 ...
- No2_1.接口继承多态_Java学习笔记_接口
接口.继承与多态 1.继承和多态是面向对象开发语言中的重要一个环节,使用得当,可以将整个程序的架构变得非常有弹性,减少代码冗余: 2.继承:复用定义好的类: 3.多态:可以动态调整对象的调用,降低对象 ...
- debian系统下安装ssh服务
它是什么?? SSH 为 Secure Shell 的缩写,简单地说,SSH 为建立在应用层基础上的安全协议.SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议.利用 SSH 协议可 ...
- 2014年总结:我的IT路
又是一年春节时,转眼之间已经毕业4年,简单回顾一下这几年的职业生涯,希望大家提出宝贵意见. 大学时,几个同学跟着学校网络中心的老师一块做校园网上运行的小系统.偶尔协助一下老师对学校机房.校园网做一下维 ...
- BZOJ3144 切糕
http://www.lydsy.com/JudgeOnline/problem.php?id=3144 思路:如果没有D的限制,那一个竖轴都是一个最小割,每个点向更高的点引一条流量为自己权值的边,那 ...
- SGU 294 He's Circles
题意:一个项链有n个珠子,每个珠子为黑色或白色.问有多少种不同的项链? 注意,n的数量十分大,因此,我们枚举i(1<=i<=n),令L=n/i,求出L的欧拉函数,则这些数和L互质,因此gc ...
- centos 图形界面和命令行界面切换
如果在图形界面下,按:Ctrl+Alt+F2进入命令行登录界面 切到root用户下, su root password 1, 关闭图形界面: init 3 关闭图形界面(XServer服务也会关闭) ...
- java设计模式--行为型模式--策略模式
策略模式: 策略模式 概述 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.本模式使得算法可独立于使用它的客户而变化. 适用性 1.许多相关的类仅仅是行为有异.“策略”提供了一种用多个行 ...