文档:hadoop文档

三种模式与区别

在这里插入图片描述

本地模式

基本步骤:
在这里插入图片描述
创建文件夹,进入文件夹,创建word.txt文件。编写内容:
在这里插入图片描述
演示如下:
在这里插入图片描述
执行jar文件,只想wordcount案例,指定输入(wcinput/)输出(wcout)路径:

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce examples-3.2.4.jar  wordcount   wcinput/    wcout

注意:输出路径名称是不存在的,如果存在就会冲突报错。比如wcout

执行成功:
在这里插入图片描述
查看各个字符出现次数:
在这里插入图片描述
再重新编辑一下txt文件测试:
在这里插入图片描述
回到文件夹,执行:

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.4.jar  wordcount wcinput/  wcout2

执行完查看wcout2文件夹内容,可见计数很成功:
在这里插入图片描述

完全分布式运行模式(重点)

我们只是在hadoop102上配置好了相关环境,接着需要把jdk,hadoop克隆过去到另外两台,因此需要编写集群分发脚本
在这里插入图片描述

编写集群分发脚本(安全拷贝)

在这里插入图片描述
在 hadoop102 上,将hadoop102中software/jdk-18.0.2.1目录拷贝到hadoop103上

scp -r  jdk-18.0.2.1  chuan@hadoop103:/home/chuan/software

执行如下:
在这里插入图片描述

去hadoop103查看一下:
在这里插入图片描述
上面的方法是把文件推送到另外的服务器,再来试试从别的服务器拉取到自己服务器。比如从hadoop102拉取hadoop文件到hadoop103上(./表示当前路径):

scp -r chuan@hadoop102:/home/chuan/software  ./

执行成功:
在这里插入图片描述
hadoop103查看下目录:
在这里插入图片描述

此时已经实现hadoop102到hadoop103转移了。同理处理hadoop104,这里直接一次性把文件夹全部传送过去,不一个个传送了(记得hadoop104也要创建software文件夹,前面的演示我没有创建):

scp -r chuan@hadoop102:/home/chuan/software/* chuan@hadoop104:/home/chuan/software

如下:
在这里插入图片描述
在这里插入图片描述
到hadoop104查看下:
在这里插入图片描述
最后记得soursce一下jdk和hadoop
在这里插入图片描述

远程同步

如果只是个别文件变化,不需要全部拷贝,使用rsync远程同步即可。

rsync,主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp,是把所有文件都复制过去。

语法:
在这里插入图片描述
比如把hadoop102上的wcout2删除:
在这里插入图片描述
现在希望把hadoop102上的hadoop同步到hadoop103上:

rsync -av hadoop-3.2.4/ chuan@hadoop103:/home/chuan/software/hadoop-3.2.4/

如下:
在这里插入图片描述
验证hadoop103上已经没有了:
在这里插入图片描述

集群同步分发

基于同步功能,希望只要做一个更改,就可以其它几个hadoop服务器全部实现同步。

脚本实现:
在这里插入图片描述
创建xsync
在这里插入图片描述

xsync中添加内容,内容添加后记得添加权限:

#!/bin/bash 
 
#1. 判断参数个数 
# 判断参数是否小于1
if [ $# -lt 1 ]   
then 
    echo Not Enough Arguement! 
    exit; 
fi 

#2. 遍历集群所有机器 
# 对102103104都进行分发
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

测试:

xsync /home/chuan/bin

连续输入几次密码即可:
在这里插入图片描述
验证传输成功:
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐