本地模式:单机运行,演示一下官方案例,生成环境不用。
本地运行模式:在hadoop-3.1.3目录下创建wcinput文件夹
[root@hadoop102 hadoop-3.1.3]# mkdir wcinput
创建一个文件,输入一些内容
vim word.txt
hadoop yarn hadoop mapreduce atguigu atguigu
目的:统计这个文件里的每个单词出现的次数
回到 Hadoop 目录/opt/module/hadoop-3.1.3
执行程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput wcoutput
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput/ ./wcoutput
查看结果
cat wcoutput/part-r-00000
完全分布式运行模式 1. 集群分发脚本 xsync
scp 安全拷贝:scp 可以实现服务器与服务器之间的数据拷贝
前提:在hadoop102,103,104都存在/opt/moudule/ ,/opt/software/ 文件夹
第一种方式,在hadoop102上推送数据给hadoop103
在 hadoop102 上,将 hadoop102 中/opt/module/jdk1.8.0_212 目录拷贝到hadoop103 上
命令:
scp -r /opt/module/jdk1.8.0_212 zuck@hadoop103:/opt/module
需要yes 然后输入密码
第二种方式,可以在hadoop103上,去拉取102中的hadoop内容。
[zuck@hadoop103 module]$ scp -r root@hadoop102:/opt/module/hadoop-3.1.3 ./
至此 103的JDK和HADOOP已经拷贝完成。
第三种方式,站在hadoop103上,将hadoop102的数据拷贝到hadoop104上
命令分析:
scp -r root@hadoop102:/opt/module/* zuck@hadoop104:/opt/module/
rsync 远程同步工具
rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync 和 scp 区别:用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更新。scp 是把所有文件都复制过去。
测试一下这个工具
删掉hadoop103上的wcinput
[zuck@hadoop103 hadoop-3.1.3]$ ls
bin etc include lib libexec LICENSE.txt NOTICE.txt README.txt sbin share wcinput wcoutput
[zuck@hadoop103 hadoop-3.1.3]$ rm -rf wcinput/ wcoutput/
现在将hadoop102上的内容(里面有wcinput,wcoutput)同步到hadoop103上
在hadoop102上输入以下命令:(在module目录下输入)
rsync -av hadoop-3.1.3/ zuck@hadoop103:/opt/module/hadoop-3.1.3/
...... wcinput/ wcinput/word.txt wcoutput/ wcoutput/._SUCCESS.crc wcoutput/.part-r-00000.crc wcoutput/_SUCCESS wcoutput/part-r-00000 sent 4,809,055 bytes received 5,483,651 bytes 457,453.60 bytes/sec total size is 844,991,426 speedup is 82.10 [zuck@hadoop102 module]$
回到hadoop103上查看wcinput,wcoutput文件又同步了。
xsync 集群分发脚本
需求:循环复制文件到所有节点的相同目录下
期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径)
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. 在/home/atguigu/bin 目录下创建 xsync 文件
[atguigu@hadoop102 opt]$ cd /home/atguigu [atguigu@hadoop102 ~]$ mkdir bin [atguigu@hadoop102 ~]$ cd bin [atguigu@hadoop102 bin]$ vim xsync
2. 脚本的代码
#!/bin/bash #1. 判断参数个数 if [ $# -lt 1 ] #如果参数小于1 then echo Not Enough Arguement! #输出没有参数然后退出 exit; fi #2. 遍历集群所有机器 for host in hadoop102 hadoop103 hadoop104 # 获取到3台主机的名称 do echo ==================== $host ==================== #3. 遍历所有目录,挨个发送 for file in $@ # 遍历你给的路径的个数,多少个都行,一般传1个值 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
3. 核心代码分析:
pdir = $(cd -P $(dirname $file);pwd)
获取父目录,无论你传的路径是相对路径还是绝对路径,都可以获得到你输入的路径,
-P的含义:软连接,命令 ln -s aaa bbb (给aaa创建了一个软连接)
输入cd bbb时,进入了/home/xxx/bbb
输入 cd -P bbb时,进入了/home/xxx/aaa
vim xsync 将上面代码输入进去
创建了xsync,但是还没有可执行的权限。
输入
chmod 777 xsync
使用一下xsync脚本,在hadoop102上同步一下bin目录
xsync bin/
这里我出现了
[zuck@hadoop102 ~]$ xsync bin/
bash: xsync: command not found...
Similar command is: 'sync'
这个问题,解决方法在bash: xsync: command not found的解决方法_Faith-CSDN博客
脚本执行情况:
同步分发完毕
目前需要把/etc/profile.d/my_env.sh 分发到其他两台服务器,是否能行呢?
在hadoop102下输入以下命令(/home/目录下执行):
sudo ./bin/xsync /etc/profile.d/my_env.sh
完成执行:
去hadoop103机器上查看
sudo vim /etc/profile.d/my_env.sh
在hadoop103和hadoop104上source一下,让配置生效
[zuck@hadoop103 bin]$ source /etc/profile
[zuck@hadoop103 bin]$ java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
[zuck@hadoop103 bin]$
至此,hadoop102,103,104机器上所有的java,hadoop以及对应的环境变量都安装并配置好了。
xsync脚本需要稍加了解,知道如何去使用他去分发。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)