一、通用脚本

1、集群分发脚本xsync

  1. #!/bin/bash
  2. #1. 判断参数个数
  3. if [ $# -lt 1 ]
  4. then
  5. echo Not Enough Arguement!
  6. exit;
  7. fi
  8. #2. 遍历集群所有机器
  9. for host in hadoop102 hadoop103 hadoop104
  10. do
  11. echo ==================== $host ====================
  12. #3. 遍历所有目录,挨个发送
  13. for file in $@
  14. do
  15. #4. 判断文件是否存在
  16. if [ -e $file ]
  17. then
  18. #5. 获取父目录
  19. pdir=$(cd -P $(dirname $file); pwd)
  20. #6. 获取当前文件的名称
  21. fname=$(basename $file)
  22. ssh $host "mkdir -p $pdir"
  23. rsync -av $pdir/$fname $host:$pdir
  24. else
  25. echo $file does not exists!
  26. fi
  27. done
  28. done

详解:

  • scp(secure copy) 安全拷贝

scp 可以实现服务器与服务器之间的数据拷贝。 (from server1 to server2)

  1. scp -r $pdir/$fname $user@$host:$pdir/$fname
  2. 命令 递归 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
  3. eg:
  4. scp -r /opt/module/jdk1.8.0_212 atguigu@hadoop103:/opt/module
  • rsync 远程同步工具

rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync 和 scp 区别: 用 rsync 做文件的复制要比 scp 的速度快, rsync 只对差异文件做更
新。 scp 是把所有文件都复制过去

  1. rsync -av $pdir/$fname $user@$host:$pdir/$fname
  2. 命令 选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
  3. -a 归档拷贝
  4. -v 显示复制过程
  • 脚本构建过程 ```shell 需求分析: rsync 命令原始拷贝: rsync -av /opt/module atguigu@hadoop103:/opt/

期望脚本: xsync 要同步的文件名称 期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径) [atguigu@hadoop102 ~]$ echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/atgu igu/.local/bin:/home/atguigu/bin:/opt/module/jdk1.8.0_212/bin

脚本实现 在/home/atguigu/bin 目录下创建 xsync 文件 [atguigu@hadoop102 opt]$ cd /home/atguigu [atguigu@hadoop102 ~]$ mkdir bin [atguigu@hadoop102 ~]$ cd bin [atguigu@hadoop102 bin]$ vim xsync

修改脚本 xsync 具有执行权限 [atguigu@hadoop102 bin]$ chmod +x xsync 测试脚本 [atguigu@hadoop102 ~]$ xsync /home/atguigu/bin 将脚本复制到/bin 中,以便全局调用 [atguigu@hadoop102 bin]$ sudo cp xsync /bin/ 同步环境变量配置(root 所有者) [atguigu@hadoop102 ~]$ sudo ./bin/xsync /etc/profile.d/my_env.sh 注意:如果用了 sudo,那么 xsync 一定要给它的路径补全。 让环境变量生效 [atguigu@hadoop103 bin]$ source /etc/profile [atguigu@hadoop104 opt]$ source /etc/profile

  1. <a name="Po00E"></a>
  2. ## 2、SSH免密登录
  3. <br /> ![image.png](https://cdn.nlark.com/yuque/0/2022/png/25434264/1644728515086-71aa970b-3af5-4755-b6e3-d12c0d738067.png#clientId=ued7fc831-be94-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=351&id=ud0a02e0b&margin=%5Bobject%20Object%5D&name=image.png&originHeight=351&originWidth=662&originalType=binary&ratio=1&rotation=0&showTitle=false&size=70762&status=done&style=none&taskId=u32dae443-be37-4486-90b9-0d5da6ff11b&title=&width=662)
  4. ```shell
  5. 生成公钥和私钥
  6. [atguigu@hadoop102 .ssh]$ pwd
  7. /home/atguigu/.ssh
  8. [atguigu@hadoop102 .ssh]$ ssh-keygen -t rsa
  9. 然后敲(三个回车),就会生成两个文件 id_rsa(私钥)、 id_rsa.pub(公钥)
  10. 将公钥拷贝到要免密登录的目标机器上
  11. [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop102
  12. [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop103
  13. [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop104
  14. 还需要在 hadoop103 上采用 atguigu 账号配置一下无密登录到 hadoop102、 hadoop103、
  15. hadoop104 服务器上。
  16. 还需要在 hadoop104 上采用 atguigu 账号配置一下无密登录到 hadoop102、 hadoop103、
  17. hadoop104 服务器上。
  18. 还需要在 hadoop102 上采用 root 账号,配置一下无密登录到 hadoop102、 hadoop103、
  19. hadoop104;
  20. .ssh 文件夹下(~/.ssh) 的文件功能解释
  21. known_hosts 记录 ssh 访问过计算机的公钥(public key)
  22. id_rsa 生成的私钥
  23. id_rsa.pub 生成的公钥
  24. authorized_keys 存放授权过的无密登录服务器公钥

03 hadoop群起

  1. #!/bin/bash
  2. if [ $# -lt 1 ]; then
  3. echo "No Args Input..."
  4. exit
  5. fi
  6. case $1 in
  7. "start")
  8. echo " =================== 启动 hadoop 集群 ==================="
  9. echo " --------------- 启动 hdfs ---------------"
  10. ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
  11. echo " --------------- 启动 yarn ---------------"
  12. ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
  13. echo " --------------- 启动 historyserver ---------------"
  14. ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
  15. ;;
  16. "stop")
  17. echo " =================== 关闭 hadoop 集群 ==================="
  18. echo " --------------- 关闭 historyserver ---------------"
  19. ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
  20. echo " --------------- 关闭 yarn ---------------"
  21. ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
  22. echo " --------------- 关闭 hdfs ---------------"
  23. ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
  24. ;;
  25. *)
  26. echo "Input Args Error..."
  27. ;;
  28. esac

04 jpsall

  1. #!/bin/bash
  2. for host in hadoop102 hadoop103 hadoop104; do
  3. echo =============== $host ===============
  4. ssh $host jps
  5. done