Hadoop的分发脚本编写

Posted 天宇轩-王

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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]#

以上是关于Hadoop的分发脚本编写的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop完全分布式编写 Hadoop 集群常用脚本

大数据周会-本周学习内容总结07

Hadoop运行模式编写Hadoop集群常用脚本Hadoop集群启停脚本常用端口号说明集群时间同步时间服务器配置其他机器配置

一起学Hadoop——文件的上传分发与打包

Hadoop3.x - 本地安装 + 完全分布式安装 + 集群配置 + xsync分发脚本 (解决root用户启动Hadoop集群的报错问题)

大数据☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式