CentOS 安装
- 下载并安装 VMware® Workstation 15 Pro
- 安装 CentOS-7-x86_64-Minimal-1908.iso
- IP:192.168.xxx.xxx 、……
- host:NameNode、SecNameNode、DataNode1、DataNode2、DataNode3
Hadoop 环境搭建
下载 hadoop 2.9.2

安装 Hadoop
(各节点)
- 上传 hadoop-2.9.2.tar.gz 到 home 目录
- 解压 tar -zxvf /home/hadoop-2.9.2.tar.gz -C /opt/
- 配置环境变量

[root@hadoop ~]# vi /etc/profile
# set hadoop environment
export HADOOP_HOME=/opt/hadoop-2.9.2
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
[root@hadoop ~]# source /etc/profile
[root@hadoop ~]# hadoop version
安装 JDK
(各节点)
- 上传 jdk-8u112-linux-x64.tar.gz 到 home 目录
- 解压 tar -zxvf /home/jdk-8u112-linux-x64.tar.gz -C /opt/
- 配置环境变量

[root@hadoop ~]# vi /etc/profile
# set jdk environment
export JAVA_HOME=/opt/jdk1.8.0_112
export CLASSPATH=$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
[root@hadoop ~]# source /etc/profile
[root@hadoop ~]# java -version
关闭防火墙
各个节点都需要关闭防火墙
[root@hadoop ~]# systemctl stop firewalld.service
[root@hadoop ~]# systemctl disable firewalld.service
修改安全策略
各个节点都需要修改安全策略
[root@hadoop ~]# vi /etc/selinux/config
SELINUX=disabled
修改 hosts 文件
- 编辑 NameNode 节点的 /etc/hosts 文件
[root@NameNode ~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.139.xxx NameNode
192.168.139.xxx SecNameNode
192.168.139.xxx DataNode1
192.168.139.xxx DataNode2
192.168.139.xxx DataNode3
- 将 NameNode 节点的 /etc/hosts 文件复制到各个数据节点上
[root@NameNode ~]# scp /etc/hosts root@192.168.139.xxx:/etc/hosts
[root@NameNode ~]# scp /etc/hosts root@192.168.139.xxx:/etc/hosts
[root@NameNode ~]# scp /etc/hosts root@192.168.139.xxx:/etc/hosts
[root@NameNode ~]# scp /etc/hosts root@192.168.139.xxx:/etc/hosts
# Test
[root@NameNode ~]# ping SecNameNode | DataNode1 | DataNode2 | DataNode3
配置各节点 SSH 免秘钥登录
- 在各节点上,以 root 用户身份生成 rsa 密钥对,生成的过程中有程序提示,连续回车即可。

[root@NameNode]# ssh-keygen -t rsa
- 将 NameNode 的密钥分发到各个 DataNode 上,实现免秘钥登录。

[root@NameNode]# ssh-copy-id SecNameNode
[root@NameNode]# ssh-copy-id DataNode1
[root@NameNode]# ssh-copy-id DataNode2
[root@NameNode]# ssh-copy-id DataNode3
- 在各个 DataNode 节点上,将密钥回传到 NameNode 上,实现 ssh 互通。
[root@SecNameNode ~]# ssh-copy-id NameNode
[root@DataNode1 ~]# ssh-copy-id NameNode
[root@DataNode2 ~]# ssh-copy-id NameNode
[root@DataNode3 ~]# ssh-copy-id NameNode
将 authorized_keys 分发给各节点后,输入以下命令,可以直接使用 ssh 登录,不再需要密码。
[root@NameNode ~]# ssh SecNameNode | DataNode1 | DataNode2 | DataNode3
Hadoop 集群配置
在 /opt/hadoop-2.9.2/etc/hadoop 目录下,找到:hadoop-env.sh、yarn-env.sh、coresite.xml、hdfs-site.xml、mapred-site.xml 、yarn-site.xml、masters 和 slaves 文件,接下来将配置以上相关文件。
如果配置错误将导致 hadoop启动失败,建议在此处创建虚拟机快照。
- 配置 hadoop-env.sh
[root@NameNode ~]# vi /opt/hadoop-2.9.2/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/opt/jdk1.8.0_112
- 配置 yarn-env.sh
[root@NameNode ~]# vi /opt/hadoop-2.9.2/etc/hadoop/yarn-env.sh
export JAVA_HOME=/opt/jdk1.8.0_112
- 配置 core-site.xml
[root@NameNode ~]# vi /opt/hadoop-2.9.2/etc/hadoop/core-site.xml
<!-- 添加以下配置 -->
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://NameNode:9000</value>
</property>
<!-- 临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/temp</value>
</property>
</configuration>
- 配置 hdfs-site.xml
[root@NameNode ~]# vi /opt/hadoop-2.9.2/etc/hadoop/hdfs-site.xml
<!-- 添加以下配置 -->
<configuration>
<!-- NameNode 上存储 HDFS 名字空间元数据 -->
<property>
<name>dfs.name.dir</name>
<value>/home/hadoop/hdfs/name</value>
</property>
<!-- DataNode 上数据块的物理存储位置 -->
<property>
<name>dfs.data.dir</name>
<value>/home/hadoop/hdfs/data</value>
</property>
<!-- 数据副本分片数,默认是3份 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>SecNameNode:50090</value>
<description>
The secondary namenode http server address and port.
</description>
</property>
</configuration>
- 配置 mapred-site.xml
#此文件不存在的话拷贝一份
[root@NameNode ~]# cd /opt/hadoop-2.9.2/etc/hadoop
[root@NameNode ~]# cp mapred-site.xml.template mapred-site.xml
[root@NameNode ~]# vi /opt/hadoop-2.9.2/etc/hadoop/mapred-site.xml
<!-- 添加以下配置 -->
<configuration>
<!-- tasktracker 上执行 MapReduce 程序时的本地目录 -->
<property>
<name>mapreduce.cluster.local.dir</name>
<value>/home/hadoop/mapreduce/local</value>
</property>
<!-- HDFS 中的目录,存储执行 M-R 程序时的共享文件 -->
<property>
<name>mapreduce.cluster.system.dir</name>
<value>/home/hadoop/mapreduce/system</value>
</property>
<!-- 将 Mapreduce 业务交由 yarn 管理 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>NameNode:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>NameNode:19888</value>
</property>
</configuration>
- 配置 yarn-site.xml
[root@NameNode ~]# vi /opt/hadoop-2.9.2/etc/hadoop/yarn-site.xml
<configuration>
<!-- 默认洗牌模式,可省略 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 yarn 的老大 Resourcemanagger 的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>NameNode</value>
</property>
</configuration>
- 配置 masters
# 删除localhost,把localhost修改为 NameNode 的主机名,如果没有则新建一个
masters 文件
[root@NameNode ~]# echo "NameNode" >> /opt/hadoop2.9.2/etc/hadoop/masters
- 配置 slaves
# 删除localhost,加入所有 DataNode 的主机名
[root@NameNode ~]# vi /opt/hadoop-2.9.2/etc/hadoop/slaves
DataNode1
DataNode2
DataNode3
- 将整个 /opt/hadoop-2.9.2 的全部文件复制到所有数据节点上
[root@NameNode ~]# scp -r /opt/hadoop-2.9.2 root@SecondaryNameNode:/opt
# 也可以单独将以上8个文件,分别拷贝到其他节点
Hadoop 集群启动
这里使用 root 用户登录后再运行格式化和启动集群的命令。
[root@NameNode ~]# cd /opt/hadoop-2.9.2/bin
[root@NameNode ~]# hadoop namenode -format
执行后的结果中会提示:INFO common.Storage: Storage directory /home/hadoop/hdfs/name has
been successfully formatted. 否则格式化失败。
[root@NameNode ~]# /opt/hadoop-2.9.2/sbin/start-all.sh

- 查看HDFS: http://192.168.xxx.xxx:50070
