写在前面
本次安装是采用三个本地虚拟机进行安装的方式。 Hadoop版本为3.2.1
本地电脑是i7-8700/16G
虚拟机配置选择了1核CPU,2G内存,20G硬盘,选择的系统是CentOS 8,安装的时候不确定会不会卡,此处跳过虚拟机安装教程。
虚拟机安装时记得指定静态ip,本机名可以取成master、slaver01、slaver02或hadoop1、hadoop2、hadoop3等,方便后面修改host文件,可以根据自己的喜好选择。
安装
配置时三台机器均需配置
关闭防火墙
systemctl stop firewalld //停止防火墙服务
systemctl disable firewalld //禁用防火墙开机自启
修改hosts文件
使用 vi /etc/hosts
命令,修改host文件,将三台机器的ip与主机名写进去(后续操作包括本步操作,若无特殊说明,仅在主节点操作即可,因为后面会复制到从节点中)。
192.168.11.128 master
192.168.11.129 slaver01
192.168.11.130 slaver02
ssh免密登录
执行ssh-keygen -t rsa
命令 生成一对公钥和私钥,存放路径在/root/.ssh/
中,这里一路回车就好。
然后将公钥复制到其他机器上,实现免密码登录命令如下
ssh-copy-id master
ssh-copy-id slaver01
ssh-copy-id slaver02
每次分别输入对应机器的密码即可。
然后可以尝试一下是否成功
可以看到已经可以免密登录,在三台虚拟机都互相可以免密登录后进入下一步。
安装JDK
在 /opt 路径下创建一个soft文件夹来保存安装的软件
mkdir /opt/soft
# 将jdk解压
tar -zxvf jdk-8u181-linux-x64.tar.gz -C /opt/soft/
# 修改环境变量
vi /etc/profile
# 按Shift+G跳到行尾,加入下面三行
export JAVA_HOME=/opt/soft/jdk1.8.0_91
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 刷新配置文件
source /etc/profile
安装Hadoop
# 解压Hadoop文件
tar -zxvf hadoop-3.2.1.tar.gz -C /opt/soft/
# 修改环境变量
vi /etc/profile
# 在最后下添加
export HADOOP_HOME=/opt/soft/hadoop-3.2.1
export PATH=$PATH:$HADOOP_HOME/bin
# 刷新环境变量
source /etc/profile
修改配置文件
以下文件均在** /opt/soft/hadoop-3.2.1/etc/hadoop**中
修改hadoop-env.sh
vi hadoop-env.sh
加入
export JAVA_HOME=/opt/soft/jdk1.8.0_181
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
修改core-site.xml
<configuration>
<!-- 指定HDFS老大(namenode)的通信地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/soft/hadoop-3.2.1/tmp</value>
</property>
</configuration>
修改hdfs-site.xml
<configuration>
<!-- 设置namenode的http通讯地址 -->
<property>
<name>dfs.namenode.http-address</name>
<value>master:50070</value>
</property>
<!-- 设置secondarynamenode的http通讯地址 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave1:50090</value>
</property>
<!-- 设置namenode存放的路径 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/soft/hadoop-3.2.1/name</value>
</property>
<!-- 设置hdfs副本数量 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 设置datanode存放的路径 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/soft/hadoop-3.2.1/data</value>
</property>
</configuration>
修改mapred-site.xml
<configuration>
<!-- 通知框架MR使用YARN -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
修改yarn-site.xml
<configuration>
<!-- 设置 resourcemanager 在哪个节点-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<!-- reducer取数据的方式是mapreduce_shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>
新建masters文件
文件中指定的是secondary namenode 的主机
vi masters
# 添加下面一行,指定slaver01 为secondary namenode
slaver01
新建workers文件
文件中指定DataNode
vi workers
# 添加下面一行,指定slaver01 为secondary namenode
slaver01
slaver02
创建tmp、name、data文件夹
与上面的配置文件相对应
在**/opt/soft/hadoop-3.2.1/**路径下创建tmp、name、data文件夹
cd /opt/soft/hadoop-3.2.1/
mkdir tmp name data
复制文件到其他主机
复制/etc/hosts
scp /etc/hosts slaver01:/etc/
scp /etc/hosts slaver02:/etc/
复制/etc/profile
scp /etc/profile slaver01:/etc/
scp /etc/profile slaver02:/etc/
复制/opt/soft
scp -r /opt/soft slaver01:/opt/
scp -r /opt/soft slaver02:/opt/
环境变量复制过去后记得在对应的虚拟机中刷新环境变量
启动&测试
以下命令均需要在**/opt/soft/hadoop-3.2.1/**执行
第一次启动需要格式化namenode
./bin/hdfs namenode -format
启动dfs
./sbin/start-dfs.sh
启动yarn
./sbin/start-yarn.sh
查看jps
master:
slaver01:
slaver02:
测试是否启动成功
测试hdfs
浏览器中访问192.168.11.128:50070
可以看到是有数据的并且有两个节点启动
测试yarn
浏览器中访问http://192.168.11.128:8088
成功
至此,3台机器的hadoop集群搭建成功