[Hadoop]从安装第一台虚拟机开始搭建Hadoop完全分布式

Hadoop的运行环境有三种,单机模式,伪分布式,完全分布式,前面两种一般用于学习和测试,后面的完全分布式才是真正生产环境所采用的配置。本篇文章将从安装第一台Linux虚拟机开始,直到完全分布式集群搭建完成且运行成功。

你需要准备的东西:

  • 一台计算机(macOS或者Windows)
  • Cenos 7 系统镜像
  • JDK或者JRE(可稍后使用命令远程下载)
  • VMware或其他虚拟机软件
  • 一个可用来连接的终端(macOS可用系统自带终端,Windows可用XshellFinallShell等工具)
  • Hadoop安装包(可稍后使用命令远程下载)

虚拟机环境准备

下载镜像

首先进入Centos官网下载所需要的系统镜像iso文件:下载Centos

根据系统架构选择,这里选择x86_64,ARM64架构则选择下一个:

随便选择一个镜像站,这里我选的是第二个wsu.edu美国华盛顿州立大学的镜像:

选择最小的Netinstall安装方式(其他镜像站也这样选)

安装虚拟机

下载好之后打开Vmware或其他软件,这里以macOS的Vmware为例。

新建虚拟机

选择从ISO镜像安装:

注意:这里要使用方向键手动选择Install Centos 7

为了方便,在安装过程中开启网络

把网络开关打开,并设置主机名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

此处是使用的macOS的终端操作,ssh 192.168.174.101连接服务器,后续将全部使用终端

添加主机名映射

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-slave1Hadoop-slave2,分别修改IP为192.168.174.102192.168.174.103。

修改子节点主机名

在Hadoop-slave1上执行:

hostnamectl set-hostname hadoop-slave1

在Hadoop-slave2上执行:

hostnamectl set-hostname hadoop-slave2

配置免密登录

三台主机都需要先实现本机免密登录,以hadoop-slave2为例:

首先在用户主目录生成私钥与公钥:

cd #切换到主目录
ssh-keygen -t rsa #生成私钥与公钥

一路回车不设置密码。

将公钥追加到authorized_keys文件:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

必要时给此文件赋权:

chmod 600 .ssh/authorized_keys

此时可实现本机免密登录:ssh hadoop-slave2ssh 192.168.174.103

自行按照上述步骤依次实现hadoop-slave1和hadoop-master的本机免密登录。

实现hadoop-master和hadoop-slave1的相互免密登录

登录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-master和hadoop-slave2的相互免密登录

登录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环境:

JDK版本需与Hadoop版本兼容,如Hadoop3*需要JDK1.8*
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路径下

core-site.xml配置文件

修改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-site.xml配置文件

修改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>

 

mapred-site.xml配置文件
<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>
yarn-site.xml配置文件
<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-env.sh配置文件

由于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目录中实际名称设置

新建masters文件或使用hadoop3.3.1的works文件

该文件指定namenode节点所在的服务器机器。删除localhost,添加namenode节点的主机名hadoop-master

vi /usr/local/hadoop/etc/hadoop/masters
## 内容
hadoop-master
新建slaves文件,hadoop3.3.1没有这个文件

新建/usr/local/hadoop/etc/hadoop/slaves文件,该文件指定哪些服务器节点是datanode节点。

vi /usr/local/hadoop/etc/hadoop/slaves
## 内容
hadoop-slave1
hadoop-slave2

配置hadoop-slave的hadoop环境

slave1节点

在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
slave2节点

在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
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录