Hadoop完全分布式集群搭建

Hadoop3.x完全分布式集群搭建

Hadoop 3.x是基于JDK1.8开发的,较其他两个版本而言,在功能和优化方面发生了很大的变化,其中包括HDFS 可擦除编码、多Namenode支持、MR Native Task优化等,所以在学习Hadoop的教程以及多次尝试后,总结了快速搭建Hadoop3.x的完全分布式集群的过程,特此写了这篇博客和大家一起分享,不足之处,请大家多多指教!



一、环境依赖

1.VmWare虚拟机

2.hadoop安装包

本次实验使用的是hadoop版本是hadoop-3.3.0.tar.gz
下载地址:https://hadoop.apache.org/release/3.3.0.html

3.jdk安装包

hadoop3只支持java8以上版本,本次实验使用的jdk版本是 jdk-8u271-linux-x64.tar.gz
下载地址:https://www.oracle.com/cn/java/technologies/javase/javase8u211-later-archive-downloads.html


二、环境准备

1.VmWare创建Linux虚拟机

VmWare安装Linux

2.修改静态IP地址

测试是否连接网络

ping www.baidu.com

如果ping不通,修改以下文件

vi /etc/sysconfig/network-scripts/ifcfg-ens33

修改内容

ONBOOT=yes

继续修改网络配置文件,设置静态IP

BOOTPROTO=static
IPADDR=192.168.19.135
NETMASK=255.255.255.0
GATEWAY=192.168.19.2
DNS1=192.168.19.2  

配置项内容应保证和你的虚拟机的网络是同一个局域网,查看方式

打开VMware→编辑→虚拟机网络编辑器
点击VMnet8的NAT模式–>点击NAT设置,查看网关地址
在这里插入图片描述
修改完成后重新启动网络即可

systemctl restart network

3.下载搭建中所需要的工具

下载vim或nano工具

yum -install vim -y
yum -install nano -y

下载远程同步工具rsync(rsync 是一个常用的 Linux 应用程序,用于文件同步,实现增量覆盖。rsync 的最大特点是会检查发送方和接收方已有的文件,仅传输有变动的部分,默认规则是文件大小或修改时间有变动)

yum install rsync -y

4.克隆虚拟机

克隆两台hadoop02虚拟机,并分别命名为Hadoop03和Hadoop04(虚拟机名称可以是其他的,配置集群时真正起作用的是主机名),克隆具体步骤如下图:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

修改虚拟机的主机名和IP地址

分别设置三台虚拟机的主机名: hadoop02为node2,hadoop03为node3, hadoop04为node4(为什么我的虚拟机名称和主机名名称都是从2开始,因为我的hadoop01用来搭建了伪分布集群)

[root@localhost ~]# hostnamectl set-hostname node2

同样的方法修改hadoop03的主机名为node3
hadoop04的主机名为node4

分别设置三台虚拟机的IP地址(请根据你的实际情况修改)

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

node2 ip设置为 192.168.19.135
node3 ip设置为 192.168.19.136
node4 ip设置为 192.168.19.137

重启网络

[root@localhost ~]# systemctl restart network

修改ip与主机名的映射

[root@localhost ~]# nano /etc/hosts

添加如下内容

192.168.19.135 node2
192.168.19.136 node3
192.168.19.137 node4

node3和node4同样的步骤

[root@localhost ~]# reboot

重启虚拟机

三、配置免密登录

先关闭所有节点防火墙

查看当前节点的防火墙状态

[root@node2 ~]# systemctl status firewalld

若防火墙处于active状态,则关闭该节点的防火墙

[root@node2 ~]# systemctl stop firewalld

同样的方法再次在node3和node4上面操作

配置三台虚拟机之间免密登录

在node2使用如下命令生成私钥文件

[root@node2 ~]# ssh-keygen -t rsa

执行命令后后,连续敲三次回车键

拷贝公钥

[root@node2 ~]# ssh-copy-id node2

执行ssh-copy-id命令后,根据提示输入yes,再输入主机登录密码

继续执行

[root@node2 ~]# ssh-copy-id node3
[root@node2 ~]# ssh-copy-id node4

验证是否配对成功

[root@node2 ~]# ssh node3
Last login: Sun May  1 21:49:15 2022 from node2
[root@node3 ~]# exit
logout
Connection to node3 closed.
[root@node2 ~]# ssh node4
Last login: Sun May  1 21:50:21 2022
[root@node4 ~]# exit
logout
Connection to node4 closed.

相同的步骤在node3、node4主机上操作

四、集群搭建步骤

安装jdk和hadoop

在root用户下的当前目录下创建soft文件夹和installfile文件夹

[root@node2 ~]# mkdir soft
[root@node2 ~]# mkdir installfile

将安装所需要的tar包导入到installfile文件夹中
可以使用sftp文件传输工具将下载好的文件传输到installfile文件夹中

分别解压hadoop-3.3.0.tar.gz和jdk-8u271-linux-x64.tar.gz到soft文件夹中

[root@node2 ~]# tar -zxvf installfile/hadoop-3.3.0.tar.gz -C soft
[root@node2 ~]# tar -zxvf installfile/jdk-8u271-linux-x64.tar.gz  -C soft

创建软连接,方便后面设置环境变量和配置文件

[root@node2 soft]# ln -s hadoop-3.3.0 hadoop
[root@node2 soft]# ln -s jdk1.8.0_271 jdk

配置环境变量

[root@node2 ~]# nano /etc/profile.d/my_env.sh

这里的my_env.sh是新建的脚本文件

添加如下内容

#JAVA_HOME
export JAVA_HOME=/root/soft/jdk
export PATH=$PATH:$JAVA_HOME/bin

#HADOOP_HOME
export HADOOP_HOME=/root/soft/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

使用source命令刷新全局变量,让新增的shell脚本生效

[root@node2 ~]# source /etc/profile

查看jdk和hadoop是否安装成功

[root@node2 ~]# java -version
java version "1.8.0_271"
Java(TM) SE Runtime Environment (build 1.8.0_271-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)
[root@node2 ~]# hadoop version
Hadoop 3.3.0
Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r aa96f1871bfd858f9bac59cf2a81ec470da649af
Compiled by brahma on 2020-07-06T18:44Z
Compiled with protoc 3.7.1
From source with checksum 5dc29b802d6ccd77b262ef9d04d19c4
This command was run using /root/soft/hadoop-3.3.0/share/hadoop/common/hadoop-common-3.3.0.jar

进入hadoop配置文件

进入hadoop配置目录

[root@node2 ~]# cd $HADOOP_HOME/etc/hadoop

配置core-site.xml文件

[root@node2 hadoop]# nano mapred-site.xml 

在<configuration> </configuraion>里面添加如下内容

<configuration>

    <!-- 指定MapReduce程序运行在Yarn上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

    <!-- 历史服务器端地址 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>node2:10020</value>
    </property>

    <!-- 历史服务器web端地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>node2:19888</value>
    </property>
    
</configuration>

配置日志采集,修改yarn-site.xml

[root@node2 hadoop]# nano yarn-site.xml 

在<configuraion> </configuraion>中添加如下内容

<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>node3</value>
    </property>

    <!-- 环境变量的继承 -->
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>

    <!-- yarn容器允许分配的最大最小内存 -->
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>512</value>
    </property>
    <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>2048</value>
    </property>
    
    <!-- 关闭yarn对物理内存和虚拟内存的限制检查 -->
    <property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>

</configuration>

配置mapred-site.xml

[root@node2 hadoop]# nano mapred-site.xml 

在<configuraion> </configuraion>中添加如下内容

<configuration>

    <!-- 指定MapReduce程序运行在Yarn上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

    <!-- 历史服务器端地址 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>node2:10020</value>
    </property>

    <!-- 历史服务器web端地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>node2:19888</value>
    </property>

</configuration>

完成上述配置后,进入Hadoop的安装目录找到sbin文件夹

[root@node2 ~]# cd /root/soft/hadoop/sbin

修改start-dfs.sh和stop-dfs.sh文件,添加下列参数:

#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

修改start-yarn.sh和stop-yarn.sh文件,添加下列参数:

#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

最后修改workers,将原有内容替换为如下内容

[root@node2 hadoop]# nano workers 

注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行

node2
node3
node4

配置从机node3和node4

编写脚本分发文件(后面使用rsync可以将node2节点的文件传到node3和node4上,实现增量覆盖)
在主目录创建bin目录

[root@node2 ~]# mkdir ~/bin

创建分发脚本文件xsync

[root@node2 ~]# nano ~/bin/xsync

添加如下内容

#!/bin/bash

#1. 判断参数个数
if [ $# -lt 1 ]
then
    echo Not Enough Arguement!
    exit;
fi

#2. 遍历集群所有机器
for host in node2 node3 node4
do
    echo ====================  $host  ====================

    #3. 遍历所有目录,挨个发送
    for file in $@
    do
        #4. 判断文件是否存在
        if [ -e $file ]
            then
                #5. 获取父目录
                pdir=$(cd -P $(dirname $file); pwd)

                #6. 获取当前文件的名称
                fname=$(basename $file)
                ssh $host "mkdir -p $pdir"
                rsync -av $pdir/$fname $host:$pdir
            else
                echo $file does not exists!
        fi
    done
done

修改权限

[root@node2 ~]# chmod +x ~/bin/xsync

把xsync命令发送到node3、node4,一定要先确保在复制虚拟机之前就安装好了xsync

[root@node2 ~]# xsync /home/hadoop/bin

将脚本复制到/bin目录,方便调用(分别在node2、ndoe3和node4上执行)
并刷新一下环境变量

[root@node2 ~]# cp ~/bin/xsync /bin/
[root@node2 ~]# source /etc/profile
[root@node3 ~]# cp ~/bin/xsync /bin/
[root@node4 ~]# source /etc/profile
[root@node4 ~]# cp ~/bin/xsync /bin/
[root@node4 ~]# source /etc/profile

将node2的soft的jdk和hadoop安装文件分发到node3和node4上

[root@node2 ~]# rsync ~/soft

查看node3和node4是否存在文件

[root@node3 ~]# ls soft/
hadoop        hadoop-3.3.0
jdk           jdk1.8.0_271
[root@node4 ~]# ls soft/
hadoop        hadoop-3.3.0
jdk           jdk1.8.0_271

在node3上添加java和hadoop的环境变量

[root@node3 ~]# nano /etc/profile.d/my_env.sh

添加如下内容

#JAVA_HOME
export JAVA_HOME=/root/soft/jdk
export PATH=$PATH:$JAVA_HOME/bin

#HADOOP_HOME
export HADOOP_HOME=/root/soft/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

使用source命令刷新全局变量,让新增的shell脚本生效

[root@node3 ~]# source /etc/profile

查看jdk和hadoop是否安装成功

[root@node3 ~]# java -version
[root@node3 ~]# hadoop version

输出版本号即配置成功

同样的方法配置node4

启动集群

格式化文件系统
在node2机器执行格式化hdfs

[root@node2 ~]# hdfs namenode -format

看到successfully formatted为格式化成功
在这里插入图片描述
注意:格式化成功后,以后就不能再次格式化了

启动dfs,在node2机器上执行启动hdfs命令

[root@node2 ~]# start-dfs.sh
[root@node2 ~]# start-dfs.sh
WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER. Using value of HADOOP_SECURE_DN_USER.
Starting namenodes on [node2]
Last login: Sun May  1 20:19:21 CST 2022 from 192.168.19.1 on pts/0
Starting datanodes
Last login: Mon May  2 09:45:44 CST 2022 on pts/0
Starting secondary namenodes [node4]
Last login: Mon May  2 09:45:47 CST 2022 on pts/0

启动yarn,在node3机器上执行启动yarn命令

[root@node3 ~]# start-yarn.sh
[root@node3 ~]# start-yarn.sh
Starting resourcemanager
Last login: Mon May  2 10:33:20 CST 2022 from 192.168.19.1 on pts/0
Starting nodemanagers
Last login: Mon May  2 10:33:29 CST 2022 on pts/0

使用jps查看各节点的进程,验证是否搭建成功

[root@node2 ~]# jps
2759 DataNode
2617 NameNode
3098 NodeManager
3213 Jps
[root@node3 ~]# jps
2256 Jps
1909 NodeManager
1560 DataNode
1771 ResourceManager
[root@node4 ~]# jps
1809 Jps
1557 SecondaryNameNode
1483 DataNode
1693 NodeManager

浏览器验证,使用IP地址和端口号进行访问

浏览器访问node2:输入192.168.19.135:9870或http://192.168.19.135:9870
在这里插入图片描述
浏览器访问node3:输入192.168.19.136:8088或http://192.168.19.136:8088
在这里插入图片描述

参考:尚硅谷hadoop教程资料,csdn博主:Hadoop_Liang

completed! 不足之处 请多指教


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值