前置操作
jdk和hadoop环境变量要配置好
三台服务器的名称分别是
hadoop112、hadoop113、hadoop114
修改了/etc/hosts文件将三个名称绑定了服务器
例如
hadoop112 192.168.1.112
hadoop113 192.168.1.113
hadoop114 192.168.1.114注意
hadoop和jdk目录在/opt文件夹下,
其中环境变量如下
如果后面配置文件出现了hadoop路径问题,根据自己的实际环境修改一下
配置地图:
hadoop完全分布式配置表格 hadoop112 hadoop113 hadoop114 HDFS NameNode
DataNode
DataNode
SecondaryNameNode
DataNode
YARN NodeManager
ResourceManager
NodeManager
NodeManager
修改workers文件(相当于2.x版本的slaves文件)不能有空格和空行
以下操作均是修改配置文件,在 hadoop-3.2.1/etc/hadoop 文件夹下
首先修改workers文件! 不然后面DataNode结点不能全部启动
vim workers
写入:workers记录的是datanode地址
hadoop112
hadoop113
hadoop114
1)核心配置文件
配置core-site.xml 注意路径问题!
sudo vim core-site.xml
在该文件中编写如下配置
<!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop112:9000</value> </property> <!-- 指定Hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-3.2.1/data/tmp</value> </property> <!-- 缓存文件大小 --> <property> <name>io.file.buffer.size</name> <value>131072</value> </property>
(2)HDFS配置文件
2.1、配置hadoop-env.sh
sudo vim hadoop-env.sh
添加java环境变量的值,可以通过echo $JAVA_HOME得到java的家目录(前提是安装配置好了java)
在文件开头添加即可
export JAVA_HOME=/opt/module/jdk1.8.0_211/
2.2、配置hdfs-site.xml
sudo vim hdfs-site.xml
写入文件 注意复制到<configuration>标签内
<!-- 副本数设置为3 --> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- 指定 hadoop 辅助名称节点的地址 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop114:50090</value> </property> <!-- 指定名称结点缓存数据的路径 --> <property> <name>dfs.namenode.name.dir</name> <value>/opt/module/hadoop-3.2.1/data/tmp</value> </property> <!-- 指定数据结点缓存数据的路径 --> <property> <name>dfs.datanode.data.dir</name> <value>/opt/module/hadoop-3.2.1/data/data</value> </property>
(3)YARN配置文件
3.1、配置yarn-env.sh
sudo vim yarn-env.sh
写入
export JAVA_HOME=/opt/module/jdk1.8.0_211/
3.2、配置yarn-site.xml
sudo vim yarn-site.xml
注意复制到<configuration>标签内
<!-- Reducer获取数据的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定启动YARN的ResourceManager的主机地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop113</value> </property>
(4)MapReduce配置文件
4.1、配置mapred-env.sh
sudo vim mapred-env.sh
写入
export JAVA_HOME=/opt/module/jdk1.8.0_211/
4.2、配置mapred-site.xml
sudo vim mapred-site.xml
<!-- 指定以Yarn方式运行 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property>
分发配置文件=====xsync脚本看这篇博客
https://blog.csdn.net/qq_41813208/article/details/102575933
通过xsync脚本分发
执行下面命令,将修改后的hadoop配置文件同步到hadoop113、hadoop114服务器
xsync /opt/moudel/hadoop-3.2.1
检验一下hadoop113、hadoop114服务器的配置文件有没有和hadoop112一样同步了
比如查看一下core-site.xml文件
cat /opt/module/hadoop-3.2.1/etc/hadoop/core-site.xml
是否和hadoop112一样
群起服务器部分
最后群起集群
首先需要退出所有服务器的DataNode、NameNode、SecondaryNameNode进程关闭输入jps显示除jps的所有进程
注意!!!
启动hdfs前需要格式化namenode如果是第一次使用则需要执行
hdfs namenode -format
后面不可以使用这条命令,原因如下链接 https://blog.csdn.net/qq_41813208/article/details/100753659
(注意*如果前面以及格式化了就不用再格式化了原因,见博客namenode不能一直格式化的原因)
一、启动hdfs
关闭方法输入:stop-dfs.sh
启动方法
start-dfs.sh
即可这个脚本文件在hadoop根目录sbin/下
二、启动YARN
巨大的坑需要注意一下!
必须要在hadoop113上启动,原因在于ResourceManeger在hadoop113上!
执行start-yarn.sh
得到启动结果,如果中途遇到输入密码,则配置一下无密登录
关于无密登录参考这两篇博客:
https://blog.csdn.net/qq_41813208/article/details/102597273
https://blog.csdn.net/qq_41813208/article/details/102575933
全部启动的情况如下图,
启动hdfs时会启动HDFS一行的进程
启动Yarn是会启动YARN一行的进程
hadoop112 | hadoop113 | hadoop114 | |
HDFS | NameNode DataNode |
DataNode |
SecondaryNameNode DataNode |
YARN | NodeManager |
ResourceManager NodeManager |
NodeManager |
最后验证一下
注意:hadoop-3.x版本的端口由50070改成了9870端口
如果访问不到页面,则关闭服务器的防火墙
在hadoop112上关闭,输入sudo systemctl stop firewalld.service 即可关闭防火墙,就可以访问到下面的页面
永久关闭sudo systemctl disable firewalld.service
浏览器输入hadoop112的ip+9870端口访问页面表示成功!
http://hadoop112:9870
问题解决篇
如果出现其他结点都启动起来了,但是名称结点起不来。说明namenode经过了多次格式化,解决方法是
首先先关闭集群
删除 对应文件(就是前面core-site.xml配置中hadoop.tmp.dir配置对应的路径),然后重新格式化一下。
hdfs namenode -format
原因:https://blog.csdn.net/qq_41813208/article/details/100753659
重新格式化后,启动hdfs
输入 start-dfs.sh
这时候你会发现那么node结点启动起来了。