实际开发中,使用的就是完全分布式环境。所谓完全分布式就是在整个集群中有真实的主机(3台以上),用于完成各种任务。但是个人在学习时,购买多个机器显然是不划算的。这里,我们采用VMWare克隆出多个虚拟机来模仿完全分布式环境。
环境:
- VMware Fusion 11 pro
- Linux系统为Ubuntu 16.04
- 每个虚拟机的配置为1G内存和20G磁盘空间
- PC:mbp2018 8G内存 256G固态
步骤
1. 准备3台客户机
1.1 按照之前的方法完成单台虚拟机的搭建(步骤一、步骤二和步骤三)。
1.2 在虚拟机关闭的情况下,克隆两台虚拟机。
![](https://img.haomeiwen.com/i7239122/08bbc2af9b3337be.png)
修改名称和存储位置即可。
1.3 修改静态IP。
1.3.1 查看你PC上为VMware分配的IP地址段、子网掩码和网关。打开终端,输入如下命令:
more /Library/Preferences/VMware\ Fusion/vmnet8/dhcpd.conf
![](https://img.haomeiwen.com/i7239122/10164655326da795.png)
1.3.2 打开克隆好的虚拟机,修改配置文件,在终端输入如下命令:
sudo vim /etc/network/interferfaces
添加以下信息:
auto ens33 # 本机的网卡,可通过`ifconfig`命令查看
iface ens33 inet static
address 172.16.225.133 # 从IP地址段中任意选一个
netmask 255.255.255.0
gateway 172.16.225.2
dns-nameservers 172.16.225.2
重启机器即可完成静态IP的修改。记得ping www.baidu.com
测试网络的连通性。
1.4 修改主机名称,针对Ubuntu而言:
1.4.1 修改主机名称
sudo vim /etc/hostname
将文件修改为你的主机名,例如hadoop101
1.4.2 修改主机名和host的映射
sudo vim /etc/hosts
![](https://img.haomeiwen.com/i7239122/a307c52997595722.png)
通过上面的配置,发现启动从节点的NodeManager时出错,查看logs发现可能是hosts文件的问题,遂修改如下,大家可以直接使用下面的文件:
![](https://img.haomeiwen.com/i7239122/9b5d5a921acaafd0.png)
1.4.3 重启机器,并使用ping hadoop10x
测试连通性。
2. 安装JDK和Hadoop
如果你在第一台虚拟机上完成了伪分布模式的搭建,那么此时克隆的两台机器也同样拥有JDK和Hadoop。
scp命令
此时,如果只有一台机器完成了jdk和Hadoop的安装配置,我们可以使用scp
命令完成数据的安全拷贝。
命令格式:scp -r 要拷贝的文件路径/名称 user@ip:目的路径/名称
- 在hadoop101上,将hadoop101的
/opt/modeul
目录下的东西拷贝到hadoop102上
scp -r /opt/module root@hadoop102:/opt/module
- 在hadoop103上,将hadoop101的
/opt/module
目录下的东西拷贝到hadoop102上
scp -r root@hadoop101:opt/module roor@hadoop102:/opt/module
rsync命令
与scp
相同的还有一个命令时rsync
,其主要用于备份和镜像。rsync
做文件的复制要比scp
的速度快,rsync
只对差异文件做更新。scp
将所有文件都复制过去。使用方法和scp
一样。
基本格式:rsync -rvl 源文件 目的路径
集群分发脚本
脚本sxync.sh可以更好的同步数据到其他机器上
#! /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=102;host<104;host++));do
echo -----------hadoop$host-----------
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
3. 配置集群
集群配置图
这个很重要,后面的所有配置都是按照这个来的
![](https://img.haomeiwen.com/i7239122/aa2028b0e984a693.png)
3.1 配置core-site.xml
<!-- 指定HDFS中NameNode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-x.x.x/data/tmp</value>
</property>
3.2 HDFS配置文件
3.2.1 配置hadoop-env.sh
export JAVA_HOME=jdk安装路径
3.2.2 配置hdfs-site.xml文件
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定hadoop辅助名称节点主机配置-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop103:50090</value>
</property>
3.3 YARN配置文件
3.3.1 配置yarn-env.sh
export JAVA_HOME=jdk安装路径
3.3.2 配置yarn-site.xml文件
<!-- Reducer获取数据的方式-->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定yarn的ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop101</value>
</property>
3.4 MapReduce配置文件
3.4.1 配置mapred-env.sh
export JAVA_HOME=jdk安装路径
3.4.2 配置mapred-site.xml文件
<!-- -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
3.5 在集群上分发配置好的Hadoop配置文件
xsync /opt/module/hadoop-x.x.x/
3.6 查看文件分发情况
4. 集群的单点启动
4.1 查看后台是否有Hadoop的相关进程,如果有,则全部关闭
4.2 删除$HADOOP_HOME/
的data/
和logs/
目录
rm -rf data/ logs/
注意,此时要删除所有节点的
data/
和logs/
,包括hadoop101、hadoop102和hadoop103。
4.3 格式化NameNode
根据集群配置图,我们可以发现NameNode在hadoop102上,所以我们连接hadoop102,并执行如下命令:
bin/hdfs namenode -format
此时,不允许有任何错,否则格式化失败
4.4 启动hadoop集群
4.4.1 在hadoop101上启动DataNode。
sbin/hadoop-daemon.sh start datanode
4.4.2 在hadoop102上启动NameNode和DataNode。
sbin/hadoop-daemon.sh start namenode
sbin/hadoop-daemon.sh start datanode
4.4.3 在hadoop101上启动DataNode和SecondaryNode
sbin/hadoop-daemon.sh start datanode
sbin/hadoop-daemon.sh start secondarynamenode
4.5 查看集群是否启动成功
在浏览器中输入http://hadoop102:50070
查看集群是否启动成功。如果本机的hosts里边没有Hadoop102到ip地址的映射,此时会无法访问,两种办法:第一,使用过ip:端口号访问;第二,在本机hosts文件里加入三个节点的主机名到ip地址的映射。
5. 配置SSH免密登录
5.1 配置hadoop101免密登录hadoop102和Hadoop03
5.1.1 在hadoop101上使用指令ssh-keygen -t rsa生成公钥和密钥
![](https://img.haomeiwen.com/i7239122/c9706e01cb559b91.png)
5.1.2 查看生成的公钥和私钥
![](https://img.haomeiwen.com/i7239122/c4019c28d98aa63d.png)
5.1.3 将公钥分发给hadoop102和hadoop103
ssh-copy-id hadoop102
ssh-copy-id hadoop103
5.2 按照5.1的步骤,配置hadoop103免密登录hadoop101和hadoop102。
注意,在配置ssh免密登录的时候需要将自己的公钥拷贝到自己的authorized_keys。方法与上面的相同,比如将hadoop101的公钥拷贝到自己:
cd /home/lg/.ssh
ssh-copy-id hadoop101
6. 群起集群
6.1 配置slaves文件,在文件中加入如下内容(数据节点):
hadoop101
hadoop102
hadoop103
注意,该文件中添加的内容结尾不允许有空格,文件汇总不允许有空行,非常重要!!!
添加完成后,使用xsync
同步所有节点的配置文件。
6.2 启动集群
6.2.1 在hadoop102上启动HDFS
sbin/start-dfs.sh
![](https://img.haomeiwen.com/i7239122/d34a4a82b7f581c1.png)
6.2.2 在hadoop101上启动YARN(一定要到Hadoop101上)
sbin/start-yarn.sh
![](https://img.haomeiwen.com/i7239122/0b292ab2b72e583c.png)
6.2.3 此时查看hadoop101、hadoop102和hadoop103上的服务是否和配置图一致。
![](https://img.haomeiwen.com/i7239122/6055c53b414ef1e0.png)
![](https://img.haomeiwen.com/i7239122/6be70611574938c4.png)
![](https://img.haomeiwen.com/i7239122/f942984f1f6e7a5f.png)
此时,我们的集群启动成功!!!
7. 集群的基本测试
7.1 一个大文件个一个小文件
bin/hdfs dfs -put wcinput/wc.input /
bin/hdfs dfs -put /opt/software/hadoop-x.x.x.tar.gz
7.2 在浏览器中输入http://hadoop102:50070
查看上传结果:
![](https://img.haomeiwen.com/i7239122/8b68feed319d928f.png)
可以发现第一个文件的大小(208.59M)大于块的大小(128M),此时点击文件查看:
![](https://img.haomeiwen.com/i7239122/2681d8bd02752c89.png)
大功告成,告别从入门到放弃!
网友评论