网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
ISO映像选择下载的CentOS-Stream-9-xxxxxxx.iso
2)启动虚拟机
3)开始安装
选择Install CentOS Stream 9
进行安装
4)语言选择English
5)安装前的配置
① 安装目的地
默认配置即可
② 软件选择
选择最小安装
③ 时区
区域选择Asia
, 城市选择shanghai
④ 网络设置
确保网卡已经打开
设置主机名,也可以后续设置
⑤ 配置root用户密码
注意勾选Allow root SSH login with password
,作为练习,密码可以设置简单点,比如123456
6)等待安装完成后重启系统。
7)配置虚拟机SSH远程登录
① 启动hadoop1
进入登录界面输入用户名root
和密码,注意:密码输入时光标不会跳动
②配置虚拟机SSH远程登录
第一步,检查SSH服务是否安装和启动
在虚拟机中,分别执行rpm -qa | grep ssh
和ps -ef | grep sshd
命令,查看当前虚拟机是否安装了SSH服务,以及SSH服务是否启动。
rpm
(英文全拼:redhat package manager) 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序,由于它遵循 GPL 规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM 套件管理方式的出现,让 Linux 易于安装,升级,间接提升了 Linux 的适用度。ps
(英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。- grep (global regular expression) 命令用于查找文件里符合条件的字符串或正则表达式。该命令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
如果没有安装,可以使用以下命令进行安装
yum install openssh-server openssh-clients
第二步,修改SSH服务配置文件
默认情况下,CentOS Stream 9不允许用户root进行远程登录,在虚拟机Hadoop2中执行vi /etc/ssh/sshd_config
命令编辑配置文件sshd_config。
PermitRootLogin yes
对于小白,这里介绍下
vi
命令的简单使用方式:使用vi命令打开文件后,输入字母i
进入插入模式 => 修改相应的文件内容 => 按**Esc**
键进入命令行模式 => 输入:
进入底行模式 => 输入x
或者wq
保存退出。如果文件修改后不想保存,进行底行模式后输入
q!
进行不保存退出。
第三步, 重启SSH服务
systemctl restart sshd
3. 克隆主机
1)关闭hadoop1
使用命令shutdown -h now
关闭hadoop1
或者
![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=images%2F
2)克隆虚拟机
克隆虚拟机hadoop2、hadoop3,以克隆hadoop2为例
->
- 完整克隆的虚拟机是通过复制原虚拟机创建完全独立的新虚拟机,不和原虚拟机共享任何资源,可以脱离原虚拟机独立使用。
- 链接克隆的虚拟机需要和原虚拟机共享同一个虚拟磁盘文件,不能脱离原虚拟机独立运行。
4. 网络设置
网络整体规划如下:
虚拟机名 | 主机名 | IP |
---|---|---|
hadoop1 | hadoop1 | 192.168.121.160 |
hadoop2 | hadoop2 | 192.168.121.161 |
hadoop3 | hadoop3 | 192.168.121.162 |
1)配置VMware Workstation网络
在VMware Workstation主界面,依次单击“编辑”→“虚拟网络编辑器…”选项,配置VMware Workstation网络。
2)配置静态IP
以hadoop1主机为例,类似配置hadoop2、 hadoop3
编辑配置文件
vi /etc/NetworkManager/system-connections/ens33.nmconnection
method=manual
address1=192.168.121.160/24,192.168.121.2
dns=114.114.114.114
修改uuid(只需要修改hadoop2、 hadoop3主机)
uuid的作用是使分布式系统中的所有元素都有唯一的标识码。
sed -i '/uuid=/c\uuid='`uuidgen`'' /etc/NetworkManager/system-connections/ens33.nmconnection
重启ens33网卡和重新加载网络配置文件
nmcli c reload
nmcli c up ens33
查看网络信息
ip a
检测网络
ping www.baidu.com
输入
ctrl
+c
退出检测
3)主机名
配置hadoop2主机名
hostnamectl set-hostname hadoop2
配置hadoop3主机名
hostnamectl set-hostname hadoop3
4)配置虚拟机SSH远程登录
① 配置putty
② 配置winscp
5)修改映射文件
在虚拟机hadoop1主机执行vi /etc/hosts
命令编辑映射文件hosts,在配置文件中添加如下内容。
192.168.121.160 hadoop1
192.168.121.161 hadoop2
192.168.121.162 hadoop3
在虚拟机hadoop1主机执行如下命令,拷贝配置到hadoop2, hadoop3
scp /etc/hosts root@hadoop2:/etc/hosts
scp /etc/hosts root@hadoop3:/etc/hosts
6) 关闭防火墙
关闭虚拟机Hadoop1、Hadoop2和Hadoop3的防火墙,分别在3台虚拟机中运行如下命令关闭防火墙并禁止防火墙开启启动。
- 关闭防火墙
systemctl stop firewalld
- 禁止防火墙开机启动
systemctl disable firewalld
5. 免密登录
在集群环境中,主节点需要频繁的访问从节点,以获取从节点的运行状态,主节点每次访问从节点时都需要通过输入密码的方式进行验证,确定密码输入正确后才建立连接,这会对集群运行的连续性造成不良影响,为主节点配置SSH免密登录功能,可以有效避免访问从节点时频繁输入密码。接下来,虚拟机hadoop1作为集群环境的主节点实现SSH免密登录。
SSH免密登录原理(原理:非对称加密算法:公钥加密(给别人)、私钥解密给自己)
1)生成密钥
在虚拟机hadoop1中执行ssh-keygen -t rsa
命令,生成密钥。
查看秘钥文件
在虚拟机hadoop1中执行ll /root/.ssh
命令查看密钥文件。
2)复制公钥文件
将虚拟机hadoop1生成的公钥文件复制到集群中相关联的所有虚拟机,实现通过虚拟机hadoop1可以免密登录虚拟机hadoop1、hdp3-2和hdp3-3。
ssh-copy-id hadoop1
ssh-copy-id hadoop2
ssh-copy-id hadoop3
3)测试免密登录
ssh hadoop1
ssh hadoop2
ssh hadoop3
6. 安装JDK
约定:软件安装包存放于
/software
,软件安装至/opt
1)创建目录
在虚拟机hadoop1中执行mkdir /software
2)上传jdk
利用winscp将jdk-8u261-linux-x64.tar.gz
上传至hadoop1的/software
目录
3)解压jdk
cd /software
ll
tar -xvf jdk-8u261-linux-x64.tar.gz -C /opt
4)配置JDK系统环境变量
在虚拟机hadoop1执行vi /etc/profile
命令编辑环境变量文件profile,在该文件的底部添加配置JDK系统环境变量的内容。
export JAVA\_HOME=/opt/jdk1.8.0_261
export PATH=$PATH:$JAVA\_HOME/bin
记得执行source /etc/profile
重新加载系统环境变量
5)验证jdk
java -version
6)同步文件
分发JDK安装目录和系统环境变量文件至hadoop2、hadoop3
scp -r /opt/jdk* root@hadoop2:/opt
scp /etc/profile root@hadoop2:/etc
scp -r /opt/jdk* root@hadoop3:/opt
scp /etc/profile root@hadoop3:/etc
二、完全分布式部署
基于完全分布式模式部署Hadoop,需要将Hadoop中HDFS和YARN的相关服务运行在不同的计算机中,我们使用已经部署好的3台虚拟机Hadoop1、Hadoop2和Hadoop3。为了避免在使用过程中造成混淆,先规划HDFS和YARN的相关服务所运行的虚拟机。
虚拟机名 | 主机名 | IP | 角色 | 服务 |
---|---|---|---|---|
hadoop1 | hadoop1 | 192.168.121.160 | master | NameNode、ResourceManager |
hadoop2 | hadoop2 | 192.168.121.161 | workers | SecondaryNameNode、DataNode、NodeManager |
hadoop3 | hadoop3 | 192.168.121.162 | workers | DataNode、NodeManager |
1. 安装Hadoop
1)解压
以解压方式安装Hadoop,将Hadoop安装到虚拟机Hadoop1的/opt
目录。
tar -xvf /software/hadoop-3.3.6.tar.gz -C /opt
2)配置环境变量
在Hadoop1执行vi /etc/profile
命令配置系统环境变量,在该文件的底部添加如下内容。
export HADOOP\_HOME=/opt/hadoop-3.3.6
export PATH=$PATH:$HADOOP\_HOME/bin:$HADOOP\_HOME/sbin
3)验证
在虚拟机Hadoop1的任意目录执行hadoop version
命令查看当前虚拟机中Hadoop的版本号。
2. 修改配置文件
配置文件 | 功能描述 |
---|---|
hadoop-env.sh | 配置Hadoop运行时的环境,确保HDFS能够正常运行NameNode、SecondaryNameNode和DataNode服务 |
yarn-env.sh | 配置YARN运行时的环境,确保YARN能够正常运行ResourceManager和NodeManager服务 |
core-site.sh | Hadoop核心配置文件 |
hdfs-site.xml | HDFS核心配置文件 |
mapred-site.xml | MapReduce核心配置文件 |
yarn-site.xml | YARN核心配置文件 |
workers | 控制从节点所运行的服务器 |
1)配置Hadoop运行时环境
在Hadoop安装目录/etc/hadoop/目录,执行vi hadoop-env.sh
命令,在hadoop-env.sh文件的底部添加如下内容。
export JAVA\_HOME=/opt/jdk1.8.0_261
export HDFS\_NAMENODE\_USER=root
export HDFS\_DATANODE\_USER=root
export HDFS\_SECONDARYNAMENODE\_USER=root
export YARN\_RESOURCEMANAGER\_USER=root
export YARN\_NODEMANAGER\_USER=root
- 指定Hadoop使用的JDK
- 指定管理NameNode、DataNode等服务的用户为root
2)配置hadoop
在Hadoop安装目录/etc/hadoop/目录,执行vi core-site.xml
命令,在core-site.xml文件中添加如下内容。
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/data/hadoop-3.3.6</value>
</property>
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
注意:
- 上面的配置项要配置到
<configuration>
标签中,后面的配置项类似配置项:
- fs.defaultFS:指定HDFS的通信地址
- hadoop.tmp.dir:指定Hadoop临时数据的存储目录
- hadoop.http.staticuser.user:指定通过Web UI访问HDFS的用户root
- hadoop.proxyuser.root.hosts:允许任何服务器的root用户可以向Hadoop提交任务
- hadoop.proxyuser.root.groups:允许任何用户组的root用户可以向Hadoop提交任务
- fs.trash.interval:指定HDFS中被删除文件的存活时长为1440秒
更多参数请参考官网:https://hadoop.apache.org/docs/r3.3.6/hadoop-project-dist/hadoop-common/core-default.xml
3)配置HDFS
在Hadoop安装目录/etc/hadoop/目录,执行vi hdfs-site.xml
命令,在hdfs-site.xml文件中添加如下内容。
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop2:9868</value>
</property>
配置项:
- dfs.replication:指定数据副本个数
- dfs.namenode.secondary.http-address:指定SecondaryNameNode服务的通信地址
更多参数请参考官网:https://hadoop.apache.org/docs/r3.3.6/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
4)配置MapReduce
在Hadoop安装目录/etc/hadoop/目录,执行vi mapred-site.xml
命令,在mapred-site.xml文件中添加如下内容。
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.job.ubertask.enable</name>
<value>true</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop1:19888</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>
配置项:
- mapreduce.framework.name:MapReduce的执行模式,默认是本地模式,另外可以设置成classic(采用MapReduce1.0模式运行) 或 yarn(基于YARN框架运行).
- mapreduce.job.ubertask.enable:是否允许开启uber模式,当开启后,小作业会在一个JVM上顺序运行,而不需要额外申请资源
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
operty>
mapreduce.map.env
HADOOP_MAPRED_HOME=
H
A
D
O
O
P
H
O
M
E
<
/
v
a
l
u
e
>
<
/
p
r
o
p
e
r
t
y
>
<
p
r
o
p
e
r
t
y
>
<
n
a
m
e
>
m
a
p
r
e
d
u
c
e
.
r
e
d
u
c
e
.
e
n
v
<
/
n
a
m
e
>
<
v
a
l
u
e
>
H
A
D
O
O
P
M
A
P
R
E
D
H
O
M
E
=
{HADOOP_HOME}</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=
HADOOPHOME</value></property><property><name>mapreduce.reduce.env</name><value>HADOOPMAPREDHOME={HADOOP_HOME}
>
> **配置项:**
>
>
> * mapreduce.framework.name:MapReduce的执行模式,默认是本地模式,另外可以设置成classic(采用MapReduce1.0模式运行) 或 yarn(基于YARN框架运行).
> * mapreduce.job.ubertask.enable:是否允许开启uber模式,当开启后,小作业会在一个JVM上顺序运行,而不需要额外申请资源
[外链图片转存中...(img-LaBbsNzW-1715507561847)]
[外链图片转存中...(img-kYTCVawH-1715507561848)]
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**