两个比较简单的shell脚本,但在大数据学习过程中非常重要,方便了对集群的管理和配置文件的同步。
准备工作:
1.hosts为机器起域名,和ip地址相同
2.ssh免密登录
3.下载rsync
集群指令分发工具脚本
#!/bin/bash
if [ $# -lt 1 ] # 如果没有参数会打印提示信息
then
echo "There is no commond to execute!"
exit
fi
LOGIN_USER_NAME=`whoami` # 获取当前登录用户的用户名
for CLU_HOSTS in 101 102 103 104 # in后放需要同步分发指令的机器,机器多时使用另一种for循环
do
echo "----------------node$CLU_HOSTS-------------------"
ssh $LOGIN_USER_NAME@node$CLU_HOSTS $* # node101--node104为节点名 $*为需同步执行的linux命令
done
注意:
1.记得需要给脚本可执行权限:chmod a+x 脚本名
2.记得给脚本放到/usr/local/bin
目录下
3.最好给jdk的bin目录下jps命令创建软链接放到/usr/bin
目录下,jps命令很常用
4.最重要一点!需要提前做好免密登录,否则每次使用脚本都要输入密码会很麻烦
集群文件分发工具脚本
#!/bin/bash
if [ $# -lt 1 ] # 若没有输入需要同步的文件会打印提示信息
then
echo "There is no file to send!"
exit
fi
P=$1 # 取文件名
FILE_NAME=`basename $P`
FILE_PATH=`dirname $P` # 取文件父路径
DIR_PATH=`cd -P $FILE_PATH;pwd`; # 若文件是软链接,取其真实父路径
LOGIN_USER_NAME=`whoami` # 取当前登录用户名
for((CLU_HOSTS=102;CLU_HOSTS<=104;CLU_HOSTS++)) # 由于文件在当前机器node101中,所以分发给其余机器
do
echo "------------------node$CLU_HOSTS-----------------------"
rsync -rlv $DIR_PATH/$FILE_NAME $LOGIN_USER_NAME@node$CLU_HOSTS:$DIR_PATH # rsync指令 这里使用循环执行多次
# 例: rsync -rvl /opt/tmp/haha.txt root@node102:/opt/tmp # 若分发位置没有同名文件则复制过去,有同名文件则覆盖
done
注意:
- 该文本使用前需要安装rsync工具:
yum install -y rsync
- rsync工具介绍:rsync远程同步工具,主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
基本语法:rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
命令 命令参数 要拷贝的文件路径/名称 目的用户@主机:目的路径
选项:
-r 递归
-v 显示复制过程
-l 拷贝符号连接