Zookeeper安装 Zookeeper启动 报错Error: JAVA_HOME is not set and java could not be found in PATH

Zookeeper启动 报错Error: JAVA_HOME is not set and java could not be found in PATH

背景:

原本打算安装 canal, kafkaclickhouse_sinker 配合使用。读取mysqlbinlog日志,实现 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
  • 解压下载的包
$ 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
root@han:/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)
root@han:/home/han/work/package# echo $JAVA_HOME
/home/han/work/soft/java
root@han:/home/han/work/package#
五、运行zookeeper
root@han:/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
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值