集群同步文件分发脚本编写

简介: 集群同步文件分发脚本编写

1 scp(secure copy)安全拷贝

(1)scp定义:

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

(2)基本语法

scp    -r          $pdir/$fname              $user@hadoop$host:$pdir/$fname

命令 递归 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称

(3)案例实操

(a)在hadoop102上,将hadoop102中/opt/module目录下的软件拷贝到hadoop103上。

[oldlu@hadoop102 ~]$ scp -r /opt/module/*  oldlu@hadoop103:/opt/module

(b)在hadoop104上,将hadoop102服务器上的/opt/module目录下的软件拷贝到hadoop104上。

[oldlu@hadoop104 opt]$ scp -r oldlu@hadoop102:/opt/module/* oldlu@hadoop104:/opt/module

注意:拷贝过来的/opt/module目录,别忘了在hadoop102、hadoop103、hadoop104上修改所有文件的,所有者和所有者组。sudo chown oldlu:oldlu -R /opt/module

2 rsync远程同步工具

rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。

rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。

(1)基本语法

rsync    -av       $pdir/$fname              $user@hadoop$host:$pdir/$fname

命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称

选项参数说明

选项 功能

-a 归档拷贝

-v 显示复制过程

(2)案例实操

(a)将hadoop102中/etc/profile.d/my_env.sh文件拷贝到hadoop103的/etc/profile.d/my_env.sh上。

[oldlu@hadoop102 ~]$ sudo rsync -av /etc/profile.d/my_env.sh 

root@hadoop103:/etc/profile.d/my_env.sh

(b)将hadoop102中/etc/profile.d/my_env.sh文件拷贝到hadoop103的/etc/profile.d/my_env.sh上。

[oldlu@hadoop102 ~]$ sudo rsync -av /etc/profile.d/my_env.sh root@hadoop104:/etc/profile.d/my_env.sh

注意:拷贝过来的配置文件别忘了source一下/etc/profile.d/my_env.sh。

3 xsync集群分发脚本

(1)需求:循环复制文件到所有节点的相同目录下

(2)需求分析:

(a)rsync命令原始拷贝:

rsync  -av     /opt/module       root@hadoop103:/opt/

(b)期望脚本:

xsync要同步的文件名称

(c)说明:在/home/oldlu/bin这个目录下存放的脚本,oldlu用户可以在系统任何地方直接执行。

(3)脚本实现

(a)在用的家目录/home/oldlu下创建bin文件夹

[oldlu@hadoop102 ~]$ mkdir bin

(b)在/home/oldlu/bin目录下创建xsync文件,以便全局调用

[oldlu@hadoop102 ~]$ cd /home/oldlu/bin
[oldlu@hadoop102 ~]$ vim xsync

在该文件中编写如下代码

#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
  echo Not Enough Arguement!
  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"
      rsync -av $pdir/$fname $host:$pdir
    else
      echo $file does not exists!
    fi
  done
done

(c)修改脚本 xsync 具有执行权限

[oldlu@hadoop102 bin]$ chmod +x xsync
(d)测试脚本
[oldlu@hadoop102 bin]$ xsync xsync


目录
相关文章
|
4月前
|
SQL 数据采集 DataWorks
DataWorks产品使用合集之依赖脚本实际运行成功了,但其状态却显示为未运行,从而导致下游脚本没有运行,是什么原因
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
canal otter
使用 Otter 的 `FileSender` 插件来实现跨服务器同步文件的功能
使用 Otter 的 `FileSender` 插件来实现跨服务器同步文件的功能
164 1
编写集群分发脚本xsync
编写集群分发脚本xsync
354 0
|
Java Web App开发 Python
seleniumGrid分布式远程执行测试脚本
seleniumGrid分布式远程执行测试脚本执行UI自动化测试脚本时,不仅可以在本地执行,也可以远程指定某计算机执行测试脚本,seleniumGrid为我们提供了这类服务,但还需要自己搭建环境。 一、本地计算机需要准备java环境和selenium-server-standalone-4.0.0-alpha-2.jar包,jar包主要开启本机的hub节点(理解成控制机)。
1461 0
|
SQL 数据库
服务器 'xxxx' 已被定义为分发服务器。若要将该服务器重新配置为分发服务器,必须首先卸载现有的分发服务
原文:服务器 'xxxx' 已被定义为分发服务器。若要将该服务器重新配置为分发服务器,必须首先卸载现有的分发服务     使用AWS DMS(Database Migration Service)将SQL Server数据库同步到AWS的Data Lake上,需要在本地源数据库上配置复制,在配置分发向导最后一步时,遇到下面错误:     TITLE: Microsoft.
1102 0