Hadoop平台完全分布式安装(1主2从)

基于CentOS 7的Hadoop平台完全分布式安装,先凑合用,有时间再用ubuntu重新弄。

基础环境配置

主机名 IP地址 账号 密码
master 192.168.1.100 root 123456
slave1 192.168.1.101 root 123456
slave2 192.168.1.102 root 123456

设置三台虚拟机的静态ip(网卡名记得修改):

命令:

1
[root@master ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33 

文件内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens35
DEVICE=ens35
ONBOOT=yes # 开机自动获取IP
IPADDR=192.168.1.100 # 配置的IP地址 slave1改为192.168.1.101 slave1改为192.168.1.102
NETMASK=255.255.255.0 # 配置的掩码
GETWAY=192.168.1.254 # 配置的网关

重启网卡:

1
[root@master ~]# systemctl restart network

修改后使用ip a查看ip是否修改成功,如已安装net-tools亦可以使用ifconfig:

修改三个节点的主机名:

1
[root@master ~]# hostnamectl set-hostname master

slave1:

1
2
3
[root@localhost ~]# hostnamectl set-hostname slave1
[root@localhost ~]# bash
[root@slave1 ~]#

slave2:

1
2
3
[root@localhost ~]# hostnamectl set-hostname slave2
[root@localhost ~]# bash
[root@slave2 ~]#

或者直接跳过hostnamectl,直接进行下面的修改/etc/hosts文件,修改后再执行systemctl restart network

在master节点的/etc/hosts内部做ip和主机名的映射:

命令:

1
[root@master ~]# vi /etc/hosts

内容:

1
2
3
192.168.1.100 master
192.168.1.101 slave1
192.168.1.102 slave2

将master的/etc/hosts配置文件拷贝到slave1和slave2的/etc目录下

或者使用MobaXTerm的Multiexec,在三台机器上同时修改

1
2
[root@master ~]# scp /etc/hosts slave1:/etc/
[root@master ~]# scp /etc/hosts slave2:/etc/

在三个节点做免密登录,三个节点都执行如下操作:

或者使用MobaXTerm的Multiexec,在三台机器上同步执行

ssh-keygen可以不用-t rsa,默认即使用rsa

1
2
3
4
[root@master ~]# ssh-keygen -t rsa
[root@master ~]# ssh-copy-id master
[root@master ~]# ssh-copy-id slave1
[root@master ~]# ssh-copy-id slave2

关闭三个节点的防火墙:

可使用MobaXTerm的Multiexec,在三台机器上同步执行

关闭防火墙:

1
[root@master ~]# systemctl stop firewalld

禁止防火墙开机启动:

1
[root@master ~]# systemctl disable firewalld

hadoop集群部署

jdk的部署和安装

jdk自行从甲骨文官网下载tar.gz安装,或者使用apt安装,下文中使用自行下载的tar.gz安装

此处步骤可以使用MobaXTerm的Multiexec,在三台机器上同步执行

创建要解压的路径:

1
2
3
4
[root@master softwares]# mkdir /opt/module
[root@master softwares]# ls /opt/
module softwares
[root@master softwares]#

解压jdk:

1
[root@master softwares]# tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/

重命名jdk文件件

1
2
3
4
5
6
7
8
9
[root@master softwares]# ls /opt/module/
jdk1.8.0_212
[root@master softwares]# cd /opt/module/
[root@master module]# ls
jdk1.8.0_212
[root@master module]# mv jdk1.8.0_212/ jdk
[root@master module]# ls
jdk
[root@master module]#

修改环境变量配置:

1
[root@master module]# vi /etc/profile

修改内容:

1
2
3
# JAVA_HOME 
export JAVA_HOME=/opt/module/jdk
export PATH="$JAVA_HOME/bin:$PATH"

source使配置文件生效:

1
2
[root@master module]# source /etc/profile
[root@master module]#

执行java -version 查看Java版本,能看到版本说明配置生效:

1
2
3
4
5
[root@master module]# java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
[root@master module]#

在slave1和slave2节点创建module路径:

1
2
3
[root@slave1 ~]# mkdir /opt/module/
[root@slave1 ~]#
[root@slave2 ~]# mkdir /opt/module

拷贝jdk和jdk的环境变量到slave1和slave2节点:

如果上文中的操作已经使用MobaXTerm的Multiexec在三台机器上同步执行,无需拷贝

1
2
[root@master module]# scp -r /opt/module/jdk/ slave1:/opt/module/jdk
[root@master module]# scp -r /opt/module/jdk/ slave2:/opt/module/jdk

在slave1和slave2节点配置环境变量:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@slave1 jdk]# vi /etc/profile
[root@slave1 jdk]# source /etc/profile
[root@slave1 jdk]# java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
[root@slave1 jdk]#
[root@slave2 ~]# vi /etc/profile
[root@slave2 ~]# source /etc/profile
[root@slave2 ~]# java -version\
> ;
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
[root@slave2 ~]#

Hadoop集群配置

此处步骤可以使用MobaXTerm的Multiexec,在三台机器上同步执行

  1. 解压hadoop到/opt/module/路径下:

    1
    [root@master softwares]# tar -zxvf /opt/softwares/hadoop-3.1.3.tar.gz -C /opt/module/
  2. 修改文件名称,配置hadoop环境变量

    1
    2
    3
    4
    [root@master module]# mv hadoop-3.1.3/ hadoop
    [root@master module]# ls
    hadoop jdk
    [root@master module]# vi /etc/profile

    配置内容:

    1
    2
    3
    # HADOOP_HOME
    export HADOOP_HOME=/opt/module/hadoop
    export PATH="$HADOOP_HOME/bin:$PATH"

    source并查看hadoop版本:

    1
    2
    3
    4
    5
    6
    7
    8
    [root@master module]# 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/share/hadoop/common/hadoop-common-3.1.3.jar
    [root@master module]#
  3. 配置hadoop相关配置文件:

    核心配置文件

    配置core-site.xml

    1
    [root@master hadoop]# vi /opt/module/hadoop/etc/hadoop/core-site.xml 

    文件内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <configuration>
    <!--指定NameNode的地址 -->
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://master:9000</value>
    </property>


    <!-- 指定hadoop数据的存储目录--> #可以不配置
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/module/hadoop/data</value>
    </property>
    </configuration>

​ HDFS配置文件:

​ 配置hdfs-site.xml

1
[root@master hadoop]# vim /opt/module/hadoop/etc/hadoop/hdfs-site.xml 

文件内容:

1
2
3
4
5
6
7
8
9
10
11
12
<configuration>
<!--namenode web端访问地址 --> #可以不配置
<property>
<name>dfs.namenode.http-address</name>
<value>master:50070</value>
</property>
<!-- hdfs副本数量--> #可以不配置
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>

YARN配置文件:

配置yarn-site.xml,

1
[root@master hadoop]# vim /opt/module/hadoop/etc/hadoop/yarn-site.xml 

配置内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<configuration>


<!-- Site specific YARN configuration properties -->
<!-- 指定MR走shuffle-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager地址--> #可以不配置
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
</configuration>

MAPREDUCE配置文件:

配置mapred-site.xml

1
[root@master hadoop]# vim /opt/module/hadoop/etc/hadoop/mapred-site.xml 

配置内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<configuration>
<!--指定MapReduce程序运行环境 -->
<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>
</configuration>

配置workers

1
[root@master hadoop]# vim /opt/module/hadoop/etc/hadoop/workers

配置内容:

1
2
3
master
slave1
slave2

配置hadoop-env.sh

1
[root@master hadoop]# vi /opt/module/hadoop/etc/hadoop/hadoop-env.sh

配置内容:

1
export JAVA_HOME=/opt/module/jdk # 配置为Java位置

配置mapred-env.sh

1
[root@master hadoop]# vi /opt/module/hadoop/etc/hadoop/mapred-env.sh 

配置内容:

1
export JAVA_HOME=/opt/module/jdk # 配置为Java位置

配置yarn-env.sh

1
[root@master hadoop]# vi /opt/module/hadoop/etc/hadoop/yarn-env.sh 

配置内容:

1
export JAVA_HOME=/opt/module/jdk # 配置为Java位置

将hadoop拷贝到slave1和slave2节点:

如上文内容使用MobaXTerm的Multiexec,在三台机器上同步执行,则无需拷贝

1
2
[root@master hadoop]# scp -r /opt/module/hadoop/ slave1:/opt/module/hadoop/
[root@master hadoop]# scp -r /opt/module/hadoop/ slave2:/opt/module/hadoop/

格式化namenode(只需要在Master节点执行):

1
[root@master hadoop]# hdfs namenode -format

在/etc/profile下配置hadoop的HDFS用户和yarn的用户(Master必须,Slave无所谓):

1
[root@master hadoop]# vi /etc/profile

配置内容:

1
2
3
4
5
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

source /etc/profile使配置文件生效:

1
[root@master hadoop]# source /etc/profile

启动Hadoop集群:

1
2
3
[root@master hadoop]# pwd
/opt/module/hadoop
[root@master hadoop]# ./sbin/start-all.sh

jps(三台都要)查看hadoop进程是否启动,master节点应该存在DataNode、NameNode、SecondaryNameNode、ResourceManager、Jps、NodeManager,slave1,slave2应该至少存在DataNode、Jps、NodeManager


Hadoop平台完全分布式安装(1主2从)
https://more678.github.io/2025/01/13/Hadoop完全分布式安装/
作者
tenstrings
发布于
2025年1月13日
许可协议