Skip to content

BIP 2: Optimize Notebook scripts

hellozepp edited this page Apr 23, 2022 · 2 revisions

Status: MERGED

Author: @AdmondGuo

Contributor: @AdmondGuo

Date: 2022.03.29

Issue: #115

Pull Requests: N/A

背景

目前 notebook 脚本不够完善,用户在使用时存在以下问题:

  • 没有进行环境检查,包括 jvm、mysql、Byzer-lang 和可能存在的 redis
  • 程序运行参数写死,如果需要改动必须更改脚本,引入了额外的问题
  • 用户在 notebook 运行前必须手动创建数据库
  • 日志信息不够清晰

预期收益

优化 notebook 脚本,达成如下结果:

  • 启动时进行环境检查
  • 读取配置文件中的启动参数
  • 自动创建数据库
  • 输出不同级别的日志

变更点

  • ./build 目录下的脚本
  • ./conf 目录下的配置文件

使用介绍

目录结构

打包后,项目目录结构如下:

Byzer-Notebook-{version}
├── CHANGELOG.md
├── VERSION
├── bin
│   ├── bootstrap.sh
│   ├── check-1000-java.sh
│   ├── check-1100-mysql.sh
│   ├── check-1200-engine.sh
│   ├── check-1300-redis.sh
│   ├── check-1400-ports.sh
│   ├── check-env.sh          ## 检测环境
│   ├── get-properties.sh     ## 获取配置参数   
│   ├── header.sh             ## 常用配置
│   ├── kill-process-tree.sh
│   ├── log-rotate-cron.sh
│   ├── notebook.sh
│   ├── rotate-logs.sh        ## 日志滚动
│   └── setenv.sh             ## 设置 jvm 参数
├── commit_SHA1
├── commit_SHA1.frontend
├── conf
│   ├── notebook-log4j.properties
│   ├── notebook-tools-log4j.properties
│   └── notebook.properties
├── logs
│   ├── access_log.log
│   ├── notebook.error
│   ├── notebook.log
│   └── notebook.out
├── notebook-console.jar
├── pid
└── sample

所有 shell 脚本都在 ./bin 目录下。

脚本介绍

notebook.sh

命令入口,在这里产生 err 和 out 日志。 notebook.sh 调用 bootstrap.sh 实现具体的启动逻辑。 可以如下使用它:

  • 启动:notebook.sh start
  • 停止:notebook.sh stop
  • 重启:notebook.sh restart

bootstrap.sh

bootstrap.sh 包含实际的 start/stop 逻辑。

  • start 在启动应用前会根据配置检测环境,并开启日志归档
  • stop 停止应用并去除日志定时归档
  • restart 先 stop 后 start

check-env.sh

notebook.sh start 方法中,调用了 check-env.sh 进行环境检查。 主要进行如下检查:

  • mysql 检查
  • java 检查
  • byzer engine 检查
  • 当前是否存在已有进程

任何一步检测出环境问题都会有错误提示。

技术要点

参考 Apache Kylin 的启动脚本设计,通过 shell 脚本实现。

测试要点

  • 测试是否能检测出环境问题
  • 测试是否能正确创建数据库,无法创建时给出合理的提示
  • 测试是否能正确 启动/停止/重启 应用
  • 测试是否能生成多份不同级别日志