一、准备阶段
1.准备三台虚拟机和只要其中一台安装好jdk和hadoop,以及都已配好静态IP地址的虚拟机
上一节伪分布已经说明了安装jdk和hadoop,配置好静态ip,
有需要的小伙伴可以转至:
https://mp.csdn.net/mp_blog/creation/editor/127802752
我这里的jdk和hadoop路径如下,后面不在说明:
[root@master ~]#cd /opt
[root@master opt]#ll
总用量 0
drwxr-xr-x. 4 root root 44 11月 11 22:19 module
drwxr-xr-x. 2 root root 65 11月 11 22:18 software
[root@master opt]#cd module/
[root@master module]#ll
总用量 8
drwxr-xr-x. 11 1000 1000 4096 11月 16 17:26 hadoop-3.1.3
drwxr-xr-x. 8 10143 10143 4096 6月 9 2021 jdk1.8.0_301
当然java和hadoop版本及查看如下:
[root@master ~]#java -version
java version "1.8.0_301"
Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)
[root@master ~]#hadoop version
Hadoop 3.1.3
Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r
ba631c436b806728f8ec2f54ab1e289526c90579
Compiled by ztang on 2019-09-12T02:47Z
Compiled with protoc 2.5.0
From source with checksum ec785077c385118ac91aadde5ec9799
This command was run using /opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-common-3.1.3.jar
2.集群规划
NameNode 和 SecondaryNameNode,NameNode
和 ResourceManager,前者大家可以理解,后者呢,
我们都知道 ResourceManager 是比较吃内存的,
其实呢 NameNode 在HDFS工作量大的时候,也是很吃内存的。
| master | slave1 | slave2 |
---|
HDFS | NameNode,DataNode | DataNode | SecondaryNameNode,DataNode |
YARN | NodeManager | ResourceManager,NodeManager | NodeManager |
3.三台虚拟机及其运行环境准备
1.修改主机名分别为 master,slave1,slave
[root@master ~]#vim /etc/hostname #hostname 文件只存放主机
master
[root@slave1 ~]#vim/etc/hostname
slave1
[root@slave2 ~]#vim/etc/hostname
slave2
[root@master ~]#vim/etc/hosts
2.配置 IP 映射(三台主机都需配置)
[root@master ~]#vim/etc/hosts
[root@slave1 ~]#vim /etc/hosts
[root@slave2 ~]#vim /etc/hosts
前两行不动 添加以下内容
192.168.150.131 master
192.168.150.155 slave2
192.168.150.156 slave1
重启使配置生效(三台)
[root@master ~]#reboot
[root@slave1 ~]#reboot
[root@slave2 ~]#reboot
二、配置阶段
1.配置集群
首先进入/opt/module/hadoop-3.1.3/etc/hadoop/
core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
<!--指定 hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data/</value>
</property>
<!-- 配置HDFS网页登录使用的静态用户为root -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
hdfs-site.xml
<!-- NameNode web端访问地址 -->
<property>
<name>dfs.namenode.http-address</name>
<value>master:9870</value>
</property>
<!-- SecondaryNameNode web端访问地址 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave2:9868</value>
</property>
<!-- 文件数据副本数 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>slave1</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_COMF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://master:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为七天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
mapred-site.xml
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
hadoop-env.sh
利用Shif+G跳至最后一行的第一个字母,然后加入以下代码:
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
2.修改works文件
[root@master ~]# vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
master
slave1
slave2
三台虚拟机都一样,顺序可变,但注意每个名称后面不要有空格,
否则可能会导致出错。
3.三台虚拟机ssh免密登录
配置 ssh 免密登录,
[root@master ~]#ssh master
[root@slave1 ~]#ssh slave1
[root@slave2 ~]#ssh slave2
master进入ssh目录,三台分别进行
[root@master ~]#cd /root/.ssh/
三台都生成密钥对,
[root@master .ssh]#ssh-keygen -t rsa #敲三下回车
将公钥拷贝到需要每台免密登录的机器上,三台互相复制执行这些命令
[root@master .ssh]#ssh-copy-id master
[root@master .ssh]#ssh-copy-id slave1
[root@master .ssh]#ssh-copy-id slave2
4.rsync 远程同步工具分发配置
三台分别安装rsync
[root@master .ssh]#yum -y install rsync
[root@slave1 ~]#yum -y install rsync
[root@slave2 ~]#yum -y install rsync
有的虚拟机可能会出现镜像找不到,导致无法下载
可以执行yum -y update 来更新数据源,然后重启虚拟机再试试。
分发 hadoop 配置,注意这安装和配置环境变量伪分布就已经配置好了,
而且因为我们上面已经把相关的配置文件已经改好了,直接复制过去就ok。
[root@master ~]#rsync -av /opt/module root@slave1:/opt/
[root@master ~]#rsync -av /opt/module root@slave2:/opt/
分发环境变量
[root@master ~]#rsync -av /etc/profile.d/my_path.sh root@slave1:/etc/profile.d/
[root@master ~]#rsync -av /etc/profile.d/my_path.sh root@slave2:/etc/profile.d/
数据过去成功之后,建议把slave1和slave2重启一下reboot,让配置文件生效。
5.集群启动
格式化 NameNode
[root@master hadoop-3.1.3]#hdfs namenode -format
在倒数十三,十四行出现:/opt/module/hadoop-3.1.3
/data/dfs/name has been successfully formatted。
假如有些小伙伴把上面之前写的配置文件写错了就可能不会出现这个,
更改过来之后需要重新格式化。
启动 hdfs
[root@master hadoop-3.1.3]#start-dfs.sh
Starting namenodes on [master]
上一次登录:三 11月 16 17:30:00 CST 2022pts/1 上
master: namenode is running as process 11686. Stop it first.
Starting datanodes
上一次登录:三 11月 16 17:32:10 CST 2022pts/1 上
master: datanode is running as process 11814. Stop it first.
Starting secondary namenodes [slave2]
上一次登录:三 11月 16 17:32:10 CST 2022pts/1 上
[root@master hadoop-3.1.3]#jps
11686 NameNode
11814 DataNode
12075 Jps
有些小伙伴就好奇怎么就三个节点,不是还应该有一个NodeManager节点嘛?
这是因为我们还没有启动安装在slave1的yarn节点。在启动它之前我们需要增加
一些代码:
[root@slave1 ~]#vim /opt/module/hadoop-3.1.3/etc/hadoop/hadoop-env.sh
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
[root@slave1 ~]#source /opt/module/hadoop-3.1.3/etc/hadoop/hadoop-env.sh
现在就可以启动yarn了
[root@slave1 ~]#start-yarn.sh
Starting resourcemanager
上一次登录:三 11月 16 17:31:59 CST 2022从 192.168.150.1pts/0 上
Starting nodemanagers
上一次登录:三 11月 16 17:35:20 CST 2022pts/0 上
[root@slave1 ~]#jps
3122 Jps
2374 DataNode
2663 ResourceManager
2807 NodeManager
我们再回过去试试
[root@master hadoop-3.1.3]#jps
11686 NameNode
11814 DataNode
12648 Jps
12559 NodeManager
看一下slave2
[root@slave2 ~]#jps
2548 NodeManager
2453 SecondaryNameNode
2380 DataNode
2637 Jps
Web 端
HDFS master 主机 IP:9870
YARN slave1 主机 IP:8088
我们可以在windows下观看web端,前提是要关闭三台虚拟机的防火墙
[root@master ~]#systemctl stop firewalld
然后可以用ip+9870看HDFS,这里是配置在master节点上了,因此
输入192.168.150.131:9870/即可。Yarn同理就不说明了。
启动历史服务器 master
[root@master hadoop-3.1.3]#mapred --daemon start historyserve
[root@master ~]#jps
11686 NameNode
11814 DataNode
13075 NodeManager
13185 Jps
12957 JobHistoryServer
Web 端
master 主机 IP:19888
总结
这样,完全分布式就搭建成功了。当然hadoop完全分布是集群的一个前提,
必须要先有它才可以让我们继续学习以后的知识。