当前位置:   article > 正文

从零开始的Hadoop学习(三)| 集群分发脚本xsync_xsync 分发脚本

xsync 分发脚本

1. Hadoop目录结构

  • bin目录:存放对Hadoop相关服务(hdfs,yarn,mapred)进行操作的脚本
  • etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
  • lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
  • sbin目录:存放启动或停止Hadoop相关服务的脚本
  • share目录:存放Hadoop的依赖jar包、文档、和官方案例

2. Hadoop运行模式

本地模式伪分布式模式以及完全分布式模式

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

2.1 本地运行模式(官方 WordCount)

  • 1)创建在hadoop-3.1.3文件下面创建一个wcinput文件夹

    [atguigu@hadoop102 hadoop-3.1.3]$ mkdir wcinput
    
    • 1
  • 2)在wcinput文件下创建一个word.txt文件

    [atguigu@hadoop102 hadoop-3.1.3]$ cd wcinput
    
    • 1
  • 3)编辑 word.txt 文件

    [atguigu@hadoop102 wcinput]$ vim word.txt
    
    • 1

    在文件中输入如下内容

    hadoop yarn
    hadoop mapreduce
    atguigu
    atguigu
    
    • 1
    • 2
    • 3
    • 4
  • 4)回到Hadoop 目录/opt/module/hadoop-3.1.3

  • 5)执行程序

    [atguigu@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput wcoutput
    
    • 1
  • 6)查看结果

    [atguigu@hadoop102 hadoop-3.1.3]$ cat wcoutput/part-r-00000
    看到如下结果:
    atguigu 2
    hadoop  2
    mapreduce       1
    yarn    1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

分析:

1)准备3台客户机(关闭防火墙、静态IP、主机名称)
2)安装JDK
3)配置环境变量
4)安装Hadoop
5)配置环境变量
6)配置集群
7)单点启动
8)配置ssh
9)群起并测试集群
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
3.2.2 编写集群分发脚本 xsync

scp (secure copy) 安全拷贝

  • 1)scp 定义

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

  • 2)基本语法

    scp  -r    $pdir/$fname    $user@$host:$pdir/$fname
    命令 递归 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
    
    • 1
    • 2
  • 3)实际操作

    (a) 在hadoop102上,将hadoop102中/opt/module/jdk1.8.0_212目录拷贝到hadoop103上。

    [atguigu@hadoop102 ~]$ scp -r /opt/module/jdk1.8.0_212  atguigu@hadoop103:/opt/module
    
    • 1

    (b) 在hadoop103上,将hadoop102中/opt/module/hadoop-3.1.3目录拷贝到hadoop103上。

    [atguigu@hadoop103 ~]$ scp -r atguigu@hadoop102:/opt/module/hadoop-3.1.3 /opt/module/
    
    • 1

    © 在hadoop103上操作,将hadoop102中/opt/module目录下所有目录拷贝到hadoop104上。

    [atguigu@hadoop103 opt]$ scp -r atguigu@hadoop102:/opt/module/* atguigu@hadoop104:/opt/module
    
    • 1

rsync 远程同步工具

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

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

  • 1)基本语法

    rsync -av  $pdir/$fname  $user@$host:$pdir/$fname
    命令 选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
    
    • 1
    • 2

    选项参数说明

    选项功能
    -a归档拷贝
    -v显示复制过程
  • 2)实际操作

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

    [atguigu@hadoop103 hadoop-3.1.3]$ rm -rf wcinput/
    
    • 1

    (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/
    
    • 1

xsync集群分发脚本

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

  • 2)需求分析

    (a)rsync 命令原始拷贝:

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

    (b)期望脚本:xsync 要同步的文件名称

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

    [atguigu@hadoop102 ~]$ echo $PATH
    /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/atguigu/.local/bin:/home/atguigu/bin:/opt/module/jdk1.8.0_212/bin
    
    • 1
    • 2
  • 3)脚本实现

    (a)在/home/atguigu/bin 目录下创建 xsync 文件

    [atguigu@hadoop102 opt]$ cd /home/atguigu
    [atguigu@hadoop102 ~]$ mkdir bin
    [atguigu@hadoop102 ~]$ cd bin
    [atguigu@hadoop102 bin]$ vim xsync
    
    • 1
    • 2
    • 3
    • 4

    在该文件下编写如下代码

    #!/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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

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

    [atguigu@hadoop102 bin]$ chmod +x xsync
    
    • 1

    (c)测试脚本

    [atguigu@hadoop102 ~]$ xsync /home/atguigu/bin
    
    • 1

    (d)将脚本复制到 /bin 中,以便全局调用

    [atguigu@hadoop102 bin]$ sudo cp xsync /bin/
    
    • 1

    (e)同步案件变量配置(root所有者)

    [atguigu@hadoop102 ~]$ sudo ./bin/xsync /etc/profile.d/my_env.sh
    
    • 1

    注意:如果用了 sudo,那么xsync一定要给它的路径补全。

    让环境变量生效

    [atguigu@hadoop103 bin]$ source /etc/profile
    [atguigu@hadoop104 opt]$ source /etc/profile
    
    • 1
    • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/591682
推荐阅读
相关标签
  

闽ICP备14008679号