zoukankan      html  css  js  c++  java
  • Hadoop的分发脚本编写

    手上有4台阿里云,正好可以搭建集群,就要把刚刚配置的单节点的数据拷贝过去。

     编写集群分发脚本xsync

    1.    scp(secure copy)安全拷贝

    (1)scp定义:

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

    (2)基本语法

    Linux scp 命令用于 Linux 之间复制文件和目录。

    scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。

    scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版。

    语法

    scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
    [-l limit] [-o ssh_option] [-P port] [-S program]
    [[user@]host1:]file1 [...] [[user@]host2:]file2

    简易写法:

    scp [可选参数] file_source file_target 

    参数说明:

    • -1: 强制scp命令使用协议ssh1
    • -2: 强制scp命令使用协议ssh2
    • -4: 强制scp命令只使用IPv4寻址
    • -6: 强制scp命令只使用IPv6寻址
    • -B: 使用批处理模式(传输过程中不询问传输口令或短语)
    • -C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
    • -p:保留原文件的修改时间,访问时间和访问权限。
    • -q: 不显示传输进度条。
    • -r: 递归复制整个目录。
    • -v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
    • -c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
    • -F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
    • -i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
    • -l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
    • -o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
    • -P port:注意是大写的P, port是指定数据传输用到的端口号
    • -S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。

    命令格式:

    scp local_file remote_username@remote_ip:remote_folder 
    或者 
    scp local_file remote_username@remote_ip:remote_file 
    或者 
    scp local_file remote_ip:remote_folder 
    或者 
    scp local_file remote_ip:remote_file 
    • 第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;
    • 第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名;

    应用实例:

    scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music 
    scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music/001.mp3 
    scp /home/space/music/1.mp3 www.runoob.com:/home/root/others/music 
    scp /home/space/music/1.mp3 www.runoob.com:/home/root/others/music/001.mp3

    (3)案例实操

    (a)在hadoop101上,将hadoop101中/opt/module目录下的软件拷贝到其他节点上。

    [root@hadoop001 hadoop]# scp -r /opt/module  root@hadoop002:/opt/module
    The authenticity of host 'hadoop002 (47.111.251.212)' can't be established.
    ECDSA key fingerprint is SHA256:YNsodxgiTBhRi6BaO1LqQrkOeudAVMaRisZJQdaJdAA.
    ECDSA key fingerprint is MD5:b5:82:88:93:92:6a:01:ed:4d:6f:80:bc:68:1a:e8:c9.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added 'hadoop002,47.111.251.212' (ECDSA) to the list of known hosts.
    root@hadoop002's password:
    Permission denied, please try again.
    root@hadoop002's password:
    THIRDPARTYLICENSEREADME.txt                                                                                                        100%  142KB   6.2MB/s   00:00
    LICENSE                                                                                                                            100%   11KB   1.9MB/s   00:00
    NOTICE                                                                                                                             100%   13KB   2.2MB/s   00:00
    3RDPARTY                                                                                                                           100%   11KB   1.8MB/s   00:00
    dblook.bat                                                                                                                         100% 1387   236.1KB/s   00:00

    (b)将hadoop101中/etc/profile文件拷贝到其他节点的/etc/profile上。

    [root@hadoop001 hadoop-2.7.2]# scp /etc/profile root@hadoop002:/etc/profile
    root@hadoop002's password:
    profile                                                                                                                            100% 2012   342.8KB/s   00:00
    [root@hadoop001 hadoop-2.7.2]# scp /etc/profile root@hadoop003:/etc/profile
    root@hadoop003's password:
    profile                                                                                                                            100% 2012   529.6KB/s   00:00
    [root@hadoop001 hadoop-2.7.2]# scp /etc/profile root@hadoop004:/etc/profile

    注意:拷贝过来的配置文件别忘了source一下/etc/profile,。

    2.    rsync 远程同步工具

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

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

           (1)基本语法

    rsync    -rvl       $pdir/$fname              $user@hadoop$host:$pdir/$fname

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

             选项参数说明

    表2-2

    选项

    功能

    -r

    递归

    -v

    显示复制过程

    -l

    拷贝符号连接

    (2)案例实操

                  (a)把hadoop101机器上的/opt/module目录同步到hadoop003服务器的root用户下的/opt/目录

    [root@hadoop001 hadoop]# vim /etc/hosts
    [root@hadoop001 hadoop]# rsync -rvl /opt/module/ root@hadoop003:/opt/module
    The authenticity of host 'hadoop003 (47.111.232.53)' can't be established.
    ECDSA key fingerprint is SHA256:YKGJjhv5Q/fneno2xR5HWQjFBkeZL09SF4RwtWI8tC4.
    ECDSA key fingerprint is MD5:30:ad:2b:59:1c:a8:37:d3:bf:69:6b:7d:8f:ee:3b:b8.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added 'hadoop003,47.111.232.53' (ECDSA) to the list of known hosts.
    root@hadoop003's password:
    sending incremental file list
    created directory /opt/module
    ./
    hadoop-2.7.2/
    hadoop-2.7.2/LICENSE.txt
    hadoop-2.7.2/NOTICE.txt
    hadoop-2.7.2/README.txt
    hadoop-2.7.2/hdfs-site.xml
    hadoop-2.7.2/bin/
    hadoop-2.7.2/bin/container-executor
    hadoop-2.7.2/bin/hadoop

    3.    xsync集群分发脚本

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

     (2)需求分析:

         (a)rsync命令原始拷贝:

    rsync  -rvl     /opt/module              root@hadoop103:/opt/

        (b)期望脚本:

                xsync要同步的文件名称

    (3)脚本实现

    (a)在/usr/local/bin目录下xsync创建文件,文件内容如下:

    [root@hadoop002 module]# cd /usr/local/bin
    [root@hadoop002 bin]# ll
    total 4
    -rw-r--r-- 1 root root 498 Jan 14 22:57 xsync
    [root@hadoop002 bin]# chmod 777 xsync
    [root@hadoop002 bin]# ll
    total 4
    -rwxrwxrwx 1 root root 498 Jan 14 22:57 xsync
    [root@hadoop002 bin]# pwd
    /usr/local/bin
    [root@hadoop002 bin]# cat xsync
    #!/bin/bash
    #1 获取输入参数个数,如果没有参数,直接退出
    pcount=$#
    if((pcount==0)); then
    echo no args;
    exit;
    fi
    
    #2 获取文件名称
    p1=$1
    fname=`basename $p1`
    echo fname=$fname
    
    #3 获取上级目录到绝对路径
    pdir=`cd -P $(dirname $p1); pwd`
    echo pdir=$pdir
    
    #4 获取当前用户名称
    user=`whoami`
    
    #5 循环
    for((host=3; host<5; host++)); do
            echo ------------------- hadoop$host --------------
            rsync -rvl $pdir/$fname $user@hadoop00$host:$pdir
    done
    
    [root@hadoop002 bin]#
  • 相关阅读:
    10 个深恶痛绝的 Java 异常。。
    为什么公司宁愿 25K 重新招人,也不给你加到 20K?原因太现实……
    推荐一款代码神器,代码量至少省一半!
    Spring Cloud Greenwich 正式发布,Hystrix 即将寿终正寝。。
    hdu 3853 LOOPS(概率 dp 期望)
    hdu 5245 Joyful(期望的计算,好题)
    hdu 4336 Card Collector(期望 dp 状态压缩)
    hdu 4405 Aeroplane chess(概率+dp)
    hdu 5036 Explosion(概率期望+bitset)
    hdu 5033 Building (单调栈 或 暴力枚举 )
  • 原文地址:https://www.cnblogs.com/dalianpai/p/12194593.html
Copyright © 2011-2022 走看看