shell脚本同步集群配置以及zk未启动的排查方法

一、shell脚本同步集群配置说明
维护集群不可能每台机器都通过win上传文件,通过写脚本,以第一台为标准进行配置,下发到所有机器,除非有些参数需要动态去修改
1、需要的shell脚本,给脚本一个x的权限

链接:https://pan.baidu.com/s/1_GsD–aJtQjSsjKINzBfRA
提取码:l2i7

2、使用scp适用于机器少的情况
使用scp的情况适用于机器少的时候,如果集群有1000或者更多的话,写scp要写1000行不现实,可以写一个for循环去处理,只要机器命名的命名规则是一样的,后面的001/002/003都是可以进行递增的
另外:维护一个txt,txt文档里面维护了ruozedata001/002/003机器名称的列表,写for循环的时候可以直接获取每一行每一个机器名字

[hadoop@ruozedata001 hadoop]$ cat sync_hadoop.sh
#!/bin/bash -x

HADOOP_CONF=/home/hadoop/app/hadoop/etc/hadoop/

cd $HADOOP_CONF

scp hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml  ruozedata002:$HADOOP_CONF
scp hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml  ruozedata003:$HADOOP_CONF

exit 0

1、./sync_hadoop.sh
以第一台机器为版本同步xml文件和env.sh脚本到其他机器

[hadoop@ruozedata001 hadoop]$ ./sync_hadoop.sh
+ HADOOP_CONF=/home/hadoop/app/hadoop/etc/hadoop/
+ cd /home/hadoop/app/hadoop/etc/hadoop/
+ scp hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml ruozedata002:/home/hadoop/app/hadoop/etc/hadoop/
hadoop-env.sh                                                                  100% 4233     4.1KB/s   00:00    
core-site.xml                                                                  100% 2360     2.3KB/s   00:00    
hdfs-site.xml                                                                  100% 4544     4.4KB/s   00:00    
mapred-site.xml                                                                100% 1063     1.0KB/s   00:00    
yarn-site.xml                                                                  100% 5334     5.2KB/s   00:00    
+ scp hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml ruozedata003:/home/hadoop/app/hadoop/etc/hadoop/
hadoop-env.sh                                                                  100% 4233     4.1KB/s   00:00    
core-site.xml                                                                  100% 2360     2.3KB/s   00:00    
hdfs-site.xml                                                                  100% 4544     4.4KB/s   00:00    
mapred-site.xml                                                                100% 1063     1.0KB/s   00:00    
yarn-site.xml                                                                  100% 5334     5.2KB/s   00:00    
+ exit 0

2、jps.sh
执行jps.sh,只有jps本身进程启动

[hadoop@ruozedata001 hadoop]$ ./jps.sh
+ echo '----------ruozedata001 process------------'
----------ruozedata001 process------------
+ ssh ruozedata001 /usr/java/jdk1.8.0_45/bin/jps
2743 Jps
+ echo '                                                '
                                                
+ echo '----------ruozedata002 process------------'
----------ruozedata002 process------------
+ ssh ruozedata002 /usr/java/jdk1.8.0_45/bin/jps
2229 Jps
+ echo '                                                '
                                                
+ echo '----------ruozedata003 process------------'
----------ruozedata003 process------------
+ ssh ruozedata003 /usr/java/jdk1.8.0_45/bin/jps
2231 Jps
+ echo '

3、start_cluster.sh
3.1 ./start_cluster.sh 执行启动集群的脚本, ./jps.sh查看启动的进程

[hadoop@ruozedata001 hadoop]$ ./jps.sh
+ echo '----------ruozedata001 process------------'
----------ruozedata001 process------------
+ ssh ruozedata001 /usr/java/jdk1.8.0_45/bin/jps
3216 JournalNode
3796 Jps
2920 NameNode
3740 JobHistoryServer
3023 DataNode
3583 NodeManager
zookeeper的进程没有启动
[hadoop@ruozedata001 hadoop]$ ps -ef | grep zookeeper
hadoop    3850  2711  0 16:47 pts/0    00:00:00 grep --color=auto zookeeper

3.2 找zk log

[hadoop@ruozedata001 ~]$ cd app/zookeeper
log日志一般在配置文件里面
[hadoop@ruozedata001 zookeeper]$ cd conf
一般是在cfg里面
[hadoop@ruozedata001 conf]$ cat zoo.cfg
可以看到data的路径,没有问题
dataDir=/home/hadoop/data/zookeeper

查看log4j.properties
[hadoop@ruozedata001 conf]$ more log4j.properties
# Define some default values that can be overridden by system properties
zookeeper.root.logger=INFO, CONSOLE
zookeeper.console.threshold=INFO
zookeeper.log.dir=.     .代表的是当前路径
zookeeper.log.file=zookeeper.log   找到log日志文件是zookeeper.log

3.3找不到zookeeper.log

查找zookeeper.log日志文件位置,找不到zookeeper.log
[hadoop@ruozedata001 conf]$ find /home/hadoop -name 'zookeeper.log' 
[hadoop@ruozedata001 conf]$ exit
logout
[root@ruozedata001 ~]# find / -name 'zookeeper.log'

3.4 zkServer.sh 启动源头
zkServer.sh start|stop|status

[hadoop@ruozedata001 bin]$ vi zkServer.sh
case $1 in
start)
    echo  -n "Starting zookeeper ... "
    if [ -f "$ZOOPIDFILE" ]; then
      if kill -0 `cat "$ZOOPIDFILE"` > /dev/null 2>&1; then
         echo $command already running as process `cat "$ZOOPIDFILE"`.
         exit 0
      fi
    fi
    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 &
    if [ $? -eq 0 ]
    then
#nohup  ----&  这个是标准的后台执行的一个shell脚本的程序
#nohup xxx > xxx.log  | 2>&1 & 
#搜索:/ZOO_LOG_DIR= 不存在
if [ ! -w "$ZOO_LOG_DIR" ] ; then
mkdir -p "$ZOO_LOG_DIR"
fi
_ZOO_DAEMON_OUT="$ZOO_LOG_DIR/zookeeper.out"
找到log文件的名字输出是zookeeper.out

3.5 找到log文件的名字输出是zookeeper.out

[root@ruozedata001 hadoop]# cat zookeeper.out
nohup: failed to run command ‘java’: No such file or directory
[root@ruozedata001 hadoop]# 
[root@ruozedata002 ~]# which java
/usr/java/jdk1.8.0_45/bin/java

3.6 分析错误:
nohup: failed to run command ‘java’: No such file or directory
既然存在,可以先cat start_cluster.sh 可以看到启动的是ssh zuozedata001 …
远程执行ssh ruozedata001 “which java”

[hadoop@ruozedata001 hadoop]$ ssh ruozedata001 "which java"
which: no java in (/usr/local/bin:/usr/bin)
[hadoop@ruozedata001 hadoop]$ ssh ruozedata001 "echo $JAVA_HOME"
/usr/java/jdk1.8.0_45
[hadoop@ruozedata001 hadoop]$ ssh ruozedata001 "echo $PATH"
/home/hadoop/app/hadoop/bin:/home/hadoop/app/hadoop/sbin:/home/hadoop/app/zookeeper/bin:/usr/java/jdk1.8.0_45/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin
[hadoop@ruozedata001 hadoop]$ 
只执行which Java
[hadoop@ruozedata001 hadoop]$ which java
/usr/java/jdk1.8.0_45/bin/java

3.7找到 zkEnv.sh
一般写shell脚本时,一般会把公共的配置的脚本抽离出来单独写一个.sh的文件
可以定位到zkEnv.sh的一个shell脚本
目的是看启动的时候,Java它的赋值在哪

if [ -e "$ZOOBIN/../libexec/zkEnv.sh" ]; then
  . "$ZOOBINDIR/../libexec/zkEnv.sh"
else
  . "$ZOOBINDIR/zkEnv.sh"           .表示执行这个shell脚本
fi
[hadoop@ruozedata001 bin]$ vi zkEnv.sh
if [ "$JAVA_HOME" != "" ]; then
  JAVA="$JAVA_HOME/bin/java"
else
  JAVA=java
fi

3.8检查 $JAVA_HOME

echo "--------ruoze: $JAVA_HOME----------"
if [ "$JAVA_HOME" != "" ]; then
  JAVA="$JAVA_HOME/bin/java"
else
  JAVA=java
fi
尝试执行启动
有打印结果说明JAVA_HOME它的值拿的是空的,那么JAVA赋的值是Java,在shell脚本执行的时候
不能找到Java真正执行的命令在哪里

3.8.1 写死路径

if [ "$JAVA_HOME" != "" ]; then
  JAVA="$JAVA_HOME/bin/java"
else
  JAVA=/usr/java/jdk1.8.0_45/bin/java
fi
启动成功
[hadoop@ruozedata001 hadoop]$ ssh ruozedata001 "$ZOOKEEPER_HOME/bin/zkServer.sh start"
JMX enabled by default
-------------------ruoze: ------
Using config: /home/hadoop/app/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@ruozedata001 hadoop]$ ps -ef|grep zookeeper
hadoop    5190     1  1 18:32 ?        00:00:00 /usr/java/jdk1.8.0_45/bin/java -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp /home/hadoop/app/zookeeper/bin/../build/classes:/home/hadoop/app/zookeeper/bin/../build/lib/*.jar:/home/hadoop/app/zookeeper/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/hadoop/app/zookeeper/bin/../lib/slf4j-api-1.6.1.jar:/home/hadoop/app/zookeeper/bin/../lib/netty-3.7.0.Final.jar:/home/hadoop/app/zookeeper/bin/../lib/log4j-1.2.16.jar:/home/hadoop/app/zookeeper/bin/../lib/jline-0.9.94.jar:/home/hadoop/app/zookeeper/bin/../zookeeper-3.4.6.jar:/home/hadoop/app/zookeeper/bin/../src/java/lib/*.jar:/home/hadoop/app/zookeeper/bin/../conf: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain /home/hadoop/app/zookeeper/bin/../conf/zoo.cfg
hadoop    5211  2711  0 18:33 pts/0    00:00:00 grep --color=auto zookeeper

3.8.2 ssh执行远程命令和脚本
bash模式: 加载环境变量配置文件: 个人.bashrc
全局 /etc/profile
个人 ~/.bash_profile .bashrc

[hadoop@ruozedata001 hadoop]$ vi ~/.bashrc
环境变量配置添加
export JAVA_HOME=/usr/java/jdk1.8.0_45
export PATH=$JAVA_HOME/bin:$PATH

[hadoop@ruozedata001 hadoop]$ ssh ruozedata001 "which java"
/usr/java/jdk1.8.0_45/bin/java
[hadoop@ruozedata001 hadoop]$ 
启动成功
[hadoop@ruozedata001 hadoop]$ kill -9 5190
[hadoop@ruozedata001 hadoop]$ ssh ruozedata001 "$ZOOKEEPER_HOME/bin/zkServer.sh start"
JMX enabled by default
-------------------ruoze: /usr/java/jdk1.8.0_45------
Using config: /home/hadoop/app/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@ruozedata001 hadoop]$ ps -ef|grep zookeeper
hadoop    5368     1  2 18:42 ?        00:00:00 /usr/java/jdk1.8.0_45/bin/java -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp /home/hadoop/app/zookeeper/bin/../build/classes:/home/hadoop/app/zookeeper/bin/../build/lib/*.jar:/home/hadoop/app/zookeeper/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/hadoop/app/zookeeper/bin/../lib/slf4j-api-1.6.1.jar:/home/hadoop/app/zookeeper/bin/../lib/netty-3.7.0.Final.jar:/home/hadoop/app/zookeeper/bin/../lib/log4j-1.2.16.jar:/home/hadoop/app/zookeeper/bin/../lib/jline-0.9.94.jar:/home/hadoop/app/zookeeper/bin/../zookeeper-3.4.6.jar:/home/hadoop/app/zookeeper/bin/../src/java/lib/*.jar:/home/hadoop/app/zookeeper/bin/../conf: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain /home/hadoop/app/zookeeper/bin/../conf/zoo.cfg
hadoop    5389  2711  0 18:43 pts/0    00:00:00 grep --color=auto zookeeper
[hadoop@ruozedata001 ~]$ scp .bashrc ruozedata002:/home/hadoop/
.bashrc                                                                        100%  307     0.3KB/s   00:00    
[hadoop@ruozedata001 ~]$ scp .bashrc ruozedata003:/home/hadoop/
.bashrc                                                                        100%  307     0.3KB/s   00:00    
[hadoop@ruozedata001 ~]$ cd script/hodoop/
[hadoop@ruozedata001 hadoop]$ ./stop_cluster.sh
[hadoop@ruozedata001 hadoop]$ ./start_cluster.sh
[hadoop@ruozedata001 hadoop]$ ./jps.sh
+ echo '----------ruozedata001 process------------'
----------ruozedata001 process------------
+ ssh ruozedata001 /usr/java/jdk1.8.0_45/bin/jps
7249 JobHistoryServer
6707 DFSZKFailoverController
6899 NodeManager
6231 NameNode
6088 QuorumPeerMain
6793 ResourceManager
7322 Jps
6334 DataNode
6527 JournalNode

全部启动成功

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值