|NO.Z.00005|——————————|Deployment|——|Hadoop&PB级离线数仓.v05|——|Hadoop.v05|rsync-script脚本编写|
一、分发配置:rsync-script命令详解
### --- 编写集群分发脚本rsync-script
~~~ # rsync 远程同步工具
~~~ rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
~~~ rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对# 差异文件做更新。
~~~ scp是把所有文件都复制过去。
### --- 基本语法
### --- 选项参数说明表2-2
~~~ 命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
rsync -rvl $pdir/$fname $user@$host:$pdir/$fname
选项 | 功能 |
-r | 递归 |
-v | 显示复制过程 |
-l | 拷贝符号连接 |
### --- rsync案例
~~~ 五台虚拟机安装rsync (执行安装需要保证机器联网)
[root@hadoop01 ~]# yum install -y rsync
~~~ # 把hadoop01机器上的/opt/yanqi/software目录同步到其它服务器的root用户下的/opt/目录
[root@hadoop01 ~]# rsync -rvl /opt/yanqi/software/ root@hadoop02:/opt/yanqi/software/
hadoop-2.9.2.tar.gz
[root@hadoop02 ~]# ll /opt/yanqi/software/
-rw-r--r-- 1 root root 366447449 Aug 8 18:08 hadoop-2.9.2.tar.gz
-rw-r--r-- 1 root root 194151339 Jun 30 2020 jdk-8u231-linux-x64.tar.gz
二、集群分发脚本编写
### --- 需求:循环复制文件到集群所有节点的相同目录下
~~~ # rsync命令原始拷贝:
rsync -rvl /opt/module root@hadoop05:/opt/
### --- 期望脚本
### --- 说明:在/usr/local/bin这个目录下存放的脚本,root用户可以在系统任何地方直接执行。
~~~ 脚本+要同步的文件名称
三、rsync脚本实现
### --- 脚本实现
~~~ 在/usr/local/bin目录下创建文件rsync-script,文件内容如下:
[root@hadoop01 ~]# cd /usr/local/bin/
[root@hadoop01 bin]# touch rsync-script
[root@hadoop01 bin]# vim rsync-script
### --- 在文件中编写shell代码
#!/bin/bash
#1 获取命令输入参数的个数,如果个数为0,直接退出命令
paramnum=$#
if((paramnum==0)); then
echo no params;
exit;
fi
#2 根据传入参数获取文件名称
p1=$1
file_name=`basename $p1`
echo fname=$file_name
#3 获取输入参数的绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取用户名称
user=`whoami`
#5 循环执行rsync
for((host=1; host<6; host++)); do
echo ------------------- hadoop0$host --------------
rsync -rvl $pdir/$file_name $user@hadoop0$host:$pdir
done
### --- 脚本配置说明——副本
#!/bin/bash
#需求:循环复制文件到集群所在节点的相同目录下
#使用方式:脚本+需要复制的文件名称
#脚本编写大致步骤
#1 获取传入脚本的参数,参数个数
#1 获取命令输入参数的个数,如果个数为0,直接退出命令
paramnum=$#
if((paramnum==0)); then
echo no params;
exit;
fi
#2 根据传入参数获取文件名称
p1=$1
file_name=`basename $p1`
echo fname=$file_name
#3 获取输入参数的绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取用户名称
user=`whoami`
#5 循环执行rsync
for((host=1; host<6; host++)); do
echo ------------------- hadoop0$host --------------
rsync -rvl $pdir/$file_name $user@hadoop0$host:$pdir
done
四、设置并执行脚本
### --- 修改脚本 rsync-script 具有执行权限
[root@hadoop01 ~]# chmod 777 /usr/local/bin/rsync-script
### --- 调用脚本形式:rsync-script 文件名称
[root@hadoop01 ~]# rsync-script /usr/local/bin/rsync-script
------------------- hadoop01 --------------
sending incremental file list
------------------- hadoop02 --------------
sending incremental file list
------------------- hadoop03 --------------
sending incremental file list
------------------- hadoop04 --------------
sending incremental file list
------------------- hadoop05 --------------
sending incremental file list
五、调用脚本分发Hadoop安装目录到其它节点
### --- 调用脚本分发Hadoop安装目录到其它节点
~~~ shell脚本的编写不要求大家掌握,看到别人编写的脚本要能读懂!!
[root@hadoop01 ~]# rsync-script /opt/yanqi/servers/hadoop-2.9.2
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
dov001-PB离线数仓
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了