前言
上一篇文章《Hadoop3.2.0环境搭建(Ubuntu18.04)》详细讲述了一台主机搭建的伪分布式模式的Hadoop,在本文我们在这个基础上搭建使用四台主机的完全分布式环境。
实验环境
主机系统:windows 10
虚拟机:VMware12( Ubuntu18.04)
软件版本:Hadoop 3.2.0 (jdk 1.8.0_131)
1、环境搭建
1.1配置第一台主机的环境
1.1.1设置静态IP
首先我们设置静态IP,这样可以保证每次开机都能得到固定IP,我们才可以方便连接各个主机。修改上网模式为“桥接”模式:
编辑(E)--->虚拟网络编辑器
打开如下界面,需要点击“DHCP设置”才可以得到VMnet0,然后选择网卡
改变上网模式为“桥接”
启动主机1,然后修改IP
查看上网网卡
$:ip a
根据结果,我们选择修改ens33网卡
$:sudo vim /etc/network/interfaces
在末尾添加如下信息:
auto ens33
iface ens33 inet static
address 192.168.199.101
netmask 255.255.255.0
gateway 192.168.199.1
其中需要注意的是address和gateway的频段一致即可,这两个可以更改为其他参数。
1.1.2配置网络通信参数
更改主机名
$:sudo vim /etc/hostname
修改为 " data1"
(没有"")
为了使4台主机网路可以得知彼此的主机名和IP,我们需要编辑hosts文件,hosts文件可以用于补充或者取代网络中DNS的功能,用于存储计算机网络中各节点的信息,负责将主机名映射到对应的IP地址。
接下来我们需要
$: sudo vim /etc/hosts
在127.0.1.1对下一行添加如下信息:
192.168.199.100 master
192.168.199.101 data1
192.168.199.102 data2
192.168.199.103 data3
1.1.3配置hadoop
我们修改伪分布式的hadoop配置,因为有多台主机,我们不能再使用localhost,必须指定主机名,在这里我们指定主机名为master。
$:sudo vim /usr/local/hadoop/etc/hadoop/core-site.xml
修改为如下配置:
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/<username>/hadoop/tmp</value>
</property>
修改yarn-site.xml文件:
$:sudo vim /usr/local/hadoop/etc/hadoop/yarn-site.xml
修改为如下配置:
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<!--ResourceManager主机与NodeManager的连接地址为8025-->
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8025</value>
</property>
<!--ResourceManager与ApplicationManager的连接地址为8030-->
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<!--ResourceManager与客户端的连接地址为8050-->
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8050</value>
</property>
mapred-site.xml 不用修改,依然采用伪分布式的配置(需要提醒的是hadoop2.0以后的版本采用YARN 作为资源管理器替代了单独存在的 JobTracker 与 TaskTracker,这里不需要设置这两个任务)。
$:sudo vim /usr/local/hadoop/etc/hadoop/mapred-site.xml
参数如下:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
接下来编辑hdfs-site.xml文件,伪分布式只要一台主机同时兼顾NameNode和DataNode,在这里data1主机只用来用作DataNode,需要删除NameNode的设置。
$:sudo vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
信息修改如下:
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/<username>/hadoop/hadoop_data/hdfs/datanode</value>
</property>
修改完后我们关闭主机data1。
1.2创建多台虚拟机
1.2.1克隆主机
由于笔者是基于学习的目的,也没有那么多真实的主机,只能使用虚拟机来代替,但是里面涉及的技术完全可以直接使用在真实主机上。
为了节省时间我们使用已经搭建了伪分布式的主机来创建其余主机,具体流程如下图:
克隆主机
根据流程选择 “完全克隆模式” ,一直next即可。
由于克隆模式创建的新主机和被拷贝主机配置是一样的,我们需要对MAC地址和IP地址进行更新,这里先更新MAC地址。
更改MAC地址
根据上述流程我们克隆另外3台主机(data2、data3、master),配置完后我们就可得到4台主机,接下来我们需要登录主机来更新上网环境。
这里需要说明4台主机的物理配置(主要是内存),由于笔者的电脑内存是16G,因而配置如下:
1、物理内存16G:建议master(4G)、data1/data2/data3(2G)
2、物理内存8G:建议master(2G)、data1/data2/data3(1G)
1.2.2更新网络配置
在这里同时配置data2、data3、master三台主机,首先修改IP地址。
$:sudo vim /etc/network/interfaces
接下来分别修改address参数
data2:
192.168.199.102
data3:
192.168.199.103
master:
192.168.199.100
接下来修改主机名。
$:sudo vim /etc/hostname
data2主机修改为 " data2"
data3主机修改为 " data3"
master主机修改为 " master"
(没有"")
启动主机应该可以查看到ip地址的改变
1.2.3修改hadoop配置
这里主要是修改master主机
首先是hdfs-site.xml文件,master主机作为NameNode
$:sudo vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
信息修改如下:
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/<username>/hadoop/hadoop_data/hdfs/namenode</value>
</property>
接下来需要告诉Hadoop系统哪一台服务器是NameNode,哪一些服务器是DataNode。这个很重要!由于网上很多教程都是Hadoop2.0的,指出需要创建和修改masters和slaves文件,但是Hadoop3.0及以后的系统都没有了slaves文件(笔者在这里折腾了一个晚上。。。是个巨坑!)。
创建和修改masters文件,指定master主机为NameNode
$:sudo vim /usr/local/hadoop/etc/hadoop/masters
增加主机名 (没有"")
"master"
创建和修改workers文件,指定data1/data2/data3为DataNode
$:sudo vim /usr/local/hadoop/etc/hadoop/workers
增加主机名(没有"")
"
data1
data2
data3
"
重启master、data1、data2、data3。
1.2.4通过master连接data1/data2/data3
首先测试一下是否可以通过master访问其他服务器,这里以data1为例。
$:ssh data1
首次登陆需要根据提示输入yes,连接成功可以发现master名字改变为data1
推出远程登陆
$:exit
接下来启动Hadoop,首先格式化HDFS目录
$:/usr/local/hadoop/bin/hdfs namenode -format
启动HDFS和YARN,有两个方法:
方法一:
分别启动
$:/usr/local/hadoop/sbin/start-dfs.sh
$:/usr/local/hadoop/sbin/start-yarn.sh
方法二:
同时启动
$:/usr/local/hadoop/sbin/start-all.sh
可以通过jps查看结果:
通过远程登陆登陆data1可以查看进程也已经启动了
data1结果
接下来可以登陆http://master:8088/可以查看ResourceManager Web界面,我们点击Nodes发现4个节点已经启动了
ResourceManager Web界面节点启动情况
登陆http://master:9870/打开NameNode Web界面。可以发现LiveNode有3个Live节点
LiveNode节点
点击Datanodes标签可以发现当前有3个启动的Datanode
Datanode节点
至此,实验完毕,我们可以停止Hadoop系统
$:/usr/local/hadoop/sbin/start-all.sh
总结
笔者发现网上很多教程都是Hadoop2.0版本的,因此在使用3.0或以上版本时会遇到很多不同(又是一路坑T^T...),但是大家遇到困难时,多点看看Log文件,查查网上资料,翻翻书本还是可以得到解决问题的思路,祝大家有所收获!
网友评论