Doris是如何启动FE的服务的呢? 我们从社区官方FE的部署文档中得知, 执行以下命令可以启动一个FE进程.
sh bin/start_fe.sh --daemon
那start_fe.sh脚本是如何把Doris FE进程拉起来的呢? 我总结了这个脚本主要做了3件事情, 下面我们依次来揭秘.
大部分的环境变量都是依赖DORIS_HOME(doris所在目录, 里面包含bin, lib等). 这里主要介绍下关于DORIS_HOME的脚本计算如下:
curdir=`dirname "$0"`
curdir=`cd "$curdir"; pwd`
省略....
export DORIS_HOME=`cd "$curdir/.."; pwd`
关于以上脚本做如下解释
sh bin/start_fe.sh --daemon
启动命令中对于shell来说的的第1个参数, 显而易见是bin/start_fe.shcd "$curdir/.."; pwd
”, 我们可以看到目录向上获取, 就是最终DORIS_HOME在脚本中搜索java关键字, 我们可以看到脚本验证了java版本(至少是java8)、java启动opts、java运行的CLASSPATH等. 脚本如下:
# check java version and choose correct JAVA_OPTS
java_version=$(jdk_version)
final_java_opt=$JAVA_OPTS
if [ $java_version -gt 8 ]; then
if [ -z "$JAVA_OPTS_FOR_JDK_9" ]; then
echo "JAVA_OPTS_FOR_JDK_9 is not set in fe.conf" >> $LOG_DIR/fe.out
exit -1
fi
final_java_opt=$JAVA_OPTS_FOR_JDK_9
fi
echo "using java version $java_version" >> $LOG_DIR/fe.out
echo $final_java_opt >> $LOG_DIR/fe.out
# add libs to CLASSPATH
for f in $DORIS_HOME/lib/*.jar; do
CLASSPATH=$f:${CLASSPATH};
done
export CLASSPATH=${CLASSPATH}:${DORIS_HOME}/lib
启动前通过DORIS_HOME确定了上次启动的pid文件, 并检查防止重复启动. 最后将全部的参数传递给org.apache.doris.PaloFe中的main函数, 最终开始启动FE.
if [ ${RUN_DAEMON} -eq 1 ]; then
nohup $LIMIT $JAVA $final_java_opt org.apache.doris.PaloFe ${HELPER} "$@" >> $LOG_DIR/fe.out 2>&1 </dev/null &
else
$LIMIT $JAVA $final_java_opt org.apache.doris.PaloFe ${HELPER} "$@" >> $LOG_DIR/fe.out 2>&1 </dev/null
fi
欢迎添加微信,互相学习↑↑↑ -_-
白老虎
programming is not only to solve problems, ways to think
grafana 级连 菜单 templating (variables) 配置
rocketmq 集群搭建 (2master + 2slave + 2namesrv)
AI 机器人 抓取 微信 聊天中的 百度网盘 分享地址和密码