本教程含有两个脚本:
在~/shell/
新建scp脚本:
脚本一:从master复制内容到slave1、slave2
vi scp_all.sh
#!/bin/bash prame=$1 #接收文件名 dirname=`dirname $1` cd $dirname #进入该文件路径下 fullpath=`pwd -P .` #获得该文件的绝对路径 user=`whoami` #获得当前用户的身份 for ip in master slave1 slave2 #循环三个主机名 do echo ============ $ip ============= scp -r $prame ${user}@$ip:$fullpath done
chmod a+x scp_all.sh
使用说明
比如此两句话:
scp mapred-site.xml yarn-site.xml hadoop-sny@slave1:~/bigdata/hadoop-2.7.5/etc/hadoop/
scp mapred-site.xml yarn-site.xml hadoop-sny@slave2:~/bigdata/hadoop-2.7.5/etc/hadoop/
可替换成:
cd ~/bigdata/hadoop-2.7.5/etc/hadoop/
~/shell/scp_all.sh mapred-site.xml
~/shell/scp_all.sh yarn-site.xml
脚本二:用于执行三台服务器同样的指令,如jps
vi call_all.sh
#!/bin/bash prame=$1 #接收命令参数 for ip in master slave1 slave2 #循环三个主机名 do echo ============= $ip $prame ============== ssh $ip "source ~/.bash_profile;$prame" done
chmod a+x call_all.sh
使用说明
比如我们要在三台服务器执行jps
命令,可直接在master执行:
~/shell/call_all.sh jps
参考脚本:
对比与脚本一,如节点很多的时候,可参考下面方式
#!/bin/bash prame=$1 #接收文件名 dirname=`dirname $1` basename=`basename $1` #得到文件的basename cd $dirname #进入该文件路径下 fullpath=`pwd -P .` #获得该文件的绝对路径 user=`whoami` #获得当前用户的身份 for(( i = 1; i < 3; i = $i + 1 ));do #遍历发送 echo ============ node$i ============= scp -rv $prame ${user}@node$i:$fullpath done