一、前期准备工作

VMware和Centos7下载安装教程:

https://blog.csdn.net/m0_59209350/article/details/117793482

XShell和Xftp下载安装教程:

https://blog.csdn.net/m0_59209350/article/details/117877235

二、虚拟机配置

安装一台虚拟机作为模板:

IP地址:192.168.10.100

主机名:hadoop100

内存:4G

硬盘:50G

2.1 切换root(管理员)用户

2.2 网络配置

    对安装好的VMware进行网络配置,方便虚拟机联网,本次设置选择NAT模式,需要宿主机的Windows和虚拟机的Linux能够进行网络连接,同时虚拟机的Linux可以通过宿主机的Windows进入互联网。

Windows的网络配置

打开网络和Internet设置 -->  点击更改适配器选项  -->  找到VMware Network Adapter VMnet8右键属性

修改虚拟机IP地址为静态IP,方便节点服务器间的相互通信

(1)命令行输入

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

(2)进入后点击“i或a”进入编辑模式左下角显示插入即证明进入编辑模式

(3)修改以下内容


(4)修改完毕后点击ESC退出编辑模式,左下角的插入消失即证明退出编辑模式,输入 “:wq”保存退出

(5)在命令行输入“systemctl restart network”  来重启网络,重启后可用“ifconfig”来查看当前IP

注意: 要保证Linux系统ifcfg-ens33文件中IP地址、虚拟网络编辑器地址和Windows系统VM8网络IP地址相同

2.3 修改主机名和Hosts文件

(1)修改主机名

在命令行输入“vim /etc/hostname”,按“i或a”进入编辑模式,修改主机名

(2)修改Hosts文件

在命令行输入“vim /etc/hosts”,按“i或a”进入编辑模式,添加如下内容

192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104

注意: 后面的hadoop10x是你自己设置的主机名, 这里搭建集群需要三个,一个作为备用

设置完成后重启

(3)修改Windows主机的Hosts文件

进入C:\Windows\System32\drivers\etc路径;

Windows7可以直接打开Hosts文件添加跟上面Centos一样的内容;

Windows10要把Hosts拷贝到桌面一份进行修改后替换原文件

2.4 虚拟机环境准备

2.4.1 安装软件包

使用yum安装虚拟机需要网络,因此yum安装之前可以先测试下虚拟机的联网情况,可以选择:ping www.baidu.com

确认好网络后命令行输入

yum install -y epel-release

等待安装完成,Extra Packages for Enterprise Linux是为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux。相当于是一个软件仓库。

注意:若是选择了最小化安装GHOME安装不需要此操作),还需要安装以下工具

(1)net-tool:包含ifconfig等查看网络地址的命令

yum install -y net-tools

(2)vim:编辑器

yum install -y vim

(3)其他工具

yum install -y  psmisc  nc  rsync  lrzsz  ntp libzstd openssl-static tree iotop git

2.4.2 赋予创建的普通用户暂时拥有root权限

进入后可以先输入“:set nu”显示行号,“:99”直接移动到第99行,然后点击“i或a”进入编辑模式,在“%wheel    ALL=(ALL)       ALL”下面添加一行

vim /etc/sudoers

#添加的内容
master    ALL=(ALL)       NOPASSWD:ALL

修改完成后按ESC退出编辑模式,输入“:wq!”强制保存退出 

注意: “master”是你创建的普通用户的用户名

 2.4.3 关闭防火墙和开机自启

sudo systemctl stop firewalld
sudo systemctl disable firewalld.service

2.4.4 在/opt目录下创建文件夹,并修改所属主、所属组

(1)创建文件夹

mkdir -p /opt/moudle /opt/software

(2)修改所属主、所属组

chown master:master /opt/moudle
chown master:master /opt/software

2.4.5 卸载虚拟机自带的JDK

rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps

注意:以上修改完成后需重启虚拟机才能生效:命令行输入“reboot”指令或者图形化界面点击

2.5 克隆虚拟机

利用创建的模板机来克隆三台虚拟机:hadoop102 hadoop103 hadoop104

注意:克隆时,要先关闭被克隆的虚拟机

 

克隆完成后,分别启动,然后对应Hosts文件修改主机名和IP地址

修改主机名:

vim /etc/hostname

    为了方便区分,我们直接分命名为:hadoop102 hadoop103 hadoop104

修改IP地址:

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

    hadoo102: 192.168.10.102

    hadoo103: 192.168.10.103

    hadoo104: 192.168.10.104

注意:不要同时启动三台刚克隆好的虚拟机,因为此时网络IP主机名都相同,修改完成后重启

2.6 jdk和hdaoop的安装

注意:从此刻开始尽量不要再使用root用户来操作了;另外,在安装jdk前,确保已经删除了虚拟机自带的jdk

使用Xftp传输工具将在Windows系统下载的安装包导入到hadoop102的 /opt/software目录下

使用命令查看确认后,解压jdk和hadoop的安装包到 /opt/module文件夹下,由于此安装包是免安装的,所以直接解压到指定文件夹内

(1)安装jdk

tar -zxvf /opt/softeware/jdk-8u212-linux-x64.tar.gz -C /opt/module/

(2)安装hadoop

tar -zxvf /opt/software/hadoop-3.1.3.tar.gz -C /opt/moudle/

2.7 环境变量配置

在/etc/profile.d/目录下新建一个enviroment.sh文件用来配置jdk和hadoop的环境变量

(1)新建文件:

sudo vim /etc/profile.d/enviroment.sh

并编辑输入以下内容

#!/bin/bash
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

(2)保存退出后命令行重新加载环境变量

source /etc/profile

(3)分别输入“java -version”和“hadoop version”出现以下内容证明环境变量配置成功

[master@hadoop102 opt]$ 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)
[master@hadoop102 opt]$ 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-3.1.3/share/hadoop/common/hadoop-common-3.1.3.jar

三、集群的搭建

3.1 ssh免密登录配置

在根目录输入“ll -a”查看是否有“.ssh”目录

如果没有:

(1)先输入“ssh localhost”

(2)根据提示输入“yes”

(3)输入密码(当前用户密码)

(4)输入“exit”退出,此时就自动创建了.ssh目录

[master@hadoop102 ~]$ ssh localhost
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is SHA256:5ymB0M41thZTOx2kq9uTRdj+6OOYc9lfJXT54gBGcZ0.
ECDSA key fingerprint is MD5:b7:92:06:2c:61:1d:ee:ff:7d:e7:fa:69:4e:d9:83:e8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
master@localhost's password: 
Last login: Sun Jun 13 18:08:24 2021 from hadoop102

进入.ssh目录

(1)执行命令后三次回车,生成公钥和私钥文件

cd .ssh/

ssh-keygen -t rsa

(2)把公钥发给三台机器(包括自身hadoop102)执行时需要输入目标机器的登录密码

ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop103

注意:还需要在另外两台机器上执行此操作,以使每台机器都可以免密登录其他的机器

配置完成后在hadoop102上输入“su - root”登录到root用户,执行一遍上述操作

3.2 编写集群分发脚本

注意:编写此脚本的前提是ssh免密登录已配置完成

3.2.1 目录创建

在根目录下(可执行“cd”命令移动到根目录)创建bin目录,然后创建xsync文件

[master@hadoop102 module]$ cd
[master@hadoop102 ~]$ mkdir bin
[master@hadoop102 ~]$ vim bin/xsync

3.2.2 编写脚本并赋予执行权限

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

#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
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

注意:如果是直接粘贴的话,一定要在编辑模式(左下角提示插入)下进行,输入完成后“:wq”保存退出

输入如下命令“chmod u+x xsync”赋予脚本执行的权限,用“ll”查看是否有运行权限

[master@hadoop102 ~]$ cd bin/
[master@hadoop102 bin]$ chmod u+x xsync 
[master@hadoop102 bin]$ ll

上述过程完成后,命令行输入“su - root”输入密码进入root(管理员)用户把xsync复制到相同位置

[master@hadoop102 .ssh]$ su - root
[root@hadoop102 ~]# mkdir bin
[root@hadoop102 ~]# cp /home/master/bin/xsync /root/bin/

3.2.3 利用脚本分发hadoop102上的配置文件

编写好脚本后就可以从hadoop102上把配置好的文件分发给集群上的另外两个节点

(1)把jdk和hadoop安装到另外两个节点上

[master@hadoop102 ~]$ xsync /opt/module

(2)分发环境变量配置文件

[master@hadoop102 bin]$ sudo xsync /etc/profile.d/enviroment.sh 

注意:环境变量配置文件群发到另外两台机器上后要分别执行以下内容重新加载环境变量,并验证环境变量是否起作用

[master@hadoop103 ~]$ source /etc/profile
[master@hadoop103 ~]$ java -version
[master@hadoop103 ~]$ hadoop version
[master@hadoop104 ~]$ source /etc/profile
[master@hadoop104 ~]$ java -version
[master@hadoop104 ~]$ hadoop version

3.3 集群的部署规划

 hadoop102

hadoop103

hadoop104
HDFS

NameNode

DataNode

DataNode

SecondaryNameNode

DataNode

YARNNodeManager

ResourceManager

NodeManager

NodeManager

注意:NameNode、SecondaryNameNode、ResourceManager这三个要分开不要配置在同一台虚拟机上

3.4 集群配置

修改集群的配置文件,主要是以下四个

core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml、workers

进入配置文件所在的目录 “cd /opt/module/hadoop-3.1.3/etc/hadoop/”

3.4.1 core-site.xml

vim core-site.xml

在<configuration>配置内容</configuration>中添加如下内容

    <!-- 指定NameNode的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop102:8020</value>
    </property>

    <!-- 指定hadoop数据的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-3.1.3/data</value>
    </property>

    <!-- 配置HDFS网页登录使用的静态用户为master -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>master</value>
    </property>

3.4.2 hdfs-site.xml

vim hdfs-site.xml

在<configuration>配置内容</configuration>中添加如下内容

    <!-- nn web端访问地址-->
	<property>
        <name>dfs.namenode.http-address</name>
        <value>hadoop102:9870</value>
    </property>
	<!-- 2nn web端访问地址-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop104:9868</value>
    </property>

3.4.3 yarn-site.xml

vim yarn-site.xml

在<configuration>配置内容</configuration>中添加如下内容

    <!-- 指定MR走shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

    <!-- 指定ResourceManager的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop103</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>



<!-- 如果要程序的运行日志信息上传到HDFS系统上,可配置日志聚集(选择配置) -->

<!-- 开启日志聚集功能 -->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>  
    <name>yarn.log.server.url</name>  
    <value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天 -->
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>

3.4.4 mapred-site.xml

vim mapred-site.xml

在<configuration>配置内容</configuration>中添加如下内容

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



<!-- 如果要看程序的历史运行情况,可以配置历史服务器(选择配置) -->

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

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

3.4.5 workers

vim workers

删除其中的localhost并在其中添加如下内容

hadoop102
hadoop103
hadoop104

注意:添加该文件时,内容上下不允许有空行,前后不允许有空格

3.4.6 分发修改后的配置文件

[master@hadoop102 ~]$ xsync /opt/module/hadoop-3.1.3/etc/hadoop/

3.5 启动集群

3.5.1 格式化NameNode

第一次启动需要在hadoop102节点先格式化NameNode(如果过程中需要你输入或者卡在某一步,说明有问题,需要重新格式化)

[master@hadoop102 ~]$ hdfs namenode -format

注意:此步骤忘记进行或者出现其它问题需要重新格式化,先删除三个节点/opt/module/hadoop-3.1.3/目录下的data和logs文件夹,删除命令为(未出现问题不要执行此操作)

[master@hadoop102 hadoop-3.1.3]$ rm -rf data/ logs/

3.5.2 启动HDFS

[master@hadoop102 ~]$ /opt/module/hadoop-3.1.3/sbin/start-dfs.sh 

正常情况下会出现如下内容

3.5.3 在配置了ResourceManager的节点(hadoop103)上启动YARN

[master@hadoop103 ~]$ /opt/module/hadoop-3.1.3/sbin/start-yarn.sh 

正常情况下会出现如下内容

若以上步骤都没问题,集群就启动成功了

3.5.4 启动历史服务器(如果配置了的话)

[master@hadoop102 ~]$ mapred --daemon start historyserver

3.5.5 查看集群状态

在命令行输入“jps”即可查看各个节点的启动状态

3.6 集群web端查看

3.6.1 web端查看HDFS的NameNode

浏览器中输入配置的端口:http://hadoop102:9870

3.6.2 Web端查看YARN的ResourceManager

浏览器中输入配置的端口:http://hadoop103:8088

3.6.3 web查看历史服务器(如果配置了)

浏览器中输入配置的端口:http://hadoop102:19888/jobhistory

3.7 集群测试

3.7.1 把目录中hadoop的安装包上传到集群的根目录下

[master@hadoop103 software]$ hadoop fs -put /opt/software/hadoop-3.1.3.tar.gz /

3.7.2 上传后查看文件在本地的路径

[master@hadoop103 software]$ cd /opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1728261407-192.168.10.102-1623584503695/current/finalized/subdir0/subdir0/

3.7.3 数据的拼接

由于数据是按块(128M)存储的,hadoop的安装包大约322M,因此分成了三块,按顺序可拼接在一起,例如把它拼接后命名为hadoop.tar.gz的压缩包

[master@hadoop103 subdir0]$ cat blk_1073741825>>hadoop.tar.gz
[master@hadoop103 subdir0]$ cat blk_1073741826>>hadoop.tar.gz
[master@hadoop103 subdir0]$ cat blk_1073741827>>hadoop.tar.gz

#查看拼接后的压缩包
[master@hadoop103 subdir0]$ ll

#解压
[master@hadoop103 subdir0]$ tar -zxvf hadoop.tar.gz

3.7.4 从集群下载文件

下载之前上传的hadoop安装包到本地的根目录下

[master@hadoop102 ~]$ hadoop fs -get /hadoop-3.1.3.tar.gz ./

3.7.5 官方wordcount案例测试

(1)在本地新建一个word.txt文件,输入一些单词,然后上传到集群的 /input 目录下

[master@hadoop102 ~]$ vim word.txt


#输入内容
what is your name
my name is theshy
how are you
i am fine
and you
[master@hadoop102 ~]$ hadoop fs -put word.txt /input/

注意: 上传的路径 /input 要存在,没有的话创建一个

(2)执行官方案例

[master@hadoop102 ~]$ hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

注意:集群中输出文件路径 /output 在执行任务前不能存在

可通过YARN的web页面查看进度

(3)查看任务结果

任务执行完毕后,集群会多一个 ouput 输出文件夹,打开里面就是计算的结果

3.8 hadoop常用脚本

3.8.1 集群群起(脚本实现全部组件启动)

在你的根目录下的bin文件中添加 go文件,输入以下内容

vim bin/go
#!/bin/bash

if [ $# -lt 1 ]
then
    echo 参数个数不能为0
    exit ;
fi

case $1 in
"start")
        echo " =================== 启动 hadoop集群 ==================="

        echo " --------------- 启动 hdfs ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
        echo " --------------- 启动 yarn ---------------"
        ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
        #未配置的可以打上注释
        echo " --------------- 启动 historyserver ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
        echo " =================== 关闭 hadoop集群 ==================="
        
        #未配置的可以打上注释
        echo " --------------- 关闭 historyserver ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
        echo " --------------- 关闭 yarn ---------------"
        ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
        echo " --------------- 关闭 hdfs ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
    echo 参数错误
;;
esac

然后赋予执行权限

chmod u+x bin/go

直接调用go脚本即可实现集群的启停

#启动
go start
#关闭
go stop

3.8.2 查看全部节点当前的启动状态

在你的根目录下的bin文件中添加 jpsall 文件,输入以下内容

vim bin/jpsall
#!/bin/bash

for host in hadoop102 hadoop103 hadoop104
do
        echo =============== $host ===============
        ssh $host jps $1 |grep -v Jps
done

然后赋予执行权限

chmod u+x bin/jpsall

显示三个节点的启动状态(方便查看)

3.8.3 分发脚本给另外的节点

可以选择把脚本也分发给其他的节点,使每个节点都能随时启停集群和查看状态

xsync  bin

至此,整个集群就搭建完毕了,小伙伴们有需要交流的留言哦

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐