Zookeeper安装 Zookeeper启动 报错Error: JAVA_HOME is not set and java could not be found in PATH
程序员文章站
2022-04-28 12:42:09
...
Zookeeper启动 报错Error: JAVA_HOME is not set and java could not be found in PATH
背景:
原本打算安装 calal
, kafka
和 clickhouse_sinker
配合使用。读取mysql
的binlog
日志,实现 mysql
数据同步到clickhouse
。
重新启动一个新的虚拟机,开始尝试。
虽然kafka2.8
可以不需要zookeeper
的情况下执行。但是本人还是钟爱kafka2.6.2
。由于这个版本需要zookeeper
的支持,所有先安装zookeeper
。就出现了这篇文章的内容了。
操作:
一、了解zookeeper
zookeeper官网:https://zookeeper.apache.org/
zookeeper下载地址:https://zookeeper.apache.org/releases.html
二、下载zookeeper 我使用的是3.6.3版本
$ wget https://dlcdn.apache.org/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz
三、解压
- bin.tar.gz结尾的包,解压后是可以直接运行的包,不需要编译,下载的时候注意自己下载的是源码包还是编译后的可执行包。
- 解压到指定目录
$ tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz -C ../soft/zookeeper/
四、安装java
- zookeeper运行需要jdk1.8+
- java 下载页面:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
- 解压下载的包
$ wget -zxvf jdk-8u291-linux-x64.tar.gz -C ../soft/java
- 配置环境变量 将下面配置追加到
/etc/profile
里面# set java env export JAVA_HOME=/home/han/work/soft/java export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH
- 验证java环境是否ok
[email protected]:/home/han/work/package# java -version
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
[email protected]:/home/han/work/package# echo $JAVA_HOME
/home/han/work/soft/java
[email protected]:/home/han/work/package#
五、运行zookeeper
[email protected]:/home/han/work/soft/zookeeper/apache-zookeeper-3.6.3-bin# sh bin/zkServer.sh
bin/zkServer.sh: 78: /home/han/work/soft/zookeeper/apache-zookeeper-3.6.3-bin/bin/zkEnv.sh: [[: not found
-p: not found
java is /home/han/work/soft/java/bin/java
Error: JAVA_HOME is not set and java could not be found in PATH.
六、报错原因排查
Error: JAVA_HOME is not set and java could not be found in PATH.
-
权限排查:
没找到java和java_home,第一反应是不可能的。java和java_home肯定是有的。会不会java权限问题,调整了一下权限,运行还是报错。
-
查看运行文件
zkEnv.sh
if [[ -n "$JAVA_HOME" ]] && [[ -x "$JAVA_HOME/bin/java" ]]; then
JAVA="$JAVA_HOME/bin/java"
elif type -p java; then
JAVA=java
else
echo "Error: JAVA_HOME is not set and java could not be found in PATH." 1>&2
exit 1
fi
发现了问题 shell脚本中 if [[]] 语法的问题
七、总结:
- zookeeper3.5版本后关于java_home判断做个调整。3.5版本之前的
if [ "$JAVA_HOME" != "" ]; then JAVA="$JAVA_HOME/bin/java" else JAVA=java fi
- shell语法 [[]] 和 []
[[]]结构比Bash版本的[]更通用。在[[和]]之间的所有的字符都不会被文件扩展或是标记分割,但是会有参数引用和命令替换。
用[[ … ]]测试结构比用[ … ]更能防止脚本里的许多逻辑错误。比如说,&&,||,<和>操作符能在一个[[]]测试里通过,但在[]结构会发生错误。
- so:方案
使用
bash zkServer.sh
或者
./zkServer.sh
代替
sh zkServer.sh