Hadoop的运行模式——第一部分

shell脚本可以没有后缀 重要的是开头的定义#!/bin/bash 此章节xsync分发脚本没有后缀

Hadoop的运行模式

  • 本地模式:单机运行,演示官方用例,生产环境不用
  • 伪分布式模式:也是单机运行,但是具备Hadoop集群的所有功能,一台服务器模拟一个分布式的环境,生产环境不用
  • 完全分布式模式:多台服务器组成分布式环境,生产环境使用

本地模式官方测试样例

## 测试官方实例
mkdir wcinput
cd wcinput
vim word.txt
## 内容如下:
xiaolong xiaolong
hello hello 
world
make make
## 运行保存
wq!
## 执行程序
hadoop jar hadoop3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount ./wcinput ./wcoutput
## 输出目录不能存在 否则会存在FileExitsError
cat wcoutput/part-r-00000 输出结果
_SUCCESS作为成功标志

编写集群分发脚本xsync

  • scp 安全拷贝

    • scp定义

      scp可以实现服务器与服务器之间的数据拷贝

    • 基本语法

      scp -r $pdir/$fname

      命令 递归 要拷贝的文件路径/名称

    • 案例

      scp -r /opt/module/jdk1.8.0_212 atguigu@hadoop103:/opt/module
      scp -r atguigu@hadoop102:/opt/module/hadoop-3.1.3 /opt/module/
      scp -r atguigu@hadoop102:/opt/module/* atguigu@hadoop104:/opt/module
  • rysnc 远程同步工具

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

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

    • 基本语法

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

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

      选项参数说明

      选项 功能
      -a 归档拷贝
      -v 显示复制过程
    • 案例实操

      (a)删除hadoop103中/opt/module/hadoop-3.1.3/wcinput

      [atguigu@hadoop103 hadoop-3.1.3]$ rm -rf wcinput/
      [atguigu@hadoop102 module]$ rsync -av hadoop-3.1.3/ atguigu@hadoop103:/opt/module/hadoop-3.1.3/

      (b)同步hadoop102中的/opt/module/hadoop-3.1.3到hadoop103

      [atguigu@hadoop102 module]$ rsync -av hadoop-3.1.3/ atguigu@hadoop103:/opt/module/hadoop-3.1.3/
  • xsync集群分发脚本

    • 需求分析

      • rsync原始命令拷贝

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

      • 期望脚本:

        xsync + 要同步的文件名称

      • 期望脚本在任何路径下都能使用(放在声明了全局环境变量的路径)

        echo $PATH
    • 脚本实现

      • ~/bin目录下创建xsync文件

        mkdir ~/atguigu/bin
        mkdir bin
        cd bin
        vim xysnc
      • 在文件中编写如下代码

        #!/bin/bash
        ## 不懂就去看看shell学习随笔
        #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
      • 修改脚本xsync具有执行权限

        chmod +x xsync

      • 测试脚本

        xysnc /home/atguigu/bin

      • 脚本复制到/bin中,全局调用

        sudo cp xysnc /bin/

      • 同步环境变量配置(root所有者)

        sudo ./bin/xsync /etc/profile.d/my_env.sh

        注意最后文件需要source使环境变量生效

        注意root用户使用xsync脚本是需要绝对路径指定的 因为root用户没有配置此环境变量

posted @ 2021-10-16 00:49  逆十字  阅读(58)  评论(0)    收藏  举报