启动脚本:
for i in slave01 slave02 slave03 do ssh $i "/usr/local/software/zookeeper-3.4.6/bin/zkServer.sh start" done start-dfs.sh ssh master03 "/usr/local/software/hadoop-2.7.0/sbin/start-yarn.sh" ssh master04 "/usr/local/software/hadoop-2.7.0/sbin/yarn-daemon.sh start resourcemanager"启动时日志:
查看集群是否正常启动的脚本:
for i in master01 master02 master03 master04 slave01 slave02 slave03 do ssh $i "hostname;source /etc/profile;jps" done停止脚本:
[hadoop@master01 ~]$ cat stop
shell 操作:主机间文件传输示例
for i in master02 slave01 slave02 slave03 do scp -rq software hadoop@$i:/usr/local/software/ done for i in master02 slave01 slave02 slave03 do ssh $i "source /etc/profile" done 11. 注意事项: 1. hadoop用户生成的秘钥在/home/hadoop/.ssh目录中,其他用户以此类推。 2.问题:zookeeper在linux服务器上,通过java代码来控制启动与停止。 发现能控制停止,不能控制启动。解决:
JAVA_HOME=/usr/local/java/jdk1.7.0_76 PATH=$JAVA_HOME/bin:$PATH CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME export PATH export CLASSPATH3:采用shell脚本启动zookeeper,首先新建文件start.sh
写入内容(rh1 rh2 rh3 分别是主机名。此处需要ssh):
写好后保存,加上执行权限:chmod u+x start.sh
运行:./start.sh看见启动成功了,有输出。但是输入jps查看的时候,会发现没有QuorumPeerMain 进程。说明没有启动成功。
原因:
首先知道交互式shell和非交互式shell、登录shell和非登录shell是有区别的
在登录shell里,环境信息需要读取/etc/profile和~ /.bash_profile, ~/.bash_login, and ~/.profile按顺序最先的一个,并执行其中的命令。除非被 —noprofile选项禁止了;在非登录shell里,环境信息只读取 /etc/bash.bashrc和~/.bashrc
手工执行是属于登陆shell,脚本执行数据非登陆shell,而我的Linux环境配置中只对/etc/profile进行了jdk1.6等环境的配
置,所以脚本执行/usr/local/zookeeper3.4/bin/zkServer.sh start 启动zookeeper失败了
解决方法:
把profile的配置信息echo到.bashrc中 echo ‘source /etc/profile’ >~/.bashrc
在/zookeeper/bin/zkEnv.sh的中开始位置添加 export JAVA_HOME=/usr/local/jdk1.6(就像hadoop中对hadoop-env.sh的配置一样)
采用shell脚本启动zookeeper,首先新建文件start.sh
写入内容(rh1 rh2 rh3 分别是主机名。此处需要ssh):#!/bin/sh
echo “start zkServer就可以了。
总结的解决方法(下面3个方法任选1):
1、脚本代码中添加“source /etc/profile;” 改为:ssh crxy$i “source /etc/profile;/usr/local/zookeeper/bin/zkServer.sh start”
2、把profile的配置信息echo到.bashrc中 echo ‘source /etc/profile’ >~/.bashrc
3、在/zookeeper/bin/zkEnv.sh的中开始位置添加 export JAVA_HOME=/usr/local/jdk1.7.0_45(就像hadoop中对hadoop-env.sh的配置一样)