配置Hadoop集群环境-使用脚本命令实现集群文件同步

Hadoop的运行模式

hadoop一共有如下三种运行方式:

  1. 本地运行。数据存储在linux本地,测试偶尔用一下。我们上一节课使用的就是本地运行模式hadoop100。

  2. 伪分布式。在一台机器上模拟出 Hadoop 分布式系统的各个组件,各个组件在逻辑上是分离的,但是都运行在同一台物理机器上,以此来模拟分布式环境。

  3. 完全分布式。数据存储在HDFS,多台服务器工作,企业中大量使用。

要在本地去模拟这个真实的场景功能,我们需要做好如下的准备:

1)准备3台客户机(关闭防火墙、静态IP、主机名称)

2)安装javaJDK,安装Hadoop,并配置环境变量

3)配置集群

4)单点启动

5)配置ssh

6)群起并测试集群

其中,第1项我们在之前克隆虚拟机的环节中已经完成了。现在我们来看看按照JDK和Hadoop并配置环境变量的工作。有两种思路:

  1. 每台机器都去手动安装一次(上传jar包再去解压)。

  2. 把一台机器装好,把module 拷贝到其他的机器。这样就不需要省略了上传和解压的工作了。

scp 命令 -- 基本使用

我们在前面的课中把hadoop100上安装了java,hadoop这个两个软件,那我们要如何才能把对于的文件拷贝到hadoop101上去?

现在要学一个新的命令: scp。它可以实现服务器与服务器之间的数据拷贝。

1. 基本语法

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

说明:

(1)-r: 表示递归拷贝。如果要拷贝的是文件夹,就把文件夹下的内容都拷贝

(2)pdir/fname: 要拷贝的文件路径/名称

(3)user@host:pdir/$fname: 目的地用户@主机:目的地路径/名称

注意:要输入相应的账号和密码!

2.案例操作

来,我们一起看下案例实操。

背景

假设你已经:

(1)在两台虚拟机(hadoop100、hadoop101)都已经创建好了/opt/module,/opt/software两个目录

(2)在hadoop100这台机器中已经安装了jdk和hadoop。

目标

现在的目标是:要把hadoop100上的jdk文件夹拷贝到hadoop101中的相同的目录下。

操作

我们一起看具体操作:

  1. 启动虚拟机。把hadoop100和hadoop101都启动。

  2. 进入到hadoop100

  3. 命令:
    scp -r /opt/module/jdk1.8.0_212/ root@hadoop101:/opt/module/jdk1.8.0_212/

scp 命令 -- 拓展使用

上面的例子中,我们是登录到hadoop100,然后把这台机器上的文件传递到另一台机器上。根据当前登录位置的不同,它还有其他的用法。如:

  1. 拉取。在hadoop101上,拉取hadoop100机器上的内容(如下左图)。

  1. 推送。在hadoop100机器上,把文件推送到hadoop101机器上(如上右图)。
  2. 搭桥。在hadoop101机器上,把hadoop100的文件传递到hadoop102上

我们上一节的例子的操作就是做的推送。

下面,我们通过两个任务来一起看看拉取和搭桥。

任务 1 :在hadoop102上,将hadoop101中/opt/module/hadoop-3.1.3目录拷贝到hadoop102上。

分析:使用scp进行拉取

操作:

  1. 先登录到hadoop2
  2. 使用命令:

scp -r root@hadoop101:/opt/module/hadoop-3.1.3 /opt/module/

任务 2 :在hadoop101上操作,将hadoop100中/opt/module目录下所有目录拷贝到hadoop102上。

分析:使用scp进行搭桥

操作:

  1. 登录hadoop101
  2. 使用命令:

scp -r root@hadoop100:/opt/module/* root@hadoop102:/opt/module

第二课时

在上一节课中,我们已经学习了如何使用scp命令在两个服务器中进行文件的拷贝。这个命令可以解决很多的问题了。

下面我们来看一个典型的任务场景:在A机器上有一个conf文件夹,它下面已经有了4个文件,并且在B机器上也有相同的4个文件。

需求:我们在A机器上又新建了3个文件,那如何把这个3个新的文件也同步给B机器上呢?

请大家思考如何使用scp命令去解决这个问题。

有两种思路:

第一种:三个文件一个一个去拷贝。缺点是操作麻烦,要逐一操作。

第二种:重新把A上的conf拷贝到B上。缺点是会重复拷贝文件1,2,3,4。

所以问题来了:有没有更好的方式呢? 有,就是我们要学习的rsync!

(四) rsync远程同步

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

rsync和scp区别是:rsync只对差异文件做更新,而scp是把所有文件都复制过去,所以它的效果更高一些。

1. 基本语法

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

语法说明:

(1)-a:归档拷贝,尽可能让拷贝的文件之间保持一致。

(2)-v:显示拷贝过程。

(3)pdir/fname: 要拷贝的文件路径/名称

(4)user@host:pdir/$fname: 目的地用户@主机:目的地路径/名称

2. 案例实操

下面我们去操作一下。

第一步:在两台机器上准备文件。

在hadoop100的/opt/conf/ 新建1.txt, 2.txt, 3.txt, 4.txt

做一次同步。

root@hadoop100 \]$c 它会在hadoop101上创建conf目录。 第二步:在hadoop100中,添加新文件,5.txt, 6.txt, 7.txt 第三步:使用命令把新添加的文件同步到hadoop101中。 命令如下: \[root@hadoop100 \]$ rsync -av /opt/conf/ root@hadoop101:/opt/conf/ 请特别注意目录最后的尾/。有/表示拷贝这文件夹下的内容,没有/表示会拷贝这个文件夹 ****(**** ****五**** ****)**** ****xsync**** ****脚本**** ****集群**** ****之间的同步**** 我们提出一个更加高级的需求: 现在有A,B,C,D,E五台机器,我们在A上新增加了文件,那如何去同步到B,C,D,E上相同的目录下呢? 请大家思考一下? ****1.**** ****思路**** 一个合适的思路是:写一个脚本,假设名为xsync,给它指定一个参数,它的作用就是把这个位置的内容同步给其他的设备。在脚本中循环调用rsync, 把参数所对应的文件同步给所有的其他设备。最终我们可以把这个脚本文件放在环境变量中,可以在任何的地方都去调用。 ![](https://i-blog.csdnimg.cn/direct/609d0ba499eb42ffa87f5a5eb6a0e97a.png) ****2.**** ****步骤**** (1)在/root/bin目录下创建xsync文件。在这个 (2)在该文件中编写如下代码。这个部分的代码不需要会写,能看懂,了解即可。 #!/bin/bash #1. 判断参数个数 if \[ $# -lt 1

then

echo Not Enough Arguement!

exit;

fi

#2. 遍历集群所有机器

for host in hadoop100 hadoop101 hadoop102

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

(3)修改执行权限。此时,我们去查看文件,可以看到它的颜色是灰色的,不具备执行权限(如下左图)。

接下来要通过命令: chmod +x xsync(或者是chmod 777 xsync)

重新查看它的颜色,它现在已经变成执行的脚本了(如上右图)。

(4)测试使用。把这个脚本同步到其他的机器中。

root@hadoop100 \~\]$ xsync /root/bin/ ****(**** ****六**** ****)**** ****集群同步实操**** 有了上面封装的xsync这个工具之后,我们就可以很方便地把hadoop100上的环境变量配置和安装的两个软件都同步到hadoop101和hadoop102上去。 ![](https://i-blog.csdnimg.cn/direct/32141f49b0e4427b88f98887aa692db3.png) 对应的命令是: xsync /etc/profile.d/my_env.sh xsync /etc/module

相关推荐
上海云盾-高防顾问41 分钟前
如何用分布式防御抵扣大规模DDoS攻击?
分布式·ddos
my_realmy2 小时前
基于 Spark 和 Hadoop 的空气质量数据分析与预测系统
hadoop·数据分析·spark
小杜谈数2 小时前
信息系统项目管理工程师备考计算类真题讲解十四
大数据
odng2 小时前
Redis如何实现分布式锁
数据库·redis·分布式
Agatha方艺璇3 小时前
Hadoop MapReduce 图文代码讲解
大数据·hadoop·mapreduce
wuli玉shell3 小时前
Spark存储级别
大数据·分布式·spark
悻运3 小时前
Spark缓存
大数据·缓存·spark
wending-Y4 小时前
es 里的Filesystem Cache 理解
大数据·elasticsearch·mybatis