实验环境
CentOS 7.9 JDK 1.8 hadoop-3.2.3
准备工作
准备三台虚拟机,主机名分别为 hadoop102(name node)
、hadoop103(data node)
、hadoop104(secondary name node)
并且三台服务器也要互相都配置好ssh免密登录、主机名、静态IP、物理机IP映射、sudoers
分别配置好/etc/hosts
文件
这里需要注意一点:127.0.0.1
那里最好不要写 hadoop102 103 104 这种主机名,否则会导致namenode服务仅能本地(127.0.0.1)访问
接下来最好关闭防火墙
sudo systemctl stop firewalld.service
配置集群
核心配置文件 core-site.xml
<configuration>
<!-- 指定 NameNode 地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定 hadoop数据 的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.2.3/data</value>
</property>
<!-- 配置 HDFS 网页登录使用的静态用户为 hadoop -->
<property>
<name>hadoop.http.staticuser.user</name>
<!-- hadoop用户 -->
<value>hadoop</value>
</property>
</configuration>
HDFS配置文件 hdfs-site.xml
<configuration>
<!-- nn web端访问地址 -->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- 2nn web端访问地址 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
YARN配置文件 yarn-site.xml
<configuration>
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</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>
</configuration>
MapReduce配置文件 mapred-site.xml
<configuration>
<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
这里三台主机可以是以上相同的配置内容。以下的配置内容是我自己根据hadoop-3.2.3官方文档提供的HDFS
配置标签配置的,其中core-site.xml
三台主机是相同的。
core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
namenode hdfs-site.xml
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:50070</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/module/hadoop-3.2.3/data</value>
</property>
datanode hadoop103 hdfs-site.xml
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/module/hadoop-3.2.3/data</value>
</property>
2NN hdfs-site.xml
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/module/hadoop-3.2.3/data</value>
</property>
修改/opt/module/hadoop-3.2.3/etc/hadoop/workers
hadoop102
hadoop103
hadoop104
注意主机名称后不能有空格,hadoop104
后面不能有回车
xsync workers
初始化集群
如果集群是第一次启动则需要进行初始化,其中namenode
服务器执行hdfs namenode -format
,另外两台服务器执行hdfs datanode -format
,不过这两台服务器如果没有初始化,脚本也会自动帮其创建data
和logs
文件夹。
出现类似于以上信息则说明初始化成功
启动集群
进入到namenode
服务器的hadoop
目录下,执行start-dfs.sh
脚本
能在物理机的web端访问namenodeIP:9870
看到如下画面则说明结点都顺利启动
前前后后总共用了半天,才终于给我折腾好,在这里特别感谢一位牛逼学长腾出一晚上的时间帮我找问题帮我解答疑惑,结果最后发现是hosts那里没配好(我之前还信誓旦旦的说hosts没问题_(:з」∠)_)