Bootstrap

Hadoop3.3.0完全分布式集群搭建详细教程

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

前言

从零开始学习hadoop,记录成长过程,也是为了集群崩了还能搭好。话不多说,我们开始干活了!


环境:
虚拟机:VMware15
Linux系统:centos7

需要提前准备好的安装包:
1.centos7镜像文件
2.VMware安装包
3.hadoop3.3.0和jdk1.8压缩包
4.远程访问工具xshell和xftp
接下来面对疾风吧

一、VMware安装

一直点击下一步就可以了,如果c盘不够,可以选择更改安装位置。
密钥可以去网上搜
1.1

安装完成
1.2


二、Centos7安装

1.进入VMware,创建新的虚拟机

2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
2.10
2.11
2.12
2.13
2.14
2.15

2.查看虚拟化是否开启

2.16

3.选择镜像文件

2.17
2.18

4.配置虚拟机

2.19
2.20
2.21
2.22
2.23
2.24
2.25
2.26
2.27
2.28
2.29
2.30
2.31
2.32
2.33
2.34
2.35
2.36
2.37
2.38
2.39
2.40
2.41
2.42
2.43
2.44
2.45
2.46
2.47
2.48
2.49
2.50
2.51
2.52


三、配置IP和主机名称

1.查看 Linux 虚拟机的虚拟网络编辑器,编辑->虚拟网络编辑器->VMnet8

3.1
3.2
3.3
3.4
3.5

2.查看 Windows 系统适配器 VMware Network Adapter VMnet8 的 IP 地址

3.6
3.7
3.8
3.9
3.10

3.修改虚拟机静态IP

打开虚拟机:

su root

输入密码

1.修改虚拟机的静态 IP

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

3.11

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="ens33"
UUID="f0aae22d-e953-4a81-a524-386f853804f1"
DEVICE="ens33"
ONBOOT="yes"

IPADDR=192.168.10.110
GATEWAY=192.168.10.2
DNS1=192.168.10.2

2.修改主机名:

vim /etc/hosts

3.12

192.168.10.110 model
192.168.10.111 master
192.168.10.112 slave1
192.168.10.113 slave2

3.重启并检查

reboot

3.13
3.14
3.15


四、安装远程访问工具

1.安装xshell

可以修改一下安装位置,启动

2.修改 windows 的主机映射文件(hosts 文件)

进入 C:\Windows\System32\drivers\etc 路径,打开 hosts 文件并添加如下内容,然后保存

192.168.10.110 model
192.168.10.111 master
192.168.10.112 slave1
192.168.10.113 slave2

如果操作系统是 window7,可以直接修改,如果操作系统是 window10,先拷贝出来,修改保存以后,再覆盖即可

3.新建会话

4.1
4.2
4.3

4.安装xftp

4.4
安装完成:
4.5


五、配置模板虚拟机

1.安装 epel-release

5.1

yum install -y epel-release

2.关闭防火墙,关闭防火墙开机自启

systemctl stop firewalld
systemctl disable firewalld.service

5.2

2.配置root权限

vim /etc/sudoers

添加以下内容:
5.3

3.在/opt 目录下创建 module、software 文件夹

cd /opt
sudo mkdir module
sudo mkdir software

4.修改 module、software 文件夹的所有者和所属组均为 bigdata用户

sudo chown bigdata:bigdata module/ software/

5.卸载虚拟机自带的 JDK

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

6.重启

reboot 

六、克隆虚拟机

克隆时,要先关闭model

1.克隆出三台虚拟机

6.1
6.2
6.3
6.4
6.5
6.6
6.7
登录root用户

2.修改克隆机master IP

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

6.8

3.修改主机名称

vim /etc/hostname

6.9

4.重启

reboot

5.slave1和slave2同理

slave1的IP地址:192.168.10.112
slave2的IP地址:192.168.10.113

6.在xshell中新建三个会话


六、在master上安装jdk和hadoop

1.准备安装包

cd /opt/software

6.1
6.2

2.解压 JDK 到/opt/module 目录下

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

3.配置 JDK 环境变量

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

添加一下内容:

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

4.让环境变量生效

source /etc/profile

6.3

5.解压hadoop

tar -zxvf hadoop-3.3.0.tar.gz -C /opt/module/ 

6.配置环境变量

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

添加以下内容:

#HADOOP_HOME 
export HADOOP_HOME=/opt/module/hadoop-3.3.0 
export PATH=$PATH:$HADOOP_HOME/bin 
export PATH=$PATH:$HADOOP_HOME/sbin 
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

7.让环境变量生效

source /etc/profile 

八、分发jdk和hadoop

在master虚拟机上

cd /opt/module
scp -r jdk1.8.0_212/ bigdata@slave1:/opt/module
scp -r jdk1.8.0_212/ bigdata@slave2:/opt/module
scp -r hadoop-3.3.0/ bigdata@slave1:/opt/module
scp -r hadoop-3.3.0/ bigdata@slave2:/opt/module

九、xsync集群分发脚本

1.在/home/bigdata/bin 目录下创建 xsync 文件

cd /home/bigdata
mkdir bin 
cd bin 
vim xsync 

在该文件中编写如下代码

#!/bin/bash
#1. 判断参数个数 
if [ $# -lt 1 ] 
then 
        echo Not Enough Arguement!
        exit;
fi
#2. 遍历集群所有机器
for host in master slave1 slave2         
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

2.修改脚本 xsync 具有执行权限

chmod 777 xsync

3.测试脚本

xsync /bin

4.同步环境变量配置(root 所有者)

sudo ./bin/xsync /etc/profile.d/my_env.sh 

让环境变量生效 ,在slave1和slave2上进行:

source /etc/profile 

十、ssh免密登录

1.在master上家目录下

cd .ssh
ssh-keygen -t rsa

然后敲(三个回车)

ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2

2.在slave1上家目录下

cd .ssh
ssh-keygen -t rsa

然后敲(三个回车)

ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2

3.在slave2上家目录下

cd .ssh
ssh-keygen -t rsa

然后敲(三个回车)

ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2

4.在master、slave1、slave2上

su root
cd .ssh
ssh-keygen -t rsa

然后敲(三个回车)

ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2

十一、集群配置

cd /opt/module/hadoop-3.3.0
mkdir hdfs
cd hdfs
mkdir tmp
mkdir data
mkdir name

1.配置 core-site.xml

cd /opt/module/hadoop-3.3.0/etc/hadoop
vim core-site.xml

配置如下:

<configuration> 
<!-- 指定 NameNode 的地址 --> 
<property> 
<name>fs.defaultFS</name> 
<value>hdfs://master:8020</value> 
</property> 
<!-- 指定 hadoop 数据的存储目录 --> 
<property> 
<name>hadoop.tmp.dir</name> 
<value>/opt/module/hadoop-3.3.0/hdfs/tmp</value> 
</property> 
<configuration> 

2.配置 hdfs-site.xml

vim hdfs-site.xml
<configuration> 
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/module/hadoop-3.3.0/hdfs/name</value>
<final>true</final>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/module/hadoop-3.3.0/hdfs/data</value>
<final>true</final>
</property>
<!-- nn web 端访问地址--> 
<property> 
<name>dfs.namenode.http-address</name> 
<value>master:9870</value> 
</property> 
<!-- 2nn web 端访问地址--> 
<property> 
<name>dfs.namenode.secondary.http-address</name> 
<value>slave2:9868</value> 
</property> 
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration> 

3.配置 yarn-site.xml

vim yarn-site.xml
<configuration> 
<!-- 指定 MR 走 shuffle --> 
<property> 
<name>yarn.nodemanager.aux-services</name> 
<value>mapreduce_shuffle</value> 
</property> 
<!-- 指定 ResourceManager 的地址--> 
<property> 
<name>yarn.resourcemanager.hostname</name> 
<value>slave1</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> 
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
</configuration>

4.配置 mapred-site.xml

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

5.分发配置

xsync /opt/module/hadoop-3.3.0/etc/hadoop/

6.配置workers

vim /opt/module/hadoop-3.3.0/etc/hadoop/workers 

内容为:

master
slave1
slave2

7.同步

xsync /opt/module/hadoop-3.3.0/etc 

十二、启动集群

如果集群是第一次启动,需要在master节点格式化 NameNode:

hdfs namenode -format 

启动 HDFS(在master的hadoop-3.3.0目录下)
[bigdata@master hadoop-3.3.0]$ sbin/start-dfs.sh

sbin/start-dfs.sh

在配置了 ResourceManager 的节点(slave1)启动 YARN
[bigdata@slave1 hadoop-3.3.0]$ sbin/start-yarn.sh

sbin/start-yarn.sh

在浏览器中输入:
master:9870
12.1
slave1:8088
12.2
到这儿你就成功啦!
congratulations!

;