[Hadoop]从安装第一台虚拟机开始搭建Hadoop完全分布式
Hadoop的运行环境有三种,单机模式,伪分布式,完全分布式,前面两种一般用于学习和测试,后面的完全分布式才是真正生产环境所采用的配置。本篇文章将从安装第一台Linux虚拟机开始,直到完全分布式集群搭建完成且运行成功。
你需要准备的东西:
- 一台计算机(macOS或者Windows)
- Cenos 7 系统镜像
- JDK或者JRE(可稍后使用命令远程下载)
- VMware或其他虚拟机软件
- 一个可用来连接的终端(macOS可用系统自带终端,Windows可用Xshell或FinallShell等工具)
- Hadoop安装包(可稍后使用命令远程下载)
虚拟机环境准备
下载镜像
首先进入Centos官网下载所需要的系统镜像iso文件:下载Centos
根据系统架构选择,这里选择x86_64,ARM64架构则选择下一个:
随便选择一个镜像站,这里我选的是第二个wsu.edu美国华盛顿州立大学的镜像:
选择最小的Netinstall安装方式(其他镜像站也这样选)
安装虚拟机
下载好之后打开Vmware或其他软件,这里以macOS的Vmware为例。
新建虚拟机
选择从ISO镜像安装:
把网络开关打开,并设置主机名hadoop-master(这台虚拟机将为主节点)
设置软件安装源(先开启网络再设置安装源):
如果挂载了镜像自动检测到了则不用管,否则选择网络安装源:
官方
http安装源:http://mirror.centos.org/centos/7/os/x86_64/
https安装源:https://mirror.centos.org/centos/7/os/x86_64/
国内
- 阿里云:
http://mirrors.aliyun.com/centos/7/os/x86_64/
- 清华大学:
https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/
由于不是实际生产环境,INSTALLATION DESTINATION磁盘分区就让他自动分配。
在SOFTWARE SELECTION选择最小化安装(Minimal)。
点击Done回到上一步,此时Begin Installation(开始安装应该可以点击,如果不能则检查是否有未配置项,如语言,时区等),点击开始安装。
在安装过程中设置root用户密码
配置IP地址
进入系统之后,使用root用户登陆,查看当前IP地址,ping www.baidu.com 测试网络状态:
可以看到,系统给我们临时分配了一个192.168.174.3的IP地址,且与百度通信正常。
修改IP地址(ifcfg-ens33根据具体网卡型号选择):
vi /etc/sysconfig/network-scripts-ifcfg-ens33
将BOOTPROTO改为static,加入以下代码,master主机IP设置为192.168.174.101,稍后子节点将为102与103:
IPADDR="192.168.174.101" GATEWAY="192.168.174.1" NETMASK="192.168.174.1"
重启网络服务:
systemctl restart network
再次查看IP和网络状态:
IP已经成功改为192.168.174.101,且与百度通信成功。
关闭防火墙
systemctl stop firewalld.service systemctl disable firewalld.service
添加主机名映射
vi /etc/hosts
添加以下内容:
192.168.174.101 hadoop-master #主节点 192.168.174.102 hadoop-slave1 #子节点1 192.168.174.103 hadoop-slave2 #子节点2
关闭SELINUX
selinux是一个安全机制,有时候会触发某些限制导致服务无法访问,这里将他关闭。
vi /etc/selinux/config
将SELINUX=enforcing改为disabled
重启服务器
reboot
复制虚拟机
将Hadoop-master完整克隆出两份,分别命名为Hadoop-slave1和Hadoop-slave2。
开启Hadoop-slave1和Hadoop-slave2,分别修改IP为192.168.174.102和192.168.174.103。
修改子节点主机名
在Hadoop-slave1上执行:
hostnamectl set-hostname hadoop-slave1
在Hadoop-slave2上执行:
hostnamectl set-hostname hadoop-slave2
配置免密登录
首先在用户主目录生成私钥与公钥:
cd #切换到主目录 ssh-keygen -t rsa #生成私钥与公钥
一路回车不设置密码。
将公钥追加到authorized_keys文件:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
必要时给此文件赋权:
chmod 600 .ssh/authorized_keys
此时可实现本机免密登录:ssh hadoop-slave2或ssh 192.168.174.103
自行按照上述步骤依次实现hadoop-slave1和hadoop-master的本机免密登录。
登录hadoop-slave1主机,将hadoop-master的公钥文件id_rsa.pub复制到本地(此处需要输入master主机的密码):
cd #切换到主目录 scp root@hadoop-master:/root/.ssh/id_rsa.pub /root/ #将id_rsa.pub公钥文件下载到root用户主目录
将master主机的公钥文件内容追加到slave1主机的authorized_keys文件:
cat id_rsa.pub >> .ssh/authorized_keys
在master主机上测试:ssh hadoop-slave1(主机名或者IP地址)
登录hadoop-master主机,将hadoop-slave1的公钥文件id_rsa.pub复制到本地(此处需要输入slave1主机的密码):
cd #切换到主目录 scp root@hadoop-slave1:/root/.ssh/id_rsa.pub /root/ #将id_rsa.pub公钥文件下载到root用户主目录
将slave1主机的公钥文件内容追加到master主机的authorized_keys文件:
cat id_rsa.pub >> .ssh/authorized_keys
在slave1主机上测试:ssh hadoop-master(主机名或者IP地址)
登录hadoop-slave2主机,将hadoop-master的公钥文件id_rsa.pub复制到本地(此处需要输入master主机的密码):
cd #切换到主目录 scp root@hadoop-master:/root/.ssh/id_rsa.pub /root/ #将id_rsa.pub公钥文件下载到root用户主目录
将master主机的公钥文件内容追加到slave2主机的authorized_keys文件:
cat id_rsa.pub >> .ssh/authorized_keys
在master主机上测试:ssh hadoop-slave2(主机名或者IP地址)
登录hadoop-master主机,将hadoop-slave2的公钥文件id_rsa.pub复制到本地(此处需要输入slave2主机的密码):
cd #切换到主目录 scp root@hadoop-slave2:/root/.ssh/id_rsa.pub /root/ #将id_rsa.pub公钥文件下载到root用户主目录
将slave2主机的公钥文件内容追加到master主机的authorized_keys文件:
cat id_rsa.pub >> .ssh/authorized_keys
在slave2主机上测试:ssh hadoop-master(主机名或者IP地址)
安装JDK
分别在三台主机上输入以下命令安装JAVA环境:
yum install -y java-1.8.0-openjdk-devel.x86_64
yum会自动将jdk安装到/usr/lib/jvm目录
在三台主机分别配置环境变量
vi /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-1.8.0 #根据自己jvm目录中实际名称设置 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
使配置文件生效
source /etc/profile
检查Java版本号
java -version
安装Hadoop
安装
在master主机安装hadoop
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz
如果wget命令未找到,请先安装wget
yum install -y wget
解压到/usr/local目录
tar -xzvf hadoop-3.3.1.tar.gz -C /usr/local
改名为hadoop
cd /usr/local mv hadoop-3.3.1/ hadoop
配置环境变量,修改配置文件vi /etc/profile
export HADOOP_HOME=/usr/local/hadoop export PATH=$PATH:$HADOOP_HOME/bin
使配置文件生效
source /etc/profile
配置文件
hadoop配置文件均在/usr/local/hadoop/etc/hadoop
路径下
修改Hadoop核心配置文件/usr/local/hadoop/etc/hadoop/core-site.xml
,通过fs.default.name
指定NameNode的IP地址和端口号,通过hadoop.tmp.dir
指定hadoop数据存储的临时文件夹。
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-master:9000</value>
</property>
</configuration>
特别注意:如没有配置hadoop.tmp.dir
参数,此时系统默认的临时目录为:/tmp/hadoo-hadoop
。而这个目录在每次重启后都会被删除,必须重新执行format才行,否则会出错。
修改HDFS核心配置文件/usr/local/hadoop/etc/hadoop/hdfs-site.xml
,通过dfs.replication
指定HDFS的备份因子为3,通过dfs.name.dir
指定namenode节点的文件存储目录,通过dfs.data.dir
指定datanode节点的文件存储目录,通过dfs.permissions
授权使用root用户登录。
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/usr/local/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/usr/local/hadoop/hdfs/data</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>http://hadoop-master:9001</value>
</property>
</configuration>
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop-master</value>
</property>
</configuration>
由于hadoop默认不支持root用户启动,我们需要对配置文件做出一点修改。
在hadoop-env.sh配置文件中加入以下内容运行以root用户启动节点:
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-env.sh的JAVA_HOME目录(一般是在第54行,版本不同可能有差异):
export JAVA_HOME=/usr/lib/jvm/java-1.8.0 #根据自己jvm目录中实际名称设置
该文件指定namenode节点所在的服务器机器。删除localhost,添加namenode节点的主机名hadoop-master
vi /usr/local/hadoop/etc/hadoop/masters
## 内容
hadoop-master
新建/usr/local/hadoop/etc/hadoop/slaves
文件,该文件指定哪些服务器节点是datanode节点。
vi /usr/local/hadoop/etc/hadoop/slaves
## 内容
hadoop-slave1
hadoop-slave2
配置hadoop-slave的hadoop环境
在master主机复制hadoop到hadoop-slave1节点
scp -r /usr/local/hadoop hadoop-slave1:/usr/local/
登录hadoop-slave1服务器,删除slaves内容
rm -rf /usr/local/hadoop/etc/hadoop/slaves
配置环境变量
vi /etc/profile
## 内容
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
使得hadoop命令在当前终端立即生效;
source /etc/profile
在master主机复制hadoop到hadoop-slave2节点
scp -r /usr/local/hadoop hadoop-slave2:/usr/local/
登录hadoop-slave2服务器,删除slaves内容
rm -rf /usr/local/hadoop/etc/hadoop/slaves
配置环境变量
vi /etc/profile
## 内容
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
使得hadoop命令在当前终端立即生效;
source /etc/profile
启动集群
格式化HDFS文件系统
进入master的/usr/local/hadoop目录,执行以下操作
bin/hadoop namenode -format
格式化namenode,第一次启动服务前执行的操作,以后不需要执行。
启动hadoop(在三个节点都执行):
sbin/start-all.sh
使用jps查看节点信息
如果子节点没有激活Datanode,使用命令手动启动:
sbin/hadoop-daemon.sh start datanode
版权声明:
作者:小鱼
链接:https://afish.org/index.php/2023/11/16/hadoop_install/
来源:小鱼的blog
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论