暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Hadoop 系列(四)集群分发脚本 xsync

皮皮克克 2023-01-16
328

点击关注公众号,干货第一时间送达



上篇文章:Hadoop 系列(三)配置 JDK 和 Hadoop

小编演示了如何配置 Jdk 和 Hadoop 环境变量。

其中,先需要上传包,然后再写配置文件。

这只是在 hadoop102 一台虚拟机上的操作,

我们还有 hadoop103,hadoop104两台机器,勉强可以再在这两台机器上再操作两遍。

但是,如果有几十台,上百台机器呢?

总不能分别在各个机器上,上传文件,再配置环境变量吧?

岂不是,太太太太太太麻烦了!!!

所以,我们需要写一个方便操作的脚本,能够支持我们,

只需要上传一次文件,只配置一次环境变量,然后通过脚本分发,其他机器也能同步相同的文件,和配置。

岂不是,美滋滋!!!

(写分发脚本前,需要先介绍了两个 linux 自带的同步文件指令,scp 和 rsync。如果想直接看脚本的小伙伴,可以直接跳转到第三步骤)



一、scp 命令介绍

scp (secure copy)安全拷贝,可以实现服务器与服务器之间的数据拷贝。



1,语法

scp  -r  pdir/fname     user@host:pdir/fname
命令 递归 要拷贝的文件路径/名称  目的地用户@主机:目的地路径/名称


2,实操

(友情提示:下面的操作,因为小编之前已经配置过 SSH 免密登录,所以不需要输入密码,如遇到需要输入密码情况的小伙伴,可以翻看小编之前的文章:Hadoop 系列(二)SSH 免密登录,进行配置即可)


前提准备:在  /home/jack/opt/software/testdir 目录下,新建文件 a.txt,用于测试


2.1  在 hadoop102 上,将  hadoop102 中 /home/jack/opt/software/testdir 目录拷贝到 hadoop103 上

[jack@hadoop102 software]$ scp -r testdir/ jack@hadoop103:/home/jack/opt/module

查看 hadoop103 的  路径:/home/jack/opt/module/testdir

2.2  在 hadoop103 上,将  hadoop102 中 /home/jack/opt/software/testdir 目录拷贝到 hadoop103 上 (友情提示:记得把刚才测试生成的文件删除)

[jack@hadoop103 module]$ scp -r jack@hadoop102:/home/jack/opt/software/testdir ./


查看 hadoop103 的  路径:/home/jack/opt/module/testdir

这次不用贴图了吧


2.3  在 hadoop104 上,将  hadoop102 中 /home/jack/opt/software/testdir 目录拷贝到 hadoop103 上 (友情提示:记得把刚才测试生成的文件删除)

[jack@hadoop104 ~]$ scp -r jack@hadoop102:/home/jack/opt/software/testdir jack@hadoop103:/home/jack/opt/module/


能看出端倪不

看出来的都是小可爱!送你一朵小红花

scp 命令介绍完了,再介绍一个 rsync 命令。



二、rsync 命令介绍

rsync 远程同步工具,主要用于备份和镜像。具有速度快、避免复制相同和支持符合链接的优点。


rsync 和 scp 的区别:

用 rsync 做文件的复制要比 scp 速度快,rsync 只对差异文件更新;
而 scp 是把文件都复制过去了。


1,语法

rsync -av pdir/fname user@hostname:pdir/fname
命令 参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
参数说明:
-a 归档拷贝
-v 显示复制过程


2,实操

(通过上面 scp 的颜色,我们在 hadoop102  testdir 目录下已有 a.txt 文件,并且 hadoop103 testdir 路径下,也有该文件)

前提准备

先在 hadoop102 testdir 目录下再新增个 b.txt 文件,使用 rsync 命令做同步


执行

[jack@hadoop102 software]$ rsync -av testdir/ jack@hadoop103:/home/jack/opt/module/testdir



验证

然后去hadoop103对应路径下,查看新增的 b.txt 的时间,明显和 a.txt 不是一起的。


结论:本次执行 rsync 只是同步了 hadoop102 和 hadoop103 两个路径下差异的文件,不是 scp 那样的全面复制。所以可知,rsync 的执行速度会比 scp 高快,也是比 scp 更常用的命令。


然后,终于来到我们要介绍的 xsync 文件分发脚本

这个脚本不是 linux 自带的,不是 scp、rsync 那种。

需要我们自己写 shell 脚本。

不难



三、xsync 集群分发脚本命令编写

1,查看 PATH 环境变量,进入其中

[jack@hadoop102 ~]$ echo $PATH



可以看到,/home/jack/bin 路径存在  PATH 环境配置中,所以我们需要把 xsync 脚本写在该路径下,这样执行后,就可以全局生效了,不用再单独配置环境变量。


2,新增脚本文件

#!/bin/bash

#
1,判断参数
if [ $# -lt 1 ]
then
   ehco Not Enough Arguments!
   exit;
fi

#
2,变量集群节点,当前只有三台主机,后面增加主机后,在该处修改即可
for host in hadoop102 hadoop103 hadoop104
do
   echo ===================== $host ========================
   #3,遍历所有目录,挨个发送

   for file in $@
   do
       #4, 判断文件是否存在
       if [ -e $file ]
          then
             #5,获取父目录
             pdir=$(cd -P $(dirname $file); pwd)

             #6,获取当前文件的名称
             fname=$(basename $file)
             ssh $host "mkdir -p $pdir"
             #7,使用 rsync 命令,真正执行文件同步
             rsync -av $pdir/$fname $host:$pdir
          else
             echo $file does not exists!
       fi
   done
done



3,修改脚本文件权限

[jack@hadoop102 bin]$ chmod 777 xsync



xsync 文件变为可执行文件


4,验证

hadoop102:/home/jack/opt/software


hadoop103:/home/jack/opt/software


hadoop104:/home/jack/opt/software


3台主机,相同路径下。

在 hadoop102 执行集群分发命令,把 testdir 目录及目录下文件分发给各个节点:


然后查看 hadoop103,hadoop104 对应路径下:



即表示文件集群分发成功

简单吧?



结束语:
Ok,到此为止,就是本篇文章的全部内容了。
该文章主要讲了 Hadoop 的 集群分发脚本 xsync,为了更好的理解本文,请翻看之前的文章:
Hadoop 系列(三)配置 JDK 和 Hadoop
Hadoop 系列(二)SSH 免密登录
Hadoop系列(一)三台虚拟机环境搭建
如果各位有不懂的地方,欢迎发消息给小编,小编会进行详细地解答。
最后,请屏幕前的各位小可爱,动动你们的小手,给小编一个“在看”吧!

文章转载自皮皮克克,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论