From e1348ff4214672f6dff8ca5e53c8a500c53b9ba2 Mon Sep 17 00:00:00 2001 From: Huang Wei Date: Thu, 4 Jan 2024 19:47:44 +0800 Subject: [PATCH 1/3] fix: sbin env, local deploy and docs --- docs/zh/deploy/install_deploy.md | 124 +++++++++++++----- docs/zh/maintain/diagnose.md | 4 +- docs/zh/quickstart/openmldb_quickstart.md | 4 + .../diagnostic_tool/collector.py | 3 +- release/conf/openmldb-env.sh | 40 +++--- release/sbin/deploy-all.sh | 13 +- release/sbin/init.sh | 8 +- release/sbin/openmldb-cli.sh | 2 +- release/sbin/start-taskmanagers.sh | 12 +- release/sbin/start-zks.sh | 8 +- 10 files changed, 156 insertions(+), 62 deletions(-) diff --git a/docs/zh/deploy/install_deploy.md b/docs/zh/deploy/install_deploy.md index 9b7a67fa857..cf719c24ef6 100644 --- a/docs/zh/deploy/install_deploy.md +++ b/docs/zh/deploy/install_deploy.md @@ -155,6 +155,7 @@ OpenMLDB 提供了两种启动模式:普通和守护进程启动。守护进 如果想要使守护进程模式启动,请使用`bash bin/start.sh start mon`或者`sbin/start-all.sh mon`的方式启动。守护进程模式中,`bin/.pid`将是 mon 进程的 pid,`bin/.pid.child` 为组件真实的 pid。 ## 部署方式一:一键部署(推荐) + OpenMLDB集群版需要部署ZooKeeper、NameServer、TabletServer、TaskManager等模块。其中ZooKeeper用于服务发现和保存元数据信息。NameServer用于管理TabletServer,实现高可用和failover。TabletServer用于存储数据和主从同步数据。APIServer是可选的,如果要用http的方式和OpenMLDB交互需要部署此模块。TaskManager 用于管理离线 job。我们提供了一键部署脚本,可以简化手动在每台机器上下载和配置的复杂性。 **注意:** 同一台机器部署多个组件时,一定要部署在不同的目录里,便于单独管理。尤其是部署TabletServer,一定不能重复使用目录,避免数据文件和日志文件冲突。 @@ -164,9 +165,9 @@ DataCollector和SyncTool暂不支持一键部署。请参考手动部署方式 ### 环境要求 - 部署机器(执行部署脚本的机器)可以免密登录其他部署节点 -- 部署机器安装 `rsync` 工具 -- 部署机器安装 Python3 -- 部署Zookeeper和TaskManager的机器安装 JRE (Java Runtime Environment) +- 部署机器需安装 `rsync` 工具 +- 部署机器需安装 Python3 +- Zookeeper和TaskManager的运行机器上需安装 JRE (Java Runtime Environment) ### 下载OpenMLDB发行版 @@ -176,28 +177,55 @@ tar -zxvf openmldb-0.8.4-linux.tar.gz cd openmldb-0.8.4-linux ``` +### 脚本使用逻辑 + +部署脚本均在sbin中,我们也称一键部署为sbin部署。初次部署过程一般是“修改环境和配置文件 -> sbin/deploy-all.sh -> sbin/start-all.sh”。如果需要停止服务,执行`sbin/stop-all.sh`。清理已部署的数据和日志,执行`sbin/clear-all.sh`。Docker镜像中的`/work/init.sh`脚本便是进行“deploy-all -> stop-all -> clear-all -> start-all”。 + +如果集群正在运行,需要修改配置(不能只deploy到单台,但全部覆盖配置不影响进程运行)并重启某一个组件(不能指定单进程,但可以指定组件),需要“修改配置 -> deploy-all.sh -> stop-tablets.sh -> start-tablets.sh”。但需要注意重启tablet可能会导致数据加载失败(影响服务),需要进行集群诊断与恢复,可使用[一键inspect](../maintain/diagnose.md#一键inspect)。数据量较大或不可出现服务中断时,更推荐使用扩缩容方式或手动重启单进程。 + ### 环境配置 -环境变量定义在`conf/openmldb-env.sh`,如下表所示: - -| 环境变量 | 默认值 | 定义 | -|-----------------------------------|------------------------------------|-------------------------------------------------------------------------| -| OPENMLDB_VERSION | 0.8.4 | OpenMLDB版本 | -| OPENMLDB_MODE | standalone | standalone或者cluster | -| OPENMLDB_HOME | 当前发行版的根目录 | openmldb发行版根目录 | -| SPARK_HOME | $OPENMLDB_HOME/spark | openmldb spark发行版根目录,如果该目录不存在,自动从网上下载 | -| OPENMLDB_TABLET_PORT | 10921 | TabletServer默认端口 | -| OPENMLDB_NAMESERVER_PORT | 7527 | NameServer默认端口 | -| OPENMLDB_TASKMANAGER_PORT | 9902 | taskmanager默认端口 | -| OPENMLDB_APISERVER_PORT | 9080 | APIServer默认端口 | -| OPENMLDB_USE_EXISTING_ZK_CLUSTER | false | 是否使用已经部署的ZooKeeper集群。如果是`false`,会在部署脚本里自动启动ZooKeeper集群 | -| OPENMLDB_ZK_HOME | $OPENMLDB_HOME/zookeeper | ZooKeeper发行版根目录 | -| OPENMLDB_ZK_CLUSTER | 自动从`conf/hosts`中的`[zookeeper]`配置获取 | ZooKeeper集群地址 | -| OPENMLDB_ZK_ROOT_PATH | /openmldb | OpenMLDB在ZooKeeper的根目录 | -| OPENMLDB_ZK_CLUSTER_CLIENT_PORT | 2181 | ZooKeeper client port, 即zoo.cfg里面的clientPort | -| OPENMLDB_ZK_CLUSTER_PEER_PORT | 2888 | ZooKeeper peer port,即zoo.cfg里面这种配置server.1=zoo1:2888:3888中的第一个端口配置 | -| OPENMLDB_ZK_CLUSTER_ELECTION_PORT | 3888 | ZooKeeper election port, 即zoo.cfg里面这种配置server.1=zoo1:2888:3888中的第二个端口配置 | + +环境变量定义在`conf/openmldb-env.sh`,主要变量如下表所示: + +| 环境变量 | 默认值 | 定义 | +| -------------------------------- | ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------- | +| OPENMLDB_VERSION | 0.8.4 | OpenMLDB版本,主要用于spark下载,一般不改动。 | +| OPENMLDB_MODE | cluster | standalone或者cluster | +| OPENMLDB_HOME | 当前发行版的根目录 | openmldb发行版根目录,不则使用当前根目录,也就是openmldb-0.8.4-linux所在目录。 | +| SPARK_HOME | $OPENMLDB_HOME/spark | openmldb spark发行版根目录,如果该目录不存在,自动从网上下载。**此路径也将成为TaskManager运行机器上的Spark安装目录。** | +| RUNNER_EXISTING_SPARK_HOME | | 配置此项,运行TaskManager的机器将使用该Spark环境,将不下载、部署OpenMLDB Spark发行版。 | +| OPENMLDB_USE_EXISTING_ZK_CLUSTER | false | 是否使用已经运行的ZooKeeper集群。如果是`true`,将跳过ZooKeeper集群的部署与管理。 | +| OPENMLDB_ZK_HOME | $OPENMLDB_HOME/zookeeper | ZooKeeper发行版根目录,如果该目录不存在,自动从网上下载。 | +| OPENMLDB_ZK_CLUSTER | | ZooKeeper集群地址,为空时自动从`conf/hosts`中的`[zookeeper]`配置获取。建议自建ZooKeeper集群时在hosts中创建,使用已有ZooKeeper集群时配置此项。 | +| OPENMLDB_ZK_ROOT_PATH | /openmldb | OpenMLDB在ZooKeeper集群的根目录 | +| OPENMLDB_FORCE_LOCAL | false | 如果为`true`,所有部署将认定为本地拷贝。单机部署集群,又需要使用公网IP时,开启此项,避免ssh | +| RUNNER_JAVA_HOME | | 运行ZooKeeper和TaskManager的机器ssh可能无Java相关环境变量,可使用此变量设置。不设置则不覆盖环境。 | +| CLEAR_OPENMLDB_INSTALL_DIR | false | sbin/clear-all.sh只清理运行产生的数据与日志,如果是`true`,将把运行机器上的整个安装目录删除。 | + +通常来讲,需要确认以下几点: +- ZooKeeper集群地址,如果使用已有ZooKeeper集群,需要配置`OPENMLDB_USE_EXISTING_ZK_CLUSTER=true`,并配置`OPENMLDB_ZK_CLUSTER`。(如果在`conf/hosts`中配置外部ZK集群,请注释标注其不受sbin部署影响,避免混乱。) +- 需要此工具部署ZooKeeper集群时,在`conf/hosts`中配置`[zookeeper]`。填写多个ZooKeeper节点,即部署ZooKeeper集群,无需额外配置。 +- Spark环境,如果需要使用运行机器上已有的Spark环境,需要配置`RUNNER_EXISTING_SPARK_HOME`(地址为TaskManager运行机器上的路径)。如果部署机器存在Spark环境,并想要在TaskManager机器上使用此套环境,可配置`SPARK_HOME`(部署到TaskManager机器同名路径上)。`SPARK_HOME`不进行配置时,将自动下载、使用OpenMLDB Spark发行版。 + +#### 默认端口 +| 环境变量 | 默认值 | 定义 | +| ------------------------- | ------ | -------------------- | +| OPENMLDB_TABLET_PORT | 10921 | TabletServer默认端口 | +| OPENMLDB_NAMESERVER_PORT | 7527 | NameServer默认端口 | +| OPENMLDB_TASKMANAGER_PORT | 9902 | TaskManager默认端口 | +| OPENMLDB_APISERVER_PORT | 9080 | APIServer默认端口 | + +默认端口只会在节点配置不显式配置端口号时才会被使用,更推荐**直接在节点配置文件hosts中配置好端口号**。 + +#### ZooKeeper高级配置 +| 环境变量 | 默认值 | 定义 | +| --------------------------------- | ------ | --------------------------------------------------------------------------------------- | +| OPENMLDB_ZK_CLUSTER_CLIENT_PORT | 2181 | ZooKeeper client port, 即zoo.cfg里面的clientPort | +| OPENMLDB_ZK_CLUSTER_PEER_PORT | 2888 | ZooKeeper peer port,即zoo.cfg里面这种配置server.1=zoo1:2888:3888中的第一个端口配置 | +| OPENMLDB_ZK_CLUSTER_ELECTION_PORT | 3888 | ZooKeeper election port, 即zoo.cfg里面这种配置server.1=zoo1:2888:3888中的第二个端口配置 | ### 节点配置 + 节点配置文件为`conf/hosts`,示例如下: ```bash [tablet] @@ -229,14 +257,16 @@ node3:2181:2888:3888 /tmp/openmldb/zk-1 对于`[zookeeper]`, 会有额外端口参数,包括follower用来连接leader的`zk_peer_port`和用于leader选择的`zk_election_port`, 其格式为`host:port:zk_peer_port:zk_election_port WORKDIR`。 -每一行节点列表,除了`host`是必须的,其他均为可选,如果没有提供,会使用默认配置,默认配置参考`conf/openmldb-env.sh`。 +每一行节点列表,除了`host`是必须的,其他均为可选,如果没有提供,会使用默认配置,默认配置参考`conf/openmldb-env.sh`。无`WORKDIR`配置的节点,所有OpenMLDB Server的默认运行目录为`OPENMLDB_HOME`,ZooKeeper默认目录为`OPENMLDB_ZK_HOME`。 + +host配置为localhost或127.0.0.1时,将自动识别为部署到本地,不会进行ssh和rsync。当集群在本地部署且需要对外暴露服务,hosts中节点需配置为外网IP,如果不想配置本机ssh免密,可在`conf/openmldb-env.sh`中配置`OPENMLDB_FORCE_LOCAL=true`。 ```{warning} 如果在不同机器上部署多个 TaskManager,其 `offline.data.prefix` 配置的路径,这些机器必须可以访问,建议配置hdfs路径。 ``` ### 修改机器环境配置 (可选) -``` +```bash bash sbin/init_env.sh ``` 说明: @@ -248,15 +278,40 @@ bash sbin/init_env.sh ```bash sbin/deploy-all.sh ``` -该脚本会把相关的文件分发到`conf/hosts`里面配置的机器上,同时根据`conf/hosts`和`conf/openmldb-env.sh` -的配置,对相关组件的配置做出相应的更新。 +该脚本会把相关的文件分发到`conf/hosts`里面配置的机器上,同时根据`conf/hosts`和`conf/openmldb-env.sh`的配置,对相关组件的配置做出相应的更新。 -如果希望为每个节点添加一些额外的相同的定制化配置,可以在执行deploy脚本之前,修改`conf/xx.template`的配置, -这样在分发配置文件的时候,每个节点都可以用到更改后的配置。 -重复执行`sbin/deploy-all.sh`会覆盖上一次的配置。 +如果希望为每个节点添加一些额外的相同的定制化配置,可以在执行deploy脚本之前,**修改`conf/xx.template`的配置**。只有和openmldb-env.sh中相关的配置会被部署工具自动追加到配置尾部,其他配置不会被覆盖,可放心修改。执行deploy,将配置文件分发到运行节点中,重复执行`sbin/deploy-all.sh`会覆盖上一次的配置。 详细配置说明见[配置文件](./conf.md),请注意TaskManager Spark的选择与细节配置[Spark Config详解](./conf.md#spark-config详解)。 +执行阶段日志类似下文,请注意部署到的host与目录: +``` +deploy tablet to localhost:10921 /tmp/openmldb/tablet-1 +copy /work/openmldb to localhost:/tmp/openmldb/tablet-1 +deploy tablet to localhost:10922 /tmp/openmldb/tablet-2 +copy /work/openmldb to localhost:/tmp/openmldb/tablet-2 +deploy nameserver to localhost:7527 /work/openmldb +skip rsync as dest=src: /work/openmldb +deploy apiserver to localhost:9080 /work/openmldb +skip rsync as dest=src: /work/openmldb +/work/openmldb/spark already exists. Skip deploy spark locally +deploy taskmanager to localhost:9902 /work/openmldb +skip rsync as dest=src: /work/openmldb +/work/openmldb/zookeeper already exists. Skip download zookeeper. +deploy zookeeper to localhost:2181 /tmp/openmldb/zk-1 +copy /work/openmldb/zookeeper to localhost:/tmp/openmldb/zk-1 +``` + +对环境变量有疑问,注意日志`OPENMLDB envs:`的打印结果。 + +- 配置 +deploy不支持对单个组件的配置更新,更改单个组件也需要使用`deploy-all.sh`。如果你在部署host上单独修改,需要修改`xx.flags`/`taskmanager.properties`而不是template配置,而且`deploy-all.sh`将对该配置进行覆盖,请谨慎配置。检查配置时以host的运行目录中的`xx.flags`/`taskmanager.properties`为准。 + +- 日志 +相应的,各个节点的日志也在各自的运行目录中,具体位置参考[部署方式二:手动部署](#部署方式二手动部署)中各个组件的日志位置说明。 + +收集日志与配置,可以使用诊断工具[检查内容](../maintain/diagnose.md#检查内容),默认将各个节点的配置和日志都收集到`/tmp/diag_collect`目录中,可以统一查看。 + ### 启动服务 普通模式启动: @@ -270,17 +325,26 @@ sbin/start-all.sh sbin/start-all.sh mon ``` -该脚本会把 `conf/hosts` 里面配置的所有服务启动起来。启动完成以后,可以通过辅助脚本启动 CLI (`sbin/openmldb-cli.sh`),来验证集群是否正常启动。 +该脚本会把 `conf/hosts` 里面配置的所有服务启动起来。启动完成以后,可以通过辅助脚本启动 CLI (`sbin/openmldb-cli.sh`),来验证集群是否正常启动。对环境变量有疑问,注意日志`OPENMLDB envs:`的打印结果。 ```{tip} start-all.sh 是一个非常有用的工具。除了在部署阶段可以使用,也可以在运维阶段用于启动某一个下线的 OpenMLDB 进程。比如某一个 tablet 进程意外下线,你可以直接执行 start-all.sh。该脚本对于已经启动的进程不会产生副作用,对于已配置、但是未启动的进程,将会自动进行启动。 ``` ### 停止服务 + 如果需要停止所有服务,可以执行以下脚本: ```bash sbin/stop-all.sh ``` +### 清理数据和日志 + +如果需要清理所有服务的数据和日志,可以执行以下脚本: +```bash +sbin/clean-all.sh +``` + +如果需要保留集群数据,请不要执行该脚本。 ## 部署方式二:手动部署 OpenMLDB集群版需要部署ZooKeeper、NameServer、TabletServer、TaskManager等模块。其中ZooKeeper用于服务发现和保存元数据信息。NameServer用于管理TabletServer,实现高可用和failover。TabletServer用于存储数据和主从同步数据。APIServer是可选的,如果要用http的方式和OpenMLDB交互需要部署此模块。TaskManager用于管理离线job。 diff --git a/docs/zh/maintain/diagnose.md b/docs/zh/maintain/diagnose.md index cb5d7a30f74..17ba3319c79 100644 --- a/docs/zh/maintain/diagnose.md +++ b/docs/zh/maintain/diagnose.md @@ -185,7 +185,7 @@ JOB 检查是更灵活的离线任务检查命令,可以按条件筛选job, ### static-check 静态检查 -`static-check`静态检查,根据集群部署配置文件(通过参数`-f,--conf_file`指定),登录各个服务组件的部署地址,可以收集版本信息、配置文件、日志文件,检查版本是否一致,对收集到的配置文件和日志文件做分析。可以在集群未部署前进行检查,避免因程序版本或配置文件错误导致的集群部署失败。或在集群异常时,将分布式的日志文件收集在一起,方便调查问题。 +`static-check`静态检查,根据集群部署配置文件(通过参数`-f,--conf_file`指定),登录各个服务组件的部署地址,可以收集版本信息、配置文件、日志文件,检查版本是否一致,对收集到的配置文件和日志文件做分析。可以在集群*未部署前*进行检查,避免因程序版本或配置文件错误导致的集群部署失败。或在集群异常时,将分布式的日志文件收集在一起,方便调查问题。 ```bash openmldb_tool static-check -h @@ -260,7 +260,7 @@ nameserver: 检查可通过组合FLAG来来指定检查哪些内容,例如,`-V`只检查版本,`-CL`只检查配置文件和日志,`-VCL`检查全部。 -- `-V,--version`检查版本,检查各个组件的版本是否一致,如果不一致,会输出不一致的组件和版本信息。 +- `-V,--version`检查版本,检查各个组件的版本是否一致,如果不一致,会输出不一致的组件和版本信息(由于复杂度较高,openmldb-batch包的地址可能查不到,将忽略检查,替换batch包非常容易,可以推后检查)。 - `-C,--conf`收集配置文件,检查各个组件的配置文件中ZooKeeper地址是否一致等。 - `-L,--log`收集日志,输出WARNING及以上的日志。 diff --git a/docs/zh/quickstart/openmldb_quickstart.md b/docs/zh/quickstart/openmldb_quickstart.md index c9a0dee18a8..77b1c1e29c1 100644 --- a/docs/zh/quickstart/openmldb_quickstart.md +++ b/docs/zh/quickstart/openmldb_quickstart.md @@ -38,12 +38,16 @@ docker run -it 4pdosc/openmldb:0.8.4 bash ```bash /work/openmldb/bin/openmldb --zk_cluster=127.0.0.1:2181 --zk_root_path=/openmldb --role=sql_client +# 或脚本 +/work/openmldb/sbin/openmldb-cli.sh ``` 成功启动 OpenMLDB CLI 后如下图显示: ![image](./images/cli_cluster.png) +如果你需要对 OpenMLDB 集群进行配置修改,/work/init.sh使用的是sbin一键部署方式,具体参考[一键部署](../deploy/install_deploy.md#部署方式一一键部署推荐)。 + ## 使用流程 参照核心概念,使用 OpenMLDB 的流程一般包含:建立数据库和表、导入离线数据、离线特征计算、SQL 方案上线、导入在线数据、在线实时特征计算六个步骤。 diff --git a/python/openmldb_tool/diagnostic_tool/collector.py b/python/openmldb_tool/diagnostic_tool/collector.py index 7e143025e11..41403061610 100644 --- a/python/openmldb_tool/diagnostic_tool/collector.py +++ b/python/openmldb_tool/diagnostic_tool/collector.py @@ -115,7 +115,8 @@ def get_spark_home(server_info: ServerInfo): tm_conf_path = server_info.conf_path_pair("")[0] config_name = "spark.home=" log.debug("get %s from %s", config_name, tm_conf_path) - grep_str, _ = server_info.cmd_on_host(f"grep {config_name} {tm_conf_path}") + # last one option + grep_str, _ = server_info.cmd_on_host(f"grep {config_name} {tm_conf_path} | tail -n 1") if not grep_str: # TODO(hw):no config in file, get env SPARK_HOME? diff --git a/release/conf/openmldb-env.sh b/release/conf/openmldb-env.sh index 5ba917c49e7..3b4b83dd5ef 100644 --- a/release/conf/openmldb-env.sh +++ b/release/conf/openmldb-env.sh @@ -2,15 +2,12 @@ export OPENMLDB_VERSION=0.8.4 # openmldb mode: standalone / cluster export OPENMLDB_MODE=${OPENMLDB_MODE:=cluster} -# tablet port -export OPENMLDB_TABLET_PORT=10921 -# nameserver port -export OPENMLDB_NAMESERVER_PORT=7527 -# taskmanager port -export OPENMLDB_TASKMANAGER_PORT=9902 -# apiserver port -export OPENMLDB_APISERVER_PORT=9080 - +# openmldb root path +export OPENMLDB_HOME= +# the root path of openmldb spark release, default is $OPENMLDB_HOME/spark +# if not exists, download from online +export SPARK_HOME= +export RUNNER_EXISTING_SPARK_HOME= # if OPENMLDB_USE_EXISTING_ZK_CLUSTER is set, will use existing zk cluster export OPENMLDB_USE_EXISTING_ZK_CLUSTER=false # the root path of zookeeper release, default is $OPENMLDB_HOME/zookeeper @@ -20,17 +17,26 @@ export OPENMLDB_ZK_HOME= export OPENMLDB_ZK_CLUSTER= # zookeeper root path export OPENMLDB_ZK_ROOT_PATH=/openmldb + +export OPENMLDB_FORCE_LOCAL=false + +export RUNNER_JAVA_HOME= + +# if CLEAR_OPENMLDB_INSTALL_DIR is set, all files in the WORKDIR will be deleted when running sbin/clear-all.sh +export CLEAR_OPENMLDB_INSTALL_DIR=false + +# tablet port +export OPENMLDB_TABLET_PORT=10921 +# nameserver port +export OPENMLDB_NAMESERVER_PORT=7527 +# taskmanager port +export OPENMLDB_TASKMANAGER_PORT=9902 +# apiserver port +export OPENMLDB_APISERVER_PORT=9080 + # zookeeper client port, clientPort=2181 in zoo.cfg export OPENMLDB_ZK_CLUSTER_CLIENT_PORT=2181 # zookeeper peer port, which is the first port in this config server.1=zoo1:2888:3888 in zoo.cfg export OPENMLDB_ZK_CLUSTER_PEER_PORT=2888 # zookeeper election port, which is the second port in this config server.1=zoo1:2888:3888 in zoo.cfg export OPENMLDB_ZK_CLUSTER_ELECTION_PORT=3888 - -# openmldb root path -export OPENMLDB_HOME= -# the root path of openmldb spark release, default is $OPENMLDB_HOME/spark -# if not exists, download from online -export SPARK_HOME= -# if CLEAR_OPENMLDB_INSTALL_DIR is set, all files in the WORKDIR will be deleted when running sbin/clear-all.sh -export CLEAR_OPENMLDB_INSTALL_DIR=false diff --git a/release/sbin/deploy-all.sh b/release/sbin/deploy-all.sh index 3a4f101b15b..ddfc7e712cd 100755 --- a/release/sbin/deploy-all.sh +++ b/release/sbin/deploy-all.sh @@ -33,7 +33,7 @@ distribute() { type=$4 fi local use_ssh=true - if [[ $host = "localhost" || $host = "127.0.0.1" ]]; then + if [[ "$OPENMLDB_FORCE_LOCAL" = true || "$host" = "localhost" || "$host" = "127.0.0.1" ]]; then use_ssh=false if [[ "$dest" = "$src" ]]; then echo "skip rsync as dest=src: $dest" @@ -56,7 +56,10 @@ distribute() { else if [[ "$type" = "taskmanager" ]]; then dir_list=(bin sbin conf taskmanager) - if [[ "$use_ssh" = true ]]; then + if [[ -n "$RUNNER_EXISTING_SPARK_HOME" ]]; then + echo "use existing spark $RUNNER_EXISTING_SPARK_HOME on $host, skip deploy spark" + elif [[ "$use_ssh" = true ]]; then + run_auto "$host" "mkdir -p ${SPARK_HOME} > /dev/null 2>&1" rsync -arz "${SPARK_HOME}/" "$host:${SPARK_HOME}/" fi else @@ -146,6 +149,10 @@ function download_spark { # deploy taskmanagers downloaded=false +if [[ -n "${RUNNER_EXISTING_SPARK_HOME}" ]]; then + echo "use $RUNNER_EXISTING_SPARK_HOME, skip download openmldbspark" + downloaded=true +fi for line in $(parse_host conf/hosts taskmanager) do if ! $downloaded; then @@ -158,7 +165,7 @@ do echo "deploy taskmanager to $host:$port $dir" distribute "$host" "$dir" "$home" taskmanager - cmd="cd $dir && OPENMLDB_VERSION=${OPENMLDB_VERSION} SPARK_HOME=${SPARK_HOME} OPENMLDB_HOST=$host OPENMLDB_TASKMANAGER_PORT=$port OPENMLDB_ZK_CLUSTER=${OPENMLDB_ZK_CLUSTER} OPENMLDB_ZK_ROOT_PATH=${OPENMLDB_ZK_ROOT_PATH} sbin/deploy.sh taskmanager" + cmd="cd $dir && SPARK_HOME=${SPARK_HOME} OPENMLDB_HOST=$host OPENMLDB_TASKMANAGER_PORT=$port OPENMLDB_ZK_CLUSTER=${OPENMLDB_ZK_CLUSTER} OPENMLDB_ZK_ROOT_PATH=${OPENMLDB_ZK_ROOT_PATH} sbin/deploy.sh taskmanager" run_auto "$host" "$cmd" done diff --git a/release/sbin/init.sh b/release/sbin/init.sh index b73ab226b81..1b20442bb48 100755 --- a/release/sbin/init.sh +++ b/release/sbin/init.sh @@ -90,7 +90,7 @@ function parse_host { run_auto() { local host=$1 local cmd=$2 - if [[ $host = "localhost" || $host = "127.0.0.1" ]]; then + if [[ "$OPENMLDB_FORCE_LOCAL" = true || "$host" = "localhost" || "$host" = "127.0.0.1" ]]; then local cur_dir cur_dir=$(pwd) bash -c "$cmd" @@ -105,7 +105,11 @@ if [ -z "${OPENMLDB_HOME}" ]; then export OPENMLDB_HOME fi -if [ -z "${SPARK_HOME}" ]; then +if [ -n "$RUNNER_EXISTING_SPARK_HOME" ]; then + echo "use existing spark $RUNNER_EXISTING_SPARK_HOME on runner, overwrite SPARK_HOME" + SPARK_HOME="$RUNNER_EXISTING_SPARK_HOME" + export SPARK_HOME +elif [ -z "${SPARK_HOME}" ]; then SPARK_HOME=${OPENMLDB_HOME}/spark export SPARK_HOME fi diff --git a/release/sbin/openmldb-cli.sh b/release/sbin/openmldb-cli.sh index 2102990164a..8bbde0652e6 100755 --- a/release/sbin/openmldb-cli.sh +++ b/release/sbin/openmldb-cli.sh @@ -20,7 +20,7 @@ sbin="$(cd "$(dirname "$0")" || exit 1; pwd)" . "$home"/conf/openmldb-env.sh . "$sbin"/init.sh cd "$home" || exit 1 - +echo $OPENMLDB_MODE $OPENMLDB_ZK_CLUSTER if [[ -n "$OPENMLDB_MODE" && "$OPENMLDB_MODE" = "cluster" ]]; then bin/openmldb --zk_cluster="${OPENMLDB_ZK_CLUSTER}" --zk_root_path="${OPENMLDB_ZK_ROOT_PATH}" --role=sql_client "$@" else diff --git a/release/sbin/start-taskmanagers.sh b/release/sbin/start-taskmanagers.sh index b6873c33089..322824dfbbf 100755 --- a/release/sbin/start-taskmanagers.sh +++ b/release/sbin/start-taskmanagers.sh @@ -38,11 +38,13 @@ else echo "start taskmanager in $dir with endpoint $host:$port " cmd="cd $dir && SPARK_HOME=${SPARK_HOME} bin/start.sh start taskmanager $*" - run_auto "$host" "$cmd" - - # Print the log of taskmanager if fail - #cmd="cd $dir && cat taskmanager/bin/logs/taskmanager.log" - #run_auto "$host" "$cmd" + # special for java + pre="" + if [[ -n $RUNNER_JAVA_HOME ]]; then + echo "overwrite java env by RUNNER_JAVA_HOME:$RUNNER_JAVA_HOME" + pre="export JAVA_HOME=$RUNNER_JAVA_HOME && export PATH=$JAVA_HOME/bin:$PATH &&" + fi + run_auto "$host" "$pre $cmd" done IFS="$old_IFS" fi diff --git a/release/sbin/start-zks.sh b/release/sbin/start-zks.sh index c13b762be90..b362bd95f48 100755 --- a/release/sbin/start-zks.sh +++ b/release/sbin/start-zks.sh @@ -33,6 +33,12 @@ do echo "start zookeeper in $dir with endpoint $host:$port " cmd="cd $dir && bin/zkServer.sh start" - run_auto "$host" "$cmd" + # special for java + pre="" + if [[ -n $RUNNER_JAVA_HOME ]]; then + echo "overwrite java env by RUNNER_JAVA_HOME:$RUNNER_JAVA_HOME" + pre="export JAVA_HOME=$RUNNER_JAVA_HOME && export PATH=$JAVA_HOME/bin:$PATH &&" + fi + run_auto "$host" "$pre $cmd" done IFS="$old_IFS" \ No newline at end of file From f47b24331e892819646ec41b187518a7e1e032e3 Mon Sep 17 00:00:00 2001 From: huangwei Date: Thu, 11 Jan 2024 19:21:24 +0800 Subject: [PATCH 2/3] fix --- release/sbin/start-zks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release/sbin/start-zks.sh b/release/sbin/start-zks.sh index b362bd95f48..775d52715ac 100755 --- a/release/sbin/start-zks.sh +++ b/release/sbin/start-zks.sh @@ -41,4 +41,4 @@ do fi run_auto "$host" "$pre $cmd" done -IFS="$old_IFS" \ No newline at end of file +IFS="$old_IFS" From ffd700634d916b2aa2f70cc27a613b33c630bd9d Mon Sep 17 00:00:00 2001 From: huangwei Date: Wed, 17 Jan 2024 20:39:08 +0800 Subject: [PATCH 3/3] fix --- release/sbin/openmldb-cli.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release/sbin/openmldb-cli.sh b/release/sbin/openmldb-cli.sh index 8bbde0652e6..19bd5160a7b 100755 --- a/release/sbin/openmldb-cli.sh +++ b/release/sbin/openmldb-cli.sh @@ -20,7 +20,7 @@ sbin="$(cd "$(dirname "$0")" || exit 1; pwd)" . "$home"/conf/openmldb-env.sh . "$sbin"/init.sh cd "$home" || exit 1 -echo $OPENMLDB_MODE $OPENMLDB_ZK_CLUSTER +echo "${OPENMLDB_MODE} ${OPENMLDB_ZK_CLUSTER} ${OPENMLDB_ZK_ROOT_PATH}" if [[ -n "$OPENMLDB_MODE" && "$OPENMLDB_MODE" = "cluster" ]]; then bin/openmldb --zk_cluster="${OPENMLDB_ZK_CLUSTER}" --zk_root_path="${OPENMLDB_ZK_ROOT_PATH}" --role=sql_client "$@" else