前段时间搭建了一个zookeeper集群,原本想使用ssh命令,对集群所有节点执行相同命令。结果启动zookeeper的时候报错,执行命令和报错信息如下:
hadoop@nn1:~$ ssh hadoop@nn2 /usr/local/zookeeper/bin/zkServer.sh start
Error: JAVA_HOME is not set and java could not be found in PATH.
这里我配置的环境变量在/etc/profile中,经过查询,得知/etc/profile文件只在交互式 shell 中加载。所以在使用ssh登录时,环境变量并没有生效。
然后我再nn2节点上hadoop用户下的.bashrc文件中又添加的环境变量,我先是使用ssh登录到nn2节点,然后执行/usr/local/zookeeper/bin/zkServer.sh start,发现成功启动。然后再回到nn1使用ssh hadoop@nn2 /usr/local/zookeeper/bin/zkServer.sh start发现还是报同样的错误。就算是在.bash_profile中配置环境变量也不生效。
解决方式
使用bash -l -c 强制执行登录 shell,从而加载所有登录 shell 配置文件。
ssh hadoop@nn2 'bash -l -c "/usr/local/zookeeper/bin/zkServer.sh start"'
