3. ssh zk集群无法启动的排查思路

1. 按照下面脚本 启动 hdfs集群

for i in {1..3};do

ssh ruozedata00$i "/home/hadoop/app/zookeeper/bin/zkServer.sh start"

done

sleep 5s

start-dfs.sh

sleep 5s

start-yarn.sh

sleep 5s

ssh ruozedata002 "/home/hadoop/app/hadoop/sbin/yarn-daemon.sh start resourcemanager"

mr-jobhistory-daemon.sh start historyserver


启动之后, jps 查看, 发现 zk并没有启动


ps 查看, 没有zk 进程


看下配置文件, 找log目录

cat zoo.cfg


只有这一个 Dir的配置, 找不到log 目录

cat log4j.properties


发现如上配置, 表示 log 目录在当前目录, 文件名为 zookeeper.log

但是当前目录没有发现这个文件, 通过find / -name "zookeeper.log" 查看

并没有找到


看来要到源头去找问题了, 源头在哪? 启动脚本

2. 查看启动脚本 zkServer.sh

看下 启动部分

nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \

    -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &

可以看到 zk的日志目录为 ${ZOO_LOG_DIR}

找到了 日志文件


查看 zkEnv.sh 把 ZOO_LOG_DIR 改为 /home/hadoop/app/zookeeper/logs


cd /home/hadoop/app/zookeeper/

mkdir logs

再次启动 zk

看到了这个log文件


查看内容

nohup: failed to run command ‘java’: No such file or directory

提示java 命令运行不了

确实运行不了


3.  回头看下启动脚本

nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \

$JAVA 在 zkEnv.sh 中的定义


可以看到, 如果 $JAVA_HOME 不为空, JAVA=$JAVA_HOME/bin/java

否则 JAVA=java

加入

echo "----------------------java: "

echo $JAVA_HOME

echo $JAVA

看打印输出


发现打印为空, 课件 $JAVA= "", 执行 的是 else JAVA=java

而通过 ssh 执行 java 会报错


所以可以看出启动失败是因为:

ssh 执行 java 不成功

为什么会不成功?

4. 理解 linux 的ssh

预备知识: bash的四种模式,bash会依据这四种模式而选择加载不同的配置文件,而且加载的顺序也有所不同,

ssh user@remote command 属于

non-interactive + non-login shell 模式, 即会创建一个shell,执行完脚本之后便退出,不再需要与用户交互。

其加载 环境变量是只从用户的家目录的 .bashrc加载

5.  解决问题方法

    5.1)  将 zkEnv.sh 中的 java写成绝对路径

    if [ "$JAVA_HOME" != "" ]; then

      JAVA="$JAVA_HOME/bin/java"

    else

    JAVA=java 改为JAVA=/usr/java/jdk1.8.0_45/bin/java

    fi

    5.2) 将 JAVA 的环境变量配置在 /home/haoop/.bashrc中

    vim /home/haoop/.bashrc

    export JAVA_HOME=/usr/java/jdk1.8.0_45

    export PATH=$JAVA_HOME/bin:$PATH

6.  启动测试

将 ruozedata001 的  /home/haoop/.bashrc 拷贝到 ruozedata00{2,3} 中

scp ~/.bashrc ruozedata002:/home/hadoop/

scp ~/.bashrc ruozedata003:/home/hadoop/

启动 集群, 正常


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Hadoop HA集群搭建文档.............................................
    钟敏_1788阅读 5,345评论 0 0
  • 说明:不少读者反馈,想使用开源组件搭建Hadoop平台,然后再部署Kylin,但是遇到各种问题。这里我为读者部署一...
    大诗兄_zl阅读 6,355评论 0 2
  • 搭建Hadoop的HDFS HA及YARN HA集群,基于2.7.1版本安装。 安装规划 角色规划IP/机器名安装...
    木木与呆呆阅读 4,578评论 0 7
  • 千万不要和最好的朋友做生意,千万不要跟最好的朋友借钱,千万不要没本事充胖子。 毕业有两年了,在这两年里,我把从小到...
    塘小柒阅读 4,260评论 0 3
  • 左手持方,右手划圆 一边倒海水,一边捧火焰 喋喋不休,各持己见 却无非同一个梦想 让现实紧挽住理想的臂弯 纠缠,纠缠
    浅夏诗音阅读 3,106评论 2 7

友情链接更多精彩内容