centos7搭建hadoop集群之rsync和xsync和xcall

准备工作

免密登录,可参考:https://blog.csdn.net/yhblog/article/details/84029535
此文章是基于centos7minimal版本的,纯净系统,所以还需要安装rsync工具(确保所有节点都必须安装rsync)
否则报错:

在这里插入图片描述
安装成功:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

启动rsync服务
systemctl start rsyncd.service
systemctl enable rsyncd.service

运行结果:

在这里插入图片描述

rsync(remote synchronization):意为把本机上的文件或者目录远程同步到其他服务器,通过过程中只会把需要同步的文件与远程服务器上的存放目录做对比(如果存在相同的文件或者目录会进一步比较其中的内容),远程服务器上没有的或者内容不同的才会同步过去,远程服务器上原来就有的也原封不动的存在。

原始操作命令: rsync -rvl local_file_path remote_username@remote_ip:remote_file_path
注:remote_username为远程服务器上的在线用户,remote_ip可以换做主机名,前提是本机和远程服务器做了hosts映射
如:rsync -rvl /opt/module york@192.168.221.129:/opt/module
注:rsync -rvl 后面可以跟相对路径和绝对路径,但如果使用相对路径需要先进入到填写的路径的父目录(最好使用绝对路径)

在这里插入图片描述
使用xsync脚本循环同步文件到各个目标节点的相同目录下(需要用户具有root权限或者直接使用root用户创建xsync)
1.sudo创建xsync文件(root用户可直接创建)

在这里插入图片描述

2.创建需要同步测试的文件(分发到主机hadoop2和hadoop3)

在这里插入图片描述

本篇文章介绍的是linux集群常用的执行命令脚本(xcall)和同步文件脚本(xsync),如有错误或不当之处,还望各位大神批评指正。众所周知,在配置Linux系统时常常会遇到同一个配置文件要在多个机器上配置的烦恼,如果一台一台机器配置的话十分的繁琐且没有什么意义,那么这时就用到了如下两个脚本。

一、同步文件脚本(xsync)

  • 作用是将文件或者文件夹同步到集群上的其他从机
  • 注意需要主机和从机安装命令rsync(yum install rsync -y)

xsync脚本源码:

#!/bin/bash

# 获取输出参数,如果没有参数则直接返回
pcount=$#
if [ $pcount -eq 0 ]
then
	echo "no parameter find !";
	exit;
fi

# 获取传输文件名
p1=$1
filename=`basename $p1`
echo "load file $p1 success !"

# 获取文件的绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo "file path is $pdir"

# 获取当前用户(如果想使用root用户权限拷贝文件,在命令后加入-root参数即可)
user=$2
case "$user" in
"-root")
	user="root";;
"")
	user=`whoami`;;
*)
	echo "illegal parameter $user"
	
esac

echo $user
# 拷贝文件到从机(这里注意主机的host需要根据你的实际情况配置,要与你具体的主机名对应)
for (( host=2;host<=5;host++ ))
do 
	echo "================current host is hadoop00$host================="
	rsync -rvl $pdir/$filename $user@192.168.2.$host:$pdir
done

echo "complate !"

执行脚本

在这里插入图片描述

必须更改读写权限(使用sudo也不行)

在这里插入图片描述

执行成功(用root身份使用xsync命令,这里需要一次输入各个目标节点(需要分发文件的服务器)的root密码才能实现发送)

在这里插入图片描述

其他节点查看文件:

在这里插入图片描述

在这里插入图片描述
注意:
1.确保各个节点都安装了rsync工具并启动(针对minimal版本,因为此版本任何工具都需手动安装),可参考:https://blog.csdn.net/cdnight/article/details/78861543
2.xsync用root用户执行时,在执行过程中需要输入其他节点的root用户密码,过于繁琐,可事先给本机root用户配置ssh,通过ssh-copy-id到其他节点,实现免密登录,然后执行xsync命令就不需要输入其他各个节点的root用户密码了,可参考:https://blog.csdn.net/yhblog/article/details/84029535
下图是具有root权限的york用户,对york用户配置了ssh,可以直接执行不用输入其他用户密码:(如果除了root用户,其他用户不能执行xsync命令,就切换到root用户执行)

在这里插入图片描述

在这里插入图片描述
rsync可以将文件远程同步到其他节点的特定目录下,而xsync一般是将本机上的文件所在目录位置远程同步到其他节点相同的目录下,不过上面xsync源码可以更改存放路径,如:本机文件位置是/opt/software/demo.txt,那么远程同步后,其他节点接收文件后的存放位置也是/opt/software,然后/opt/software目录有刚同步的文件demo.txt

3.远程同步后其他节点接收文件后,此文件的使用权限是root,其他用户必须具有root权限或者更改文件的使用权限,因为使用xsync命令时是root用户使用的(这是取决于上面脚本的内容,脚本里面取了user变量值,其他目标节点都有一个共同的用户,便于执行操作)
在这里插入图片描述

比如下面是york用户使用的,则远程同步后文件的使用权限是york(当然,root具有最高权限,也可以操作任何文件):

在这里插入图片描述

在这里插入图片描述
远程同步后各个目标节点接收文件后所属者:

在这里插入图片描述

在这里插入图片描述

二、执行命令脚本(xcall)

  • 作用是在所有从机上执行相同的命令

#!/bin/bash
# 获取控制台指令
cmd=$*
# 判断指令是否为空
if (( #$cmd -eq # ))
then 
    echo "command can not be null !"
    exit
fi

# 获取当前登录用户
user=`whoami`

# 在从机执行指令,这里需要根据你具体的集群情况配置,host与具体主机名一致
for (( host=2;host<=5;host++ ))
do
        echo "================current host is 192.168.2.$host================="
    echo "--> excute command \"$cmd\""
        ssh $user@192.168.2.$host $cmd
done

echo "excute successfully !"

实例应用

# 使用当前用户在所有从机上执行‘whoami’命令
xcall whoami
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值