Hadoop3.3.4完全分布式集群搭建【鸣潮版】


文章目录

  • 项目背景:
  • 一、Hadoop的起源:
  • 二、Hadoop系统搭建准备:
    • 【君·拂】软件的准备及对应版本
  • 三、Linux系统免密搭建步骤:
    • 1.创建三台虚拟机(新手建议装带GUI界面的)
    • 2.查看虚拟机的网络配置
    • 3.配置三台虚拟机的网络
    • 4.进行免密配置
  • 四、安装JAVA环境:
    • 1. 在三台虚拟机上创建文件夹:
    • 2. 将JDK安装包和Hadoop包传入虚拟机:
    • 3. 查看安装包
    • 4. 解压JDK包:
    • 5. 添加环境变量
    • 6. 使环境变量生效:
    • 7. 测试是否生效:
    • 8.分发Java环境及环境变量文件:
    • 9.使Slave1和Slave2环境变量生效:
  • 五、部署Hadoop分布式集群:
    • 1.解压hadoop安装包:
    • 2.修改Hadoop配置文件:
    • 3.配置Hadoop的bin和sbin的环境变量:
    • 4.分发Hadoop软件包和环境变量文件:
    • 5.启动Hadoop集群:
    • 6.在Windows上查看Hadoop集群:
  • 六、总结:
  • 七、后日谈:


项目背景:

你作为今州的令尹,近日收到上级要查今州近10年的税收情况的命令,要你汇报今州的税收财政情况,但税收种类繁多,需要整理的数据太多了,且各级人员调度协调又需要许多时间。可你的上级却只给你三天时间,这可把你愁的连跟漂泊者约会的时间都没了。
第二日,你在今州城中遇到了你的师傅长离和漂泊者,见两人又说有笑的,你顿时十分不爽,于是你向他们走去。走进一瞧,你发现你的师傅竟然在牵着漂泊者的手,你顿时内心警铃大作,你心想我为了税收的情况在忙前忙后的,师傅她居然偷自己的家,你顿时心里就醋意大发,然后就此事问了师傅有何高见,你的师傅向你推荐了一个人,还跟你说他能解你的燃眉之急。
你听说居然还有如此人才,便问此人名字是谁?【君·拂】你的师傅淡淡道。见你等等师傅如此胸有成足,而且眼下此事也确实着急,于是你心想赶紧找这个人【君·拂】来解决此事,然后好腾出时间来跟漂泊者约会,以免夜长梦多。


一、Hadoop的起源:

你回到府尹,连忙找到了【君·拂】,然后问他有没有解决之法,然后【君·拂】就开始了他的长篇大论,他说可以建立一个分布式的集群系统,这个集群系统建立后将拥有以下优势:
扩容能力(Scalable):这个集群在可用的计算机集群间分配数据并完成计算任务的,这些集群可用方便的扩展到数以千计的节点中。

成本低(Economical):这个集群通过普通廉价的机器组成服务器集群来分发以及处理数据,以至于成本很低。

高效率(Efficient):通过并发数据,这个集群可以在节点之间动态并行的移动数据,使得速度非常快。

可靠性(Rellable)/高容错性:这个集群能自动维护数据的多份复制,并且在任务失败后能自动地重新部署(redeploy)计算任务。

这样就可以在短时间内,对海量的数据进行整理和统计出想要的结构。虽然你啥也听不懂,但你觉得他说得十分厉害,于是就着手安排他全权去做此事,并给了许多支持给他。
他又说如果这个系统真的做出来了,日后必定声名远扬,而你就是提出建造这个系统的主人,日后你的名声必然也会响彻环宇,因此他想让你给这个系统起个名字。你思来想去觉得他说得十分有理,但却又一时间想不出给这个系统应该起什么名字,这时你看到桌子上的一个一个大象,一个名字突然在你的脑海中诞生了——Hadoop!

二、Hadoop系统搭建准备:

【君·拂】软件的准备及对应版本

  1. VMware版本 【VMware® Workstation 17 Pro】(必需)VMware下载及安装的教程
  2. xshell 【xshell7】(不是必需) xshell官网下载
  3. xftp 【xftp7】(不是必需)xftp官网下载
  4. Linux系统的搭建【使用的镜像源为Centos7】(必需)阿里云Centos7镜像源
  5. Java环境搭建包【 jdk-8u212-linux-x64.tar.gz】(必需)Java对应的Linux包–官网下载
  6. Hadoop完全分布式集群搭建所需包 【hadoop-3.3.4.tar.gz】(必需)Hadoop国内镜像源下载地址 Hadoop百度网盘下载地址

【君·拂】PS:hadoop-3.3.4.tar.gz对应的java版本是java8和java11,但java11要在运行时才支持Hadoop,故此【君·拂】采用java8。

三、Linux系统免密搭建步骤:

1.创建三台虚拟机(新手建议装带GUI界面的)

第一台命名为Master:

Master
克隆当前虚拟机,然后重名为Slave1:

Slave1
重复上一步,然后重命名为Slave2:

Slave2

2.查看虚拟机的网络配置

编辑虚拟机选设置

在这里插入图片描述
将网络适配器设置为NAT模式:

在这里插入图片描述
选择导航栏中的编辑,然后选择虚拟网络编辑器:

在这里插入图片描述
在网络编辑器中选择NAt模式,并且查看NAT设置:

在这里插入图片描述
如果你有一定的网络基础,可以自己设置子网以及网关

在这里插入图片描述

3.配置三台虚拟机的网络

1. 启动三台虚拟机
2. 查看当前虚拟机的ip地址,命令:ip a

在这里插入图片描述
3. 让你的虚拟机IP跟子网保持在同网段:

在这里插入图片描述
我的虚拟网络编辑器的子网是192.168.199.0,因此我要给我的虚拟机设置IP地址,且IP地址要跟子网保持在同一网段。(如上上图中)我虚拟机的IP地址就是192.168.199.128,只要前三位数字(即192.168.199)跟子网的网段保持一致,最后的一位可任意取值,但不能有重复。(范围是1~255,但2不能取,因为网关占用了)

4.修改三台虚拟机的IP地址
如果是GUI图像界面,(如图操作)然后 选择有线设置 选项:

在这里插入图片描述
接着如图操作:

在这里插入图片描述

如果你更改了你的NAT网关,请以你的NAT网关为准,否则,一般设置虚拟机的网关都是子网的前三位最后一位为2作为虚拟机网关地址:

在这里插入图片描述
4.按下win+r键,在终端处输入ncpa.cpl

在这里插入图片描述
5.打开VMnet8,然后打开属性,找到ipv4:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6.查看你电脑的IP地址:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
7.按上述步骤配置完后,打开虚拟机的终端,输入命令ping www.baidu.com,若出现下图情况,则代表能正常连接到外网。

在这里插入图片描述
出现下图所示,则代表能ping通外网:

在这里插入图片描述
8.然后将另外两台虚拟机Slave1和Slave2也按上述步骤进行配置,使其也能ping通外网!(必需)

【君·拂】PS:若你的虚拟机是最小化安装,没有GUI界面,要修改IP地址和网关地址的话请在虚拟机终端输入该命令:vi /etc/sysconfig/network-scripts/ifcfg-ens33 然后按图中所示,并结合上文进行配置。
在这里插入图片描述

4.进行免密配置

【君·拂】PS:以下操作都在root用户下进行的,且防火墙是关闭的模式下。
请在Master、Slave1、Slave2上都输入以下命令:

#停止firewalld服务并禁用开机启动
systemctl stop firewalld
systemctl disable firewalld

将三台虚拟机都重启:reboot
重启后,查看当前防火墙状态:firewall-cmd --state
在这里插入图片描述

1. 修改虚拟机的主机名
在Master上输入命令:hostnamectl set-hostname Master (Master为主节点)
然后输入重启命令:reboot
在Slave1上输入命令:hostnamectl set-hostname Slave1 (Slave1为次节点)
然后输入重启命令:reboot
在Slave2上输入命令:hostnamectl set-hostname Slave2 (Slave2为次节点)
然后输入重启命令:reboot

2. 修改配置/ect/hosts 文件
输入命令:vim /etc/hosts
按图所示进行配置在这里插入图片描述
3.配置完后,通过Ping主机名测试网络的连通性,依次执行以下命令:
在Master上:ping Master
在这里插入图片描述

在Slave上:ping Slave1
在这里插入图片描述

在Slave2上:ping Slave2
在这里插入图片描述
4. 使用ssh-keygen命令生成ssh公钥认证所需的公钥和私钥文件:
Master、Slave1、Slave2均需生成公钥和私钥文件。默认生成到家目录下的.ssh/目录下,使用rsa就会生成私钥id_rsa和公钥id_rsa.pub两个文件。

在Master输入命令:ssh-keygen (PS:Slave1和Slave2也需要执行该命令!)
在这里插入图片描述
5. 分发Master公钥到Master、Slave1、Slave2上:
在Master上输入该命令:ssh-copy-id Master ssh-copy-id Slave1 ssh-copy-id Slave2 (PS:以上三条命令也要在Slave1、Slave2上执行!)
在这里插入图片描述
6.测试三台虚拟机之间是否能使用ssh进行免密登入:
在Master上输入:ssh Slave1
在这里插入图片描述

在Slave1上输入:ssh Slave2
在这里插入图片描述

在Slave1上输入:exit退出Slave2登入
然后再在Slave1上输入:ssh Master
在这里插入图片描述

在Slave2上输入:ssh Master
在这里插入图片描述
在Slave2上输入:exit退出Master登入
然后再在Slave2上输入:ssh Slave1
在这里插入图片描述
至此,三台虚拟机之间的免密配置登入完成!

四、安装JAVA环境:

1. 在三台虚拟机上创建文件夹:

在Master、Slave1、Slave2上分别输入:mkdir -p /opt/servers mkdir -p /opt/softwears

2. 将JDK安装包和Hadoop包传入虚拟机:

打开xftp,从xftp上传输到Master的/opt/softwears路径下,操作如图所示:
(【君·拂】PS:你也可以传入到你自己指定的目录下)
在这里插入图片描述

3. 查看安装包

在Master上输入命令:cd /opt/softwares/ll
在这里插入图片描述
再输入命令:du -sh jdk-8u212-linux-x64.tar.gz 查看上传的安装包大小与原安装包大小是否一致,避免安装包在上传中有损坏。(最好也查看一下Hadoop的包大小是否一致)
在这里插入图片描述

4. 解压JDK包:

在Master上输入命令:tar -zxvf jdk-8u141-linux-x64.tar.gz -C ../servers/
解压完后,再输入命令:cd ../serversll 查看一下
在这里插入图片描述

5. 添加环境变量

将Java执行路径加入到环境变量。编辑/etc/profile文件,在文件最后添加Java的路径。
在Master上输入命令:vim /etc/profile
输入以下内容后,按ESC键,再输入“:wq”保存退出:

export JAVA_HOME=/opt/servers/jdk1.8.0_212
export PATH=:$JAVA_HOME/bin:$PATH

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

6. 使环境变量生效:

在Master上输入命令:source /etc/profile

7. 测试是否生效:

在Master上输入命令:java -version (如图显示则为安装成功)
在这里插入图片描述

8.分发Java环境及环境变量文件:

分发Java环境文件:
1.在Master上输入命令:cd /opt/servers 然后再分别输入scp -r jdk1.8.0_212/ -C root@Slave1:/opt/serversscp -r jdk1.8.0_212 -C root@Slave2:/opt/servers

分发环境变量文件:
2.在Master上分别输入命令:scp -r /etc/profile root@Slave1:/etc/profilescp -r /etc/profile root@Slave2:/etc/profile

9.使Slave1和Slave2环境变量生效:

在Slave1上分别输入命令:source /etc/profilejava -version
在这里插入图片描述
在Slave2上分别输入命令:source /etc/profilejava -version
在这里插入图片描述
至此,Master、Slave1和Slave2的Java环境安装完毕!

五、部署Hadoop分布式集群:

1.解压hadoop安装包:

  1. 在Master上输入命令:cd /opt/softwarestar -zxvf hadoop-3.3.4.tar.gz -C ../servers/
    解压完后到servers目录下查看:
    在这里插入图片描述
  2. 查看一下Hadoop文件大小:
    在Master上输入命令:du -sh hadoop-3.3.4/ (若包解压后大小不是1.4G,则包出现了损坏)
    在这里插入图片描述
  3. 进入hadoop-3.3.4目录里,查看hadoop目录结构:
    在Master上输入命令:cd hadoop-3.3.4/ll
    在这里插入图片描述
    目录 说明:
    bin --> 放置Hadoop的功能操作命令
    etc --> 放置Hadoop的配置文件
    lib --> 放置本地库文件
    sbin --> 放置Hadoop集群进程管理的操作命令
    share --> 放置开发所需要的jar包及用户帮助文档

2.修改Hadoop配置文件:

前提:Hadoop配置文件放置在hadoop-3.3.4/etc/hadoop目录下,共有6个配置文件需要修改:hadoop-env.sh、core-site.xml 、hdfs-site.xml、mapred-site.xml、yarn-site.xml和workers。

1. 切换到hadoop-3.3.4/etc/hadoop目录,查看相关配置文件:
在Master上输入命令:cd hadoop-3.3.4/etc/hadoop/ll
在这里插入图片描述
2. 修改hadoop-env.sh文件:
在Master上输入命令:vim hadoop-env.sh
然后输入以下代码:

export JAVA_HOME=/opt/servers/jdk1.8.0_212
export PATH=:$JAVA_HOME/bin:$PATH

编辑完成后,按ESC,输入“:wq”保存退出。
在这里插入图片描述

3. 修改core-site.xml文件:
在Master上输入命令:vim core-site.xml
然后输入以下代码:

<configuration>
<!-- 指定 HDFS默认使用的文件系统,指定HDFS中NameNode的入口 -->
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://Master:9000</value>
        </property>
        <!-- 指定 hadoop 运行时产生文件的存储目录 -->
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/opt/servers/hadoop-3.3.4/data/</value>
        </property>
        <!--设置文件删除后,回收站彻底删除的时间,默认时间单位为:分钟-->
        <property>
                <name>fs.trash.interval</name>
                <value>0</value>
        </property>
</configuration>

如图:
在这里插入图片描述
编辑完成后,按ESC,输入“:wq”保存退出。

4. 修改hdfs-site.xml文件:
在Master上输入命令:vim hdfs-site.xml
然后输入以下代码:

<configuration>
<!-- 设置Namenode的http访问地址 -->
        <property>
                <name>dfs.namenode.http-address</name>
                <value>Master:50070</value>
        </property>
        <!-- 设置secondarynamenode的http访问地址 -->
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>Slave1:50090</value>
        </property>
        <!-- 设置hdfs副本数量 -->
        <property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>
        <!--关闭权限校验,默认为true-->
        <property>
                <name>dfs.permissions</name>
                <value>false</value>
        </property>
</configuration>

如图:在这里插入图片描述
编辑完成后,按ESC,输入“:wq”保存退出。

5. 修改mapred-site.xml文件:
在Master上输入命令:vim mapred-site.xml
然后输入以下代码:

<configuration>
<!--设置MapReduce运行在yarn上,默认为local,可选参数classic -->
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <!--是否开启Uber运行模式-->
        <property>
                <name>mapreduce.job.ubertask.enable</name>
                <value>true</value>
        </property>

         <!-- 设置历史服务器地址 -->
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>Master:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>Master:19888</value>
        </property>
        <!--设置Hadoop包路径【如果出现找不到或无法加载主类org.apache.hadoop.mapreduce.......】-->
        <property>
         <name>mapreduce.application.classpath</name>
         <value>/opt/servers/hadoop-3.3.4/etc/hadoop:/opt/servers/hadoop-3.3.4/share/hadoop/common/lib/*:/opt/servers/hadoop-3.3.4/share/hadoop/common/*:/opt/servers/hadoop-3.3.4/share/hadoop/hdfs:/opt/servers/hadoop-3.3.4/share/hadoop/hdfs/lib/*:/opt/servers/hadoop-3.3.4/share/hadoop/hdfs/*:/opt/servers/hadoop-3.3.4/share/hadoop/mapreduce/*:/opt/servers/hadoop-3.3.4/share/hadoop/yarn:/opt/servers/hadoop-3.3.4/share/hadoop/yarn/lib/*:/opt/servers/hadoop-3.3.4/share/hadoop/yarn/*</value>
</property>
</configuration>

【君·拂】PS:<property> <name>mapreduce.application.classpath</name> <value>/opt/servers/hadoop-3.3.4/etc/hadoop:/opt/servers/hadoop-3.3.4/share/hadoop/common/lib/*:/opt/servers/hadoop-3.3.4/share/hadoop/common/*:/opt/servers/hadoop-3.3.4/share/hadoop/hdfs:/opt/servers/hadoop-3.3.4/share/hadoop/hdfs/lib/*:/opt/servers/hadoop-3.3.4/share/hadoop/hdfs/*:/opt/servers/hadoop-3.3.4/share/hadoop/mapreduce/*:/opt/servers/hadoop-3.3.4/share/hadoop/yarn:/opt/servers/hadoop-3.3.4/share/hadoop/yarn/lib/*:/opt/servers/hadoop-3.3.4/share/hadoop/yarn/*</value> </property>
这段代码是出现了【如果出现找不到或无法加载主类org.apache.hadoop.mapreduce…】这个错误时才加上去的。如果没有出现这个错误可以不用。具体路径是请执行该代码:hadoop classpath
在这里插入图片描述
然后将那一长串的代码复制到<value> ......</value>中。

如图:
在这里插入图片描述
编辑完成后,按ESC,输入“:wq”保存退出。

6. 修改yarn-site.xml文件:
在Master上输入命令:vim yarn-site.xml
然后输入以下代码:

<configuration>

<!-- Site specific YARN configuration properties -->
        <!--设置resourcemanager的主机名-->
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>Master</value>
        </property>

        <!--设置客户端的主机名及端口号-->
        <property>
                <name>yarn.resourcemanager.address</name>
                <value>Master:8032</value>
        </property>

        <!--分配给容器的物理内存量,单位MB,设置为-1则自动分配,默认是你虚拟机设置的内存:MB。>我的主节点物理内存是6G,则分配3/4的样子,这样的性能比较合理-->
        <property>
                <name>yarn.nodemanager.resource.memory-mb</name>
                <value>4608</value>
        </property>
       <!-- 设置nodemanager的辅助服务 -->
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>

如图:
在这里插入图片描述
编辑完成后,按ESC,输入“:wq”保存退出。

  1. 修改workers文件:
    在Master上输入命令:vim workers
    然后输入以下代码:Master Slave1 Slave2
    在这里插入图片描述
    编辑完成后,按ESC,输入“:wq”保存退出。

3.配置Hadoop的bin和sbin的环境变量:

1.配置环境变量:
在Master上输入命令:vim /etc/profile
然后输入以下代码:

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

export HADOOP_HOME=/opt/servers/hadoop-3.3.4
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

2.使环境变量生效:
在Master上输入命令:source /etc/profile

4.分发Hadoop软件包和环境变量文件:

1.将配置好的Hadoop软件包分发到Slave1和Slave2。
在Master上分别输入命令:

cd /opt/servers/
scp -r /opt/servers/hadoop-3.3.4/ -C root@Slave1:/opt/servers/
scp -r /opt/servers/hadoop-3.3.4/ -C root@Slave2:/opt/servers/

2.分发/etc/profile文件.
在Master上分别输入命令:

scp -r /etc/profile root@Slave1:/etc/profile
scp -r /etc/profile root@Slave2:/etc/profile

3.在Slave1和Slave2上使环境变量生效。
在Slave1上输入命令:source /etc/profile
在Slave2上输入命令:source /etc/profile

5.启动Hadoop集群:

  1. 初始化Hadoop集群:
    在Master上输入命令:hdfs namenode -format
    在这里插入图片描述

  2. 启动Hadoop集群:
    在Master上输入命令:start-all.sh
    在这里插入图片描述

  3. 查看进程:
    在Master上输入命令:jps
    (进程共5个,若有少了,请查看Hadoop的那6个文件配置是否有误。)
    在这里插入图片描述
    在Slave1上输入命令:jps
    (进程共4个,若有少了,请查看Hadoop的那6个文件配置是否有误。)
    在这里插入图片描述
    在Slave2上输入命令:jps
    (进程共3个,若有少了,请查看Hadoop的那6个文件配置是否有误。)
    在这里插入图片描述
    至此,Hadoop集群部署已完成。

6.在Windows上查看Hadoop集群:

1.打开你的浏览器,输入网址:http://Master:50070
在这里插入图片描述
2.若出现下图,则代表Hadoop集群部署成功:
在这里插入图片描述

六、总结:

Hadoop集群的构建大致可以分为三大步:
1.ssh的免密配置是为了简化操作流程、提高安全性和效率。

2.JDK的部署是因为Hadoop是基于Java语言开发的,其运行环境依赖于Java虚拟机(JVM)。

3.配置Hadoop的六个核心文件是因为:

  • 3.1 hadoop-env.sh:这个脚本文件用于设置Hadoop的环境变量,这些环境变量对于Hadoop的正常运行至关重要。
  • 3.2 core-site.xml:这个配置文件包含了Hadoop的核心配置信息,如HDFS和YARN的元数据存储位置、日志存储位置等。这些配置对于Hadoop集群的整体运行至关重要。
  • 3.3 hdfs-site.xml:这个配置文件包含了HDFS(Hadoop分布式文件系统)的配置信息,如副本数量、NameNode和DataNode的地址等。这些配置对于HDFS的正常运行至关重要。
  • 3.4mapred-site.xml:这个配置文件包含了MapReduce的配置信息,如作业历史服务器的地址、任务执行器的类型等。虽然在Hadoop2.x及以后的版本中,MapReduce已经被YARN取代,但在某些情况下,仍然需要配置mapred-site.xml。
  • 3.5 yarn-site.xml:这个配置文件包含了YARN(Yet Another ResourceNegotiator)的配置信息,如ResourceManager的地址、ApplicationMaster的配置等。这些配置对于YARN的正常运行至关重要。
  • 3.6 workers文件:这个文件包含了集群中所有工作节点(Worker Node)的主机名或IP地址列表。Hadoop集群需要知道哪些节点是工作节点,以便将任务分配给它们执行。

七、后日谈:

你使用着【君·拂】构建好的Hadoop集群系统,那税收财政数据统计不肖片刻就已经完成了,你终于可以好好的去跟漂泊者约会了,你想到此处心里就美滋滋的,却不知你的师傅早已背着你偷吃完了。【今次的败犬-今汐酱】
在这里插入图片描述

Logo

更多推荐