配置Hadoop集群环境准备
-
(一)Hadoop的运行模式
一共有三种:
- 本地运行。
- 伪分布式
- 完全分布式
-
(二)Hadoop的完全分布式运行
-
要模拟这个功能,我们需要做好如下的准备。
1)准备3台客户机(关闭防火墙、静态IP、主机名称)
2)安装JDK,并配置环境变量
3)安装Hadoop,并配置环境变量
4)配置集群
5)单点启动
6)配置ssh
7)群起并测试集群
其中,第1项我们在之前克隆虚拟机的环节中已经完成了。现在我们来看看按照JDK和Hadoop并配置环境变量的工作。有两种思路:
1. 每台机器都去手动安装一次(上传jar包再去解压)。
2. 把一台机器装好,把module 拷贝到其他的机器。这样就不需要省略了上传和解压的工作了。
(三)scp拷贝软件到服务器
scp可以实现服务器与服务器之间的数据拷贝。
基本语法
scp -r $pdir/$fname $user@$host:$pdir/$fname
命令 递归 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
来,我们一起看下案例实操。假设你在三台虚拟机(hadoop102、hadoop103、hadoop104)都已经创建好的/opt/module,/opt/software两个目录,在hadoop102这台机器中已经安装了jdk和hadoop。现在需要把102上的jdk拷贝到103中。
具体操作是:
1. 启动虚拟机
2. 进入到hadoop102。
3. 命令:scp -r /opt/module/jdk1.8.0_212 root@hadoop103:/opt/module
注意:这的hadoop103是虚拟机的名称,如果没有设置hosts则需要改成IP地址。
拓展:scp根据所在的位置不同命令也支持不同的操作,例如:
在A机器上,拉取B机器上的内容。
在A机器上,把文件传到B机器上
在A机器上,把B机器上的文件传递到C机器上
(b)在hadoop103上,将hadoop102中/opt/module/hadoop-3.1.3目录拷贝到hadoop103上。
scp -r root@hadoop102:/opt/module/hadoop-3.1.3 /opt/module/
(c)在hadoop103上操作,将hadoop102中/opt/module目录下所有目录拷贝到hadoop104上。
scp -r root@hadoop102:/opt/module/* root@hadoop104:/opt/module
(四)rsync远程同步-配置文件
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
(1)基本语法
rsync -av $pdir/$fname $user@$host:$pdir/$fname
命令 选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
选项参数说明
选项
功能
-a
归档拷贝
-v
显示复制过程
(2)案例实操
(a)删除hadoop103中/opt/module/hadoop-3.1.3/wcinput
[root@hadoop103 hadoop-3.1.3]$ rm -rf wcinput/
(b)同步hadoop102中的/opt/module/hadoop-3.1.3到hadoop103
[root@hadoop102 module]$ rsync -av hadoop-3.1.3/ root@hadoop103:/opt/module/hadoop-3.1.3/
(五)xsync集群分发脚本
(1)需求:循环复制文件到所有节点的相同目录下
(2)需求分析:
(a)rsync命令原始拷贝:
rsync -av /opt/module root@hadoop103:/opt/
(b)期望脚本:
xsync要同步的文件名称
(c)期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径)
[root@hadoop102 ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/root/.local/bin:/home/root/bin:/opt/module/jdk1.8.0_212/bin
(3)脚本实现
(a)在/home/root/bin目录下创建xsync文件
[root@hadoop102 opt]$ cd /home/root
[root@hadoop102 ~]$ mkdir bin
[root@hadoop102 ~]$ cd bin
[root@hadoop102 bin]$ vim xsync
在该文件中编写如下代码
#!/bin/bash#1. 判断参数个数 if [ $# -lt 1 ] thenecho Not Enough Arguement!exit; fi#2. 遍历集群所有机器 for host in hadoop102 hadoop103 hadoop104 doecho ==================== $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:$pdirelseecho $file does not exists!fidone done
此时,我们去查看文件
颜色是灰色的,不具备执行权限。修改脚本 xsync 具有执行权限
chmod +x xsync
或者是chmod 777 xsync
测试脚本
[root@hadoop102 ~]$ xsync /home/root/bin
(d)将脚本复制到/bin中,以便全局调用
[root@hadoop102 bin]$ sudo cp xsync /bin/
(e)同步环境变量配置(root所有者)
[root@hadoop102 ~]$ xsync /etc/profile.d/my_env.sh
(六)ssh命令切换主机让环境变量生效
从当前主机切换到另一台主机:ssh root@192.168.10.101
运行命令让环境变量生效。
source /etc/profile