环境
MacOS10.15
Parallels Desktop16创建搭建的centos8 虚拟机
集群环境:
IP地址 主机名 操作系统 角色 服务 10.211.55.8/24 master Centos8 master HDFS(NameNode)、DFSZKFailoverController(zkfc)、SYNC(同步文件服务器)、ResourceManager(资源分配与调度) 10.211.55.9/24 slave1 Centos8 slave1 Zookeeper、HDFS(SecondaryNamenode)、MapReduce(JobHistoryServer)、NodeManager 10.211.55.10/24 slave2 Centos8 Slave2 Zookeeper、HDFS(DataNode)、NodeManager 10.211.55.11/24 slave3 Centos8 Slave3 Zookeeper、HDFS(DataNode)、NodeManager
开始搭建
防火墙和SELINUX设置
因为Hadoop需要开启的端口很多,而且牵涉到很多的权限,所以我们在测试时将防火墙和SELINUX都关掉。
在生产环境中,需要针对不同的开放端口做针对性的设置。
关闭防火墙
运行以下命令,关闭防火墙
1 | # 临时关闭防火墙 和 禁止开机启动防火墙 |
关闭SELINUX
运行以下命令:
1 | vi /etc/selinux/config #SELINUX配置文件 |
相关参数修改如下:
1 | #SELINUX=enforcing |
重启服务器,然后查看SELINUX状态:
1 | reboot #重启 |
显示如下内容,则说明SELINUX已经关闭了
1 | SELinux status: disabled |
修改主机名
以master(10.211.55.8)节点为例,运行下面的命令,修改本机的hostname
1 | 修改hostname |
运行下面的命令查看设置好的hostname
1 | cat /etc/hostname |
如果显示如下的内容,则说明修改成功
1 | master |
其他节点(10.211.55.9~11)同样进行以上操作,修改主机名。
hosts设置
由于一次次的远程连接需要输入IP地址,不利于管理和使用,我们可以在hosts里面把服务器的hostname跟IP地址对应起来。
在master(10.211.55.8)输入以下命令
1 | vi /etc/hosts |
设置成以下内容
1 | 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 |
其他节点(10.211.55.9~11)同样进行以上操作,修改hosts。
添加Hadoop用户
1 | useradd hadoop && passwd hadoop |
命令输入完毕后设置用户密码就行
可为 hadoop 用户增加管理员权限,方便部署,避免一些对新手来说比较棘手的权限问题,执行:
1 | visudo |
Shell 命令
如下图,找到 root ALL=(ALL) ALL 这行(应该在第98行,可以先按一下键盘上的 ESC 键,然后输入 :98 (按一下冒号,接着输入98,再按回车键),可以直接跳到第98行 ),然后在这行下面增加一行内容:
1 | hadoop ALL=(ALL) ALL |
如下图所示:

切换到hadoop用户
1 | su hadoop |
每个节点都执行一次
配置免密登录
在所有的节点上执行以下命令
1 | ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa #生成验证密钥 |
如果需要互相免密码登录,则master执行下面命令,把密钥分发给从服务器
1 | scp ~/.ssh/authorized_keys hadoop@slave1:~/.ssh/authorized_keys |
在所有的节点执行以下命令
1 | chmod 0600 ~/.ssh/authorized_keys |
退出hadoop用户,再重新 su hadoop进入一次即可免密登录了
验证免密登录

安装JDK
创建upload目录
1 | mkdir upload |
将下载下来的jdk上传到master节点的/home/hadoop/upload下,jdk下载地址
执行以下命令
1 | sudo mkdir /usr/java |
修改全局环境变量
1 | sudo vi /etc/profile #文件底部添加以下内容 |
在文件底部添加以下内容
1 | # jdk |
加载新的全局环境变量
1 | source /etc/profile |
执行以下命令验证jdk是否安装成功
1 | java -version |

将jdk发送到其他节点
1 | cd /usr/java |
将环境变量发送到其他节点
1 | sudo scp /etc/profile root@slave1:/etc/profile |
在slave1、slave2、slave3上分别执行以下命令,让环境变量生效
1 | source /etc/profile |
安装Zookeeper
安装并配置Zookeeper
由于Zookeeper类似于民主选举,每台服务器分别投票共同选举一个作为leader,剩下的都是follower。基于这个原因,官方建议服务器集群设置为奇数台,偶数台的话会有一台的资源浪费。根据咱们的集群规划:slave1~3为我们的Zookeeper服务器。
在slave1执行以下命令
1 | mkdir /home/hadoop/upload |
修改全局环境变量
1 | sudo vi /etc/profile #文件底部添加以下内容 |
在文件底部添加以下内容
1 | # zookeeper |
加载新的全局环境变量
1 | source /etc/profile |
将Zookeeper发送到slave2、slave3
1 | cd /home/hadoop |
将环境变量发送到slave2、slave3
1 | sudo scp /etc/profile root@slave2:/etc/profile && sudo scp /etc/profile root@slave3:/etc/profile |
在slave2、slave3上分别执行以下命令,让环境变量生效
1 | source /etc/profile |
使用hadoop执行以下命令
1 | cd /home/hadoop/server/apache-zookeeper-3.6.1-bin/conf |
修改zoo.cfg的文件内容
1 | vi zoo.cfg |
1 | dataDir=/home/hadoop/data/zkdata |
将zoo.cfg分发到slave2~3
1 | sudo scp /home/hadoop/server/apache-zookeeper-3.6.1-bin/conf/zoo.cfg hadoop@slave2:/home/hadoop/server/apache-zookeeper-3.6.1-bin/conf/zoo.cfg && sudo scp /home/hadoop/server/apache-zookeeper-3.6.1-bin/conf/zoo.cfg hadoop@slave3:/home/hadoop/server/apache-zookeeper-3.6.1-bin/conf/zoo.cfg |
最后不要忘了在每个服务器“/home/hadoop/data/zkdata/”下新建文件“myid”并把当前服务器编号写进去,举例:
1 | sudo chown -R hadoop:hadoop /home/hadoop/* |
以下内容只能在slave1~3上执行才能看到正确的结果:
1 | zkServer.sh stop #停止Zookeeper服务 |
执行zkServer.sh start正常情况下会看到下面的内容:

如果启动失败,可以到“/home/hadoop/zookeeper/logs/”这个目录里面看看启动日志。
录入下面的命令:
1 | jps |
可以看到如下的结果:

注意:虽然我们在配置文件中写明了服务器的列表信息,但是,我们还是需要去每一台服务 器去启动,不是一键启动集群模式。
每启动一台查看一下状态再启动下一台
三台机器上都要有QuorumPeerMain进程,都能显示follower或者leader
安装Hadoop
把下载好的Hadoop安装包上传到master节点的/home/hadoop/upload目录下面。
先通过root账户执行以下操作
1 | su root |
修改全局环境变量
1 | sudo vi /etc/profile #文件底部添加以下内容 |
在文件底部添加以下内容
1 | # Hadoop |
加载新的全局环境变量
1 | source /etc/profile |
输入echo $HADOOP_HOME显示如下则表明成功

在其他节点同样执行以上添加环境变量的操作
进入master节点,创建相关目录,执行以下命令
1 | su hadoop |
修改hadoop-env
1 | vi /home/hadoop/server/hadoop-3.3.0/etc/hadoop/hadoop-env.sh |
添加一行内容:
1 | export JAVA_HOME="/usr/java/jdk1.8.0_261" |
修改配置文件core-site.xml
1 | vi /home/hadoop/hadoop/etc/hadoop/core-site.xml |
1 | <configuration> |
修改配置文件hdfs-site.xml
1 | vi /home/hadoop/hadoop/etc/hadoop/hdfs-site.xml |
1 | <configuration> |
修改配置文件mapred-site.xml
1 | vi /home/hadoop/hadoop/etc/hadoop/mapred-site.xml |
全部内容如下:
1 | <configuration> |
修改配置文件yarn-site.xml
1 | vi /home/hadoop/hadoop/etc/hadoop/yarn-site.xml |
内容如下
1 | <configuration> |
修改配置文件workers
1 | vi /home/hadoop/hadoop/etc/hadoop/workers |
文件中配置的是DataNode的所在节点服务
1 | slave2 |
修改yarn-env
1 | vi /home/hadoop/hadoop/etc/hadoop/yarn-env.sh |
添加一行内容:
1 | export JAVA_HOME="/usr/java/jdk1.8.0_261" |
修改mapred-env
1 | vi /home/hadoop/hadoop/etc/hadoop/mapred-env.sh |
添加一行内容:
1 | export JAVA_HOME="/usr/java/jdk1.8.0_261" |
将hadoop安装包分发到其他集群节点
1 | cd /home/hadoop/server |
格式化HDFS
在master节点中格式化HDFS(只在master节点,即NameNode执行),执行以下命令
1 | hdfs namenode -format |
格式化zkfc
在master节点中格式化HDFS(只在master节点,即NameNode执行),执行以下命令
1 | hdfs zkfc -formatZK |
启动Hadoop集群
日常启动hadoop
Hadoop启动顺序:Zookeeper->Hadoop->Hbase>Hive…
停止所有服务
1 | stop-all.sh #最好在master(NameNode)上执行 |
启动ZooKeeper
在slave1~3上分别执行以下命令:
1 | zkServer.sh stop |
显示如下内容,则启动成功

启动HDFS
其中一台机器执行就OK了,比如:master
1 | stop-dfs.sh #先停掉服务 |
显示内容如下:

执行命令查看:
1 | jps |
master上显示如下:

Slaver1~3显示如下:


启动YARN
在master进行启动:
1 | stop-yarn.sh |
显示内容如下:

执行命令查看:
1 | jps |
显示如下:

若备用节点的 resourcemanager 没有启动起来,则手动启动起来
1 | yarn-daemon.sh start resourcemanager |
启动 mapreduce 任务历史服务器
在slave1上执行如下命令:
1 | mapred --daemon stop historyserver |
执行命令查看:
1 | jps |
显示如下:

WEB控制台
hdfs控制台
http://10.211.55.8:9870/dfshealth.html#tab-overview

yarn控制台
http://10.211.55.8:8088/cluster
