Hadoop - 本地安装 完全分布式安装 集群配置 xsync分发脚本
目录
一、准备条件
1.安装JDK
2.下载Hadoop安装包
二、开始本地安装
三、Hadoop运行模式
四、完全分布式安装
1.准备3台客户机
2.安装JDK并分发 scp rsync xsync
方法一:scp(secure copy)安全拷贝
方法二:rsync远程同步工具
方法三:xsync
ssh免密登录
3.集群配置
4.群起集群并测试
一、准备条件
1.安装JDK
若没有安装JDK可以查看之前zk的博客,前半段有讲解如何安装JDK:Zookeeper - 本地安装与参数配置
2.下载Hadoop安装包
下载地址,这里咱们用的是3.1.3版本:Index of /dist/hadoop/common/hadoop-3.1.3
下载完成后传进Linux中即可:
二、开始本地安装
开始解压:
tar zxvf hadoop-3.1.3.tar.gz -C /opt/module/
然后咱们进去修改配置,这里咱们把 pwd 的目录路径复制一下:
进入修改配置文件,这里每个人的文件名可能不会相同,如果JDK是按照我之前的博客配置的话直接复制即可,不然要找到自己的文件,然后写进去:
sudo vim /etc/profile.d/java.sh
把一下内容追加进去:
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
上面的是之前配置 JDK 时的环境变量,下面是现在配置的 Hadoop 环境变量。
保存退出后别忘了 source 一下:
source /etc/profile
这时候咱们输入 hadoop 看下效果,这里在输入的时候已经可以使用 tab 键来自动补全了:
hadoop
成功效果如下,只截取了一部分:
安装完成。
三、Hadoop运行模式
Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式。
本地模式:单机运行,只是用来演示一下官方案例。生产环境不用。
伪分布式模式:也是单机运行,但是具备Hadoop集群的所有功能,一台服务器模拟一个分布式的环境。个别缺钱的公司用来测试,生产环境不用。
完全分布式模式:多台服务器组成分布式环境。生产环境使用。
四、完全分布式安装
1.准备3台客户机
这一步就不多说了,记得关闭防火墙、使用静态IP、和主机名称。这里我三台的名字分别为 hadoop102 、 hadoop103和 hadoop104 。
2.安装JDK并分发 scp rsync xsync
没安装的话可以看之前的博客(zk的安装中有JDK的安装流程):Zookeeper - 本地安装与参数配置
这里只需要在咱们的 hadoop102 上面安装完成即可,103和104咱们可以用点手段拷贝过去。
方法一:scp(secure copy)安全拷贝
scp可以实现服务器与服务器之间的数据拷贝。(from server1 to server2),其基本语法如下:
scp -r $pdir/$fname $user@$host:$pdir/$fname
命令 递归 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
需要注意的是我这里在hadoop102、hadoop103、hadoop104都已经创建好的/opt/module、 /opt/software两个目录,而且都是 root:root :
在 hadoop102 上,将hadoop102中/opt/module/jdk1.8.0_212目录拷贝到hadoop103上:
scp -r /opt/module/jdk1.8.0_212 root@hadoop103:/opt/module
在 hadoop103 上,将hadoop102中/opt/module/hadoop-3.1.3目录拷贝到hadoop103上:
scp -r root@hadoop102:/opt/module/hadoop-3.1.3 /opt/module/
在 hadoop103 上,将hadoop102中/opt/module目录下所有目录拷贝到hadoop104上:
scp -r root@hadoop102:/opt/module/* root@hadoop104:/opt/module
方法二:rsync远程同步工具
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。基本语法如下:
rsync -av $pdir/$fname $user@$host:$pdir/$fname
命令 选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
选项 | 功能 |
-a | 归档拷贝 |
-v | 显示过程 |
同步hadoop102中的/opt/module/hadoop-3.1.3到hadoop103:
rsync -av hadoop-3.1.3/ rooe@hadoop103:/opt/module/hadoop-3.1.3/
方法三:xsync
在写脚本之前咱们肯定希望这个脚本,无论我们在哪个目录都可以直接使用他,所以我们需要把这个脚本所在的路径配置到环境变量中去,先看一眼:
echo $PATH
咱们准备把这个脚本放在 root 目录下,接着输入:
export PATH=/root:$PATH
之后你也可以再echo一下看看。这样的话咱们在root目录下写得脚本在任何目录下都可以直接使用,不用再去写繁琐的绝对路径了。 效果如下:
接着咱们在root目录下开始创建脚本:
vim xsync
把以下内容放进去即可:
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
echo ==================== $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:$pdir
else
echo $file does not exists!
fi
done
done
保存退出后给他加个权限:
chmod +x xsync
这里咱们就可以来做个测试了,但是首先得去配置一下 hosts 文件,把咱们 hadoop103 和 hadoop104 的ip配置进去:
vim /etc/hosts
然后咱们去根目录下面随便创建点东西,当然要保证103和104机器中没有你所创建的对象:
cd /
mkdir test
开始测试,直接在根目录下运行,顺便看看环境变量配置的是否正常:
xsync test/
这里依次输入自己的密码,然后咱们去103和104里面看看成果没有:
测试成功! 然后咱们再把刚刚的配置文件传一下看看:
xsync /etc/profile.d/java.sh
依次输入密码后去看一眼结果:
同样也是成功了。若在这里没有使用 root 用户则会因为权限问题报错(因为我们把它放在了 /root 目录下面),这里是无法通过直接添加 sudo 来解决问题的。咱们需要把 xsync 的绝对路径也加上才行,代码如下:
sudo /root/xsync /etc/profile.d/java.sh
时候开始 103 和 104 机器的Hadoop安装了,那要怎么装呢,直接在102上面执行以下步骤:
xsync /opt
xsync /etc/profile.d/java.sh
ssh免密登录
在 102 机器下 进入到 root 目录下,然后ll -a:
ll -a
可以看到一个 .ssh 的隐藏目录,咱们进去:
ssh-keygen -t rsa
连续回车三次,然后ll查看一下会发现多出来了两个新的文件,这俩文件就是公钥和私钥。接下来咱们需要把公钥拷贝到 103 和 104 机器上:
ssh-copy-id hadoop103
因为是首次连接, 所以需要输入一次 103 的密码,当然之后就不需要了:
接着我们再试试看ssh到103,看看是否需要密码:
可以看到不需要密码直接就连上了,咱们用 exit 退出,然后继续操作:
exit
ssh-copy-id hadoop104
同样的,中间输入一密码然后回车。操作完成后咱们可以到 103 和 104 机器上去看一眼:
可以看到多了一个 authorized_keys 文件,这个用来标识有哪些主机可以访问自己,可以看到文件的结尾是 root@hadoop102 ,没有问题。
当然你也可以在 102 机器上配置 102 自己的ssh连接,这样以后再运行xsync的时候就不需要再输入密码了:
ssh-copy-id hadoop102
效果如下:
3.集群配置
4.群起集群并测试