Hadoop 完全分布式环境的搭建
一、前言
对于Hadoop完全分布式环境搭建,总体来说还是具有一定的复杂度。本篇文章简化了不必要的步骤,极简的完成了分布式环境搭建。
二、关于虚拟机的选择
如果您使用的windows系统,请安装VMware虚拟机软件,需要特别注意的是,如果你使用的Windows 11的操作系统,请安装VMware17版本会有更好的体验。
三、集群规划

四、安装Linux
本文使用的是CentOS 7,选择最小化安装,设定root密码为123456,安装过程5分钟左右。过程较为简单,不再赘述。

五、配置网络
新安装好的系统重新启动后,第一件事情,配置网络。
首先,查看当前网络情况,使用:

图中第1项 lo:是本地环回接口的意思;ip只能是“127.0.0.1”。
上图中ens33:本地未设置的网络设备名,默认情况下,该网络还未被设定ip地址和启用。它对应着一个配置文件ifcfg-ens33.此文件在/etc/sysconfig/network-scripts/ifcfg-ens33,编辑这个文件即可配置ip。
1.编辑的网络配置文件:
2.修改内容如下:
技巧:利用VMware编辑菜单的粘贴,可以复制文字。编辑好上面的内容,然后复制,可以很快速正确的完成ip地址的设定,注意不能有中文。
3.重启网络服务
重新启动网络后,配置才会生效,此时也可以通过ping命令测试下网络的连通情况。
网络配置生效后,推荐在本地使用连接工具,连接虚拟机进行后续配置,本文使用MobaXterm进行远程连接。
六、修改主机名
1.修改主机名,将本机主机名修改为node1
注意,修改后,无需重启系统,重新启动连接客户端即可。

2.还需要修改主机名与ip地址的映射,不然启动hadoop时报错。通过修改/etc/hosts文件,添加如下内容,ip地址与主机名的映射,可以参看前面的集群规划。
修改后如下图所示:

修改完成后,可以通过如下命令,测试是否成功。
七、关闭防火墙
如果不关闭防火墙,那么,需要依次放行,Hadoop运行过程中的网络服务端口,比较麻烦。所以在学习的过程中,索性就把防火墙关闭,命令如下:
八、安装JDK
根据官方文档可知,JDK具有较好的兼容性,所以,本文选用JDK8版本安装。

1.上传解压JDK
请到Oracle官网下载JDK8安装包,上传至虚拟机的/root/soft目录,并解压。涉及到的主要命令如下:
2.配置JDK
编辑profile文件,配置环境变量。
添加内容:
最后内容如下图:

刷新环境变量,使配置生效:
九、配置Hadoop
1.下载和上传
请到官网下载所需要的Hadoop 版本,本文选用的是hadoop3.2.2,其他版本也是类似的安装方法:

上传至虚拟机后,对其解压:
2.配置core-site.xml(核心站点)
此文件位于hadoop安装目录下,etc/hadoop/文件夹
fs.defaultFS:用来设定hadoop使用的文件系统及hdfs服务器的地址。
hadoop.tmp.dir:临时数据目录。但是通过hdfs-default.xml可知,很多路径都依据hadoop.tmp.dir 路径。而hadoop.tmp.dir默认为linux的临时路径,重启启动或系统硬盘吃紧时,就会释放这个路径内容,使得hadoop报错,所以强烈推荐要修改这个路径。
在hadoop安装目录执行
3.修改hdfs-site.xml
主要设定namenode(主节点)和secondarynamenode(辅助节点)的站点地址。
4.修改hadoop-env.sh
此文件位于hadoop安装目录下,etc/hadoop/文件夹,在第54行左右找到export JAVA_HOME,根据JDK的安装路径,配置此部分。
5.修改mapred-site.xml
此文件主要配置了,以下三方面内容:
(1)设定分布式资源管理方案为yarn,默认是local;
(2)设置 历史任务服务器地址 ;
(3)设置历史服务器web应用地址。
6.修改yarn-site.xml
此文件主要配置了,以下两方面内容:
(1)设置ResourceManager主机名;
(2)NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序。
注意:
Hadoop3.1.3以上版本安装后,执行MapReduce操作出现包冲突错误:
找不到或无法加载主类org.apache.hadoop.mapreduce.v2.app.MRAppMaster。
解决办法:
执行,如下命令,返回hadoop的classpath值,并把这些值复制了。
编辑yarn-site.xml,添加yarn.application.classpath属性,值为上面命令的值,如下图所示:

7.配置etc/hadoop/workers
配置从节点列表,此文件中列出每个从节点的hostname 或ip。
8.定义hdfs和yarn用户
(1)在/hadoop/sbin路径下: 将start-dfs.sh,stop-dfs.sh两个文件顶部添加以下参数:
(2)start-yarn.sh,stop-yarn.sh顶部也需添加以下:
9.配置hadoop的环境变量
使用 vi /etc/profile或连接工具的文本编辑器,在profile文件中添加如下内容:
然后,更新并测试:
十、复制两个虚拟机
1.完全关闭后,复制虚拟机硬盘,然后文件夹文本改名为node2和node3。

2.双击node2里面的虚拟机

3.修改虚拟机的名字为node2,然后启动

4.启动时选择,我已经复制该虚拟机

5.修改IP地址为:192.168.6.22

重启网络服务
6.修改主机名:
7.配置node3
按照如上步骤配置node3
(1)双击node3文件夹里的虚拟机;
(2)修改虚拟机名为node3;
(3)启动虚拟机,选择【我已经复制该虚拟机】
(4)修改IP地址为:192.168.6.33
(5)修改主机名为node3
8.重启新配置的虚拟机
十一、配置免密登录
为什么要免密登录?
在分布式模式下,hadoop需要联机操作,需要免密操作;
Hadoop 节点众多, 所以一般在主节点启动从节点, 这个时候就需要程序自动在主节点登录到从节点中, 如果不能免密就每次都要输入密码, 非常麻烦。
具体步骤如下:
1.推荐配置前在虚拟机中创建快照;
2.使用连接工具分配连接node1、node2和node3,然后配置免密登录。
3.在三台机器分别执行以下命令,生成公钥与私钥。
执行该命令之后,按三个回车即可。
4.拷贝公钥到同一台机器,三台机器分别执行如下命令:
输入yes和主机密码123456
5.将第一台机器的公钥拷贝到其他机器上,在第一台机器上面指向以下命令:
十二、启动集群
要启动 Hadoop 集群,需要启动 HDFS 和 YARN 两个模块。 注意: 首次启动 HDFS 时,必须对其进行格式化操作。 第一台机器执行以下命令,如果设置了环境变量,不需要加目录。
jps查看已启动的服务

注意,如果重复格式化了,要选N,如果选了Y,有可能出现如下错误:
Re-format filesystem in Storage Directory /tmp/hadoop-root/dfs/name ? (Y or N)
解决办法:
可以删除core.site.xml的hadoop.tmp.dir所定义的目录里的内容。
十三、查看集群
推荐将上面的地址收藏,这样调试比较方便。
十四、测试集群
1.创建目录
2.拷贝input文件中的内容到分布式文件系统
3.检查是否启动了3个服务
执行操作时,会把日志写到历史服务器,因此需要启动历史服务器。主服务器(node1),任务过多,有时会卡住,导致历史服务器访问失败,程序执行失败。所以,要为主服务器分配更多的CPU和内存资源或将历史服务器放到其他节点中,例如,node3中,启动历史服务器要到node3主机中启动。
4.执行程序
进入hadoop安装路径,执行如下命令(运行需要等待5分钟左右):
5.查看结果
6.再次执行
7.关闭服务
总结
恭喜您,能够看到这里,证明您已经配置成功了。最后,我们成功运行了官方的程序,在执行效率上可能与您的预期不一致。主要有两个原因,首先,咱们的节点配置实在是太差了。其次Hadoop是一个离线计算的系统,如果只跑少量数据的话体现不出他的优势。Hadoop的优势在于计算大规模的海量数据,hadoop不是为了解决性能问题,是为了解决伸缩、分布式存储和计算问题。好了,就到这里吧。