- 1 本地模式
- 1.1 样例测试
- 2 完全分布模式
- 2.1 集群分发
- 2.1.1 scp命令实现服务器与服务器之间的数据安全拷贝
- 2.1.2 rsync远程同步工具
- 2.1.3 简化同步脚本编写
在对应的hadoop家目录下执行以下命令
cd /opt/module/hadoop 3.1.3 # 在hadoop-3.1.3文件下面创建一个input文件夹 mkdir input # 将Hadoop的xml配置文件复制到input cp etc/hadoop/*.xml input #执行share目录下的MapReduce程序,这里需要在hadoop的家目录下执行,如上图那样 bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep input output 'dfs[a-z.]+' #注意:输入路径output不能存在。如果存在,会抛出FileAlreadyExistsException.异常.4)查看输出结果 cd output cat part-r-00000
结果
注意运行代码中的grep不是Linux内置命令的grep,而是hadoop官方案例中的的一个方法,作用是统计符合正则表达式的单词以及统计次数,最左边的表示次数,如上边的1
案例主要是获取input目录下符合正则表达式'dfs[a-z.]+'的内容,这里可以自己添加例如文本文件进行测试如下:
- 前提条件:两个服务器之间要能ping通
- 作用:实现服务器之间的数据的拷贝,避免频繁的配置,例如JDK以及Hadoop的配置
- 语法:
scp [选项] 要拷贝的文件或者目录 拷贝的文件到哪个位置
- 常用选项:-r:用于目录的递归拷贝
- 实例:
#从本服务器拷贝文件到其他服务器:将本服务器的当前目录下的test.txt文件拷贝到用户为cxj主机名为hadoop103的服务器下的/opt/sortware目录下 scp test.txt cxj@hadoop103:/opt/sortware #从其他服务器拷贝文件到本服务器 scp cxj@hadoop102:/opt/sortware/test1.txt /opt/sortware #目录拷贝 scp -r test cxj@hadoop102:/opt/sortware
过程如下,需要输入密码验证身份
- 含义:rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。类似scp,语法是一样的,主要区别是rsync相当于差异性拷贝,就是有区别才拷贝
- 语法参考scp
- 常用选项
还有一个选项是-r,但是-a参数可以替代-r,除了可以递归同步以外,还可以同步元信息(比如修改时间、权限等)。由于 rsync 默认使用文件大小和修改时间决定文件是否需要更新,所以-a比-r更有用。更详细可以看这里:rsync 用法教程
- 实例
#文件同步 rsync -av test.txt cxj@hadoop102:/opt/sortware #目录同步 rsync -av test cxj@hadoop102:/opt/sortware
- scp与rsync对比
对于同一个文件以及使用上述命令进行了同步,当不修改test.txt文件再次同步,就会出现如下:箭头位置表示传输的文件列表
第一次传输结果
第二次传输结果
2.1.3 简化同步脚本编写目录同步是一样的,当目录下的文件删除或者修改后,再次使用该命令就会同步差异的文件,注意这是手动的同步,不是自动实时同步文件
-
问题:上述脚本都是每一次同步对于不同的服务器都要进行输入一次命令,对于同步的内容,事实上除了服务器,其他都是一样的
-
意义:通过shell脚本进行过程的简化这个过程:也就是自定义脚本,通过向脚本传递目录与文件的参数,就会自动将这个目录或文件同步到配置好的服务器的相应的位置
-
准备:在对应用户的家目录下创建bin目录
创建的原因是要将等下的shell脚本丢到里边,然后将这个shell脚本在其他地方作为一个命令执行
创建bin目录的意义是,环境变量已经自动配置用户对应家目录的bin目录的环境变量,所以可以直接输入脚本就执行对应的脚本,在家目录下通过$PATH可以看到
我这里在bin目录下创建xsync文件,名字随意,shell脚本可以是任意名,但是执行的时候就需要执行对应的名字。如果 设置的是xsync.sh那么执行命令的时候使用的是xsync.sh 参数...
更改文件名命令:mv 旧文件名 新文件名 -
实例:
#!/bin/bash if [ $# -lt 1 ] #输入的需要同步文件至少一个 then echo "无可用参数" fi for host in hadoop102 hadoop103 #服务器名列表 do for file in $@ #参数列表遍历 do if [ -e $file ] #判断本地文件是否存在 then #逻辑:切换到要同步的文件或者目录的所在目录并通过pwd获取 #绝对路径 #$()执行命令; #--P参数:表示切换到实际的路径,主要是处理软连接的问题, #因为直接cd,pwd软连接会显示软链接所在的目录,而不是软链接 #所指向的路径 #dirname:内置指令,获取目录名 pdir=$( cd -P $(dirname $file);pwd ) #basename:获取文件文件名 fname=$( basename $file ) #登录到对应的host,这里需要首先配置好主机名映射,然后执行 #创建对应的父目录,这里成功执行会有输入密码的过程 ssh $host "mkdir -p $pdir" #同步指令,参考上述 rsync -av $pdir/$fname $host:$pdir else echo "$file不存在" fi done done
- 添加可执行可执行权限:chmod u+x xsync
- 使用:
- 不足之处:第一次连接以及后续的ssh连接都需要输入密码



