完全分布式运行模式
一、虚拟机准备
1.1模板虚拟机环境准备
1.安装模板虚拟机,IP 地址 192.168.10.100、主机名称 hadoop100、内存 4G、硬盘 50G
2.hadoop100 虚拟机配置要求如下(本文 Linux 系统全部以 CentOS-7.5-x86-1804 为例)
(1)使用 yum 安装需要虚拟机可以正常上网,yum 安装前可以先测试下虚拟机联网情况
[root@hadoop100 ~]# ping www.baidu.com
PING www.baidu.com (14.215.177.39) 56(84) bytes of data.
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=1
ttl=128 time=8.60 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=2
ttl=128 time=7.72 ms
(2)安装 epel-release
注:Extra Packages for Enterprise Linux 是为“红帽系”的操作系统提供额外的软件包, 适用于 RHEL、CentOS 和 Scientific Linux。相当于是一个软件仓库,大多数 rpm 包在官方 repository 中是找不到的)
[root@hadoop100 ~]# yum install -y epel-release
- 关闭防火墙,关闭防火墙开机自启
[root@hadoop100 ~]# systemctl stop firewalld
[root@hadoop100 ~]# systemctl disable firewalld.service
注意:在企业开发时,通常单个服务器的防火墙时关闭的。公司整体对外会设置非常安 全的防火墙
4.创建 guochao 用户,并修改 guochao 用户的密码
[root@hadoop100 ~]# useradd guochao
[root@hadoop100 ~]# passwd guochao
5.配置 guochao 用户具有 root 权限,方便后期加 sudo 执行 root 权限的命令
[root@hadoop100 ~]# vim /etc/sudoers
修改 /etc/sudoers 文件,在%wheel 这行下面添加一行,如下所示:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
guochao ALL=(ALL) NOPASSWD:ALL
注意:guochao 这一行不要直接放到 root 行下面,因为所有用户都属于 wheel 组,你先 配置了 guochao具有免密功能,但是程序执行到%wheel 行时,该功能又被覆盖回需要 密码。所以 guochao 要放到%wheel 这行下面。
6.在/opt 目录下创建文件夹,并修改所属主和所属组
(1)在/opt 目录下创建 module、software 文件夹
[root@hadoop100 ~]# mkdir /opt/module
[root@hadoop100 ~]# mkdir /opt/software
(2)修改 module、software 文件夹的所有者和所属组均为 guochao 用户
[root@hadoop100 ~]# chown guochao:guochao /opt/module
[root@hadoop100 ~]# chown guochao:guochao /opt/software
(3)查看 module、software 文件夹的所有者和所属组
[root@hadoop100 ~]# cd /opt/
[root@hadoop100 opt]# ll
总用量 12
drwxr-xr-x. 2 guochao guochao 4096 5 月 28 17:18 module
drwxr-xr-x. 2 root root 4096 9 月 7 2017 rh
drwxr-xr-x. 2 guochao guochao 4096 5 月 28 17:18 software
7.卸载虚拟机自带的 JDK
注意:如果你的虚拟机是最小化安装不需要执行这一步。
[root@hadoop100 ~]# rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
rpm -qa:查询所安装的所有 rpm 软件包
grep -i:忽略大小写
xargs -n1:表示每次只传递一个参数
rpm -e –nodeps:强制卸载软件
8.重启虚拟机
[root@hadoop100 ~]# reboot
1.2 克隆三台虚拟机
1.利用模板机 hadoop100,克隆三台虚拟机:hadoop102 hadoop103 hadoop104
注意:克隆时,要先关闭 hadoop100
2.修改克隆机 IP,以下以 hadoop102 举例说明
(1)修改克隆虚拟机的静态 IP
[root@hadoop102 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改 BOOTPROTO=static
IPADDR=192.168.10.102
GATEWAY=192.168.10.2
DNS1=192.168.10.2
DEVICE=ens33
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
NAME="ens33"
PREFIX=24
IPADDR=192.168.10.102
GATEWAY=192.168.10.2
DNS1=192.168.10.2
(2) 配置ip 查看 Linux 虚拟机的虚拟网络编辑器,编辑->虚拟网络编辑器->VMnet8
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k5mgZTn9-1621835603343)(C:\Users\guochao\Desktop\notes\VMnet8.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RMmKSmjk-1621835603346)(C:\Users\guochao\Desktop\notes\VMnet8 1.jpg)]
(3)配置 Windows 系统适配器 VMware Network Adapter VMnet8 的 IP 地址
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MVfZes1G-1621835603349)(C:\Users\guochao\Desktop\notes\VMnet8 2.jpg)]
(4)保证 Linux 系统 ifcfg-ens33 文件中 IP 地址、虚拟网络编辑器地址和 Windows 系
统 VM8 网络 IP 地址相同。
3.修改克隆机主机名,以下以 hadoop102 举例说明
(1)修改主机名称
[root@hadoop100 ~]# vim /etc/hostname
hadoop102
(2)配置 Linux 克隆机主机名称映射 hosts 文件,打开/etc/hosts
[root@hadoop102 ~]# vim /etc/hosts
添加如下内容
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
192.168.10.105 hadoop105
192.168.10.106 hadoop106
192.168.10.107 hadoop107
192.168.10.108 hadoop108
4.重启克隆机 hadoop102
[root@hadoop102 ~]# reboot
5.修改 windows 的主机映射文件(hosts 文件)
如果操作系统是 window10,先拷贝出来,修改保存以后,再覆盖即可
(a)进入 C:\Windows\System32\drivers\etc 路径
(b)拷贝 hosts 文件到桌面
(c)打开桌面 hosts 文件并添加如下内容
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
192.168.10.105 hadoop105
192.168.10.106 hadoop106
192.168.10.107 hadoop107
192.168.10.108 hadoop108
(d)将桌面 hosts 文件覆盖 C:\Windows\System32\drivers\etc 路径 hosts 文件
1.3 在 hadoop102 安装 JDK
1.卸载现有 JDK
注意:安装 JDK 前,一定确保提前删除了虚拟机自带的 JDK。
[root@hadoop102 ~]# rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
2.用 XShell 传输工具将 JDK 导入到 opt 目录下面的 software 文件夹下面
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CaFnPMi1-1621835603351)(C:\Users\guochao\Desktop\notes\hadoop102 安装jdk.jpg)]
3.在 Linux 系统下的 opt 目录中查看软件包是否导入成功
[guochao@hadoop102 ~]$ ls /opt/software/
看到如下结果:
jdk-8u212-linux-x64.tar.gz
- 进入/opt/software/路径下解压 JDK 到/opt/module 目录下
[guochao@hadoop102 software]$ tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
5.配置 JDK 环境变量
(1)新建/etc/profile.d/my_env.sh 文件
[guochao[guochao@hadoop102 ~]$ cd /etc/profile.d/
[guochao@hadoop102 profile.d]$ sudo vim my_env.sh
添加如下内容
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
(2)保存后退出 :wq
(3)source 一下/etc/profile 文件,让新的环境变量 PATH 生效
[guochao@hadoop102 profile.d]$ source /etc/profile
6.测试 JDK 是否安装成功
[guochao@hadoop102 ~]$ java -version
如果能看到以下结果,则代表 Java 安装成功。
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)
注意:重启(如果 java -version 可以用就不用重启)
[guochao@hadoop102 ~]$ sudo reboot
1.4 在 hadoop102 安装 Hadoop
Hadoop 下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/
1.用 XShell 文件传输工具将 hadoop-3.1.3.tar.gz 导入到 opt 目录下面的 software 文件夹下 面
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UEZzi3Fd-1621835603353)(C:\Users\guochao\Desktop\notes\hadoop102 安装hadoop.jpg)]
2.进入到 Hadoop 安装包路径下
[guochao@hadoop102 ~]$ cd /opt/software/
3.解压安装文件到/opt/module 下
[guochao@hadoop102 software]$ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
4.查看是否解压成功
[atguigu@hadoop102 software]$ ls /opt/module/
hadoop-3.1.3
5.将 Hadoop 添加到环境变量
(1)获取 Hadoop 安装路径
[guochao@hadoop102 hadoop-3.1.3]$ pwd
/opt/module/hadoop-3.1.3
(2)打开/etc/profile.d/my_env.sh 文件
[guochao@hadoop102 hadoop-3.1.3]$ sudo vim /etc/profile.d/my_env.sh
在 my_env.sh 文件末尾添加如下内容:(shift+g)
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
保存并退出: :wq
(3)让修改后的文件生效
[guochao@hadoop102 hadoop-3.1.3]$ source /etc/profile
6.测试是否安装成功
[guochao@hadoop102 hadoop-3.1.3]$ hadoop version
Hadoop 3.1.3
7.重启(如果 Hadoop 命令不能用再重启虚拟机)
[guochao@hadoop102 hadoop-3.1.3]$ sudo reboot
二、编写集群分发脚本 xsync
2.1 scp(secure copy)安全拷贝
1.scp 定义
scp 可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)
2.基本语法
scp -r p d i r / pdir/ pdir/fname u s e r @ user@ user@host: p d i r / pdir/ pdir/fname
命令 递归 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
3.案例实操
前提:在 hadoop102、hadoop103、hadoop104 都已经创建好的/opt/module、
/opt/software 两个目录,并且已经把这两个目录修改为 guochao:guochao
[guochao@hadoop102 ~]$ sudo chown guochao:guochao -R /opt/module
(a)在 hadoop102 上,将 hadoop102 中/opt/module/jdk1.8.0_212 目录拷贝到
hadoop103 上。
[guochao@hadoop102 ~]$ scp -r /opt/module/jdk1.8.0_212 guochao@hadoop103:/opt/module
(b)在 hadoop103 上,将 hadoop102 中/opt/module/hadoop-3.1.3 目录拷贝到
hadoop103 上。
[guochao@hadoop103 ~]$ scp -r guochao@hadoop102:/opt/module/hadoop-3.1.3 /opt/module/
(c)在 hadoop103 上操作,将 hadoop102 中/opt/module 目录下所有目录拷贝到
hadoop104 上。
[guochao@hadoop103 opt]$ scp -r guochao@hadoop102:/opt/module/* guochao@hadoop104:/opt/module
2.2 rsync 远程同步工具
rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。rsync 和 scp 区别:用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更新。scp 是把所有文件都复制过去。
(1)基本语法
rsync -av p d i r / pdir/ pdir/fname u s e r @ user@ user@host: p d i r / pdir/ pdir/fname
命令 选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
选项参数说明
选项 功能
-a 归档拷贝
-v 显示复制过程
(2)案例实操
(a)删除 hadoop103 中/opt/module/hadoop-3.1.3/wcinput
[atguigu@hadoop103 hadoop-3.1.3]$ rm -rf wcinput/
(b)同步 hadoop102 中的/opt/module/hadoop-3.1.3 到 hadoop103
[atguigu@hadoop102 module]$ rsync -av hadoop-3.1.3/
atguigu@hadoop103:/opt/module/hadoop-3.1.3/
2.3 xsync 集群分发脚本
1.需求:循环复制文件到所有节点的相同目录下
2.需求分析:
(a)rsync 命令原始拷贝:
rsync -av /opt/module atguigu@hadoop103:/opt/
(b)期望脚本: xsync 要同步的文件名称
(c)期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径)
/home/guochao/bin
[guochao@hadoop102 ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/atgu
igu/.local/bin:/home/guochao/bin:/opt/module/jdk1.8.0_212/bi
n
3.脚本实现
(a)在/home/atguigu/bin 目录下创建 xsync 文件
[guochao@hadoop102 opt]$ cd /home/guochao
[guochao@hadoop102 ~]$ mkdir bin
[guochao@hadoop102 ~]$ cd bin
[guochao@hadoop102 bin]$ vim xsync
在该文件中编写如下代码
#!/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
(b)修改脚本 xsync 具有执行权限
[guochao@hadoop102 bin]$ chmod +x xsync
(c)测试脚本
[guochao@hadoop102 ~]$ xsync /home/guochao/bin
(d)将脚本复制到/bin 中,以便全局调用
[guochao@hadoop102 bin]$ sudo cp xsync /bin/
(e)同步环境变量配置(root 所有者)
[guochao@hadoop102 ~]$ sudo ./bin/xsync /etc/profile.d/my_env.sh
注意:如果用了 sudo,那么 xsync 一定要给它的路径补全。
让环境变量生效
[guochao@hadoop103 bin]$ source /etc/profile
[guochao@hadoop104 opt]$ source /etc/profile
三、SSH 无密登录配置
3.1 配置 ssh
(1)基本语法
ssh 另一台电脑的 IP 地址
(2)ssh 连接时出现 Host key verification failed 的解决方法
[guochao@hadoop102 ~]$ ssh hadoop103
如果出现如下内容
Are you sure you want to continue connecting (yes/no)?
输入 yes,并回车
(3)退回到 hadoop102
[guochao@hadoop103 ~]$ exit
3.2 无密钥配置
1.生成公钥和私钥
[guochao@hadoop102 .ssh]$ pwd
/home/guochao/.ssh
[guochao@hadoop102 .ssh]$ ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)
2.将公钥拷贝到要免密登录的目标机器上
[guochao@hadoop102 .ssh]$ ssh-copy-id hadoop102
[guochao@hadoop102 .ssh]$ ssh-copy-id hadoop103
[guochao@hadoop102 .ssh]$ ssh-copy-id hadoop104
注意: 还需要在 hadoop103 上采用 guochao账号配置一下无密登录到 hadoop102、hadoop103、 hadoop104 服务器上。
还需要在 hadoop104 上采用 guochao 账号配置一下无密登录到 hadoop102、hadoop103、 hadoop104 服务器上。
还需要在 hadoop102 上采用 root 账号,配置一下无密登录到 hadoop102、hadoop103、 hadoop104;
- .ssh文件夹下(~/.ssh)的文件功能解释
known_hosts 记录 ssh 访问过计算机的公钥(public key)
id_rsa 生成的私钥
id_rsa.pub 生成的公钥
authorized_keys 存放授权过的无密登录服务器公钥
四、集群配置
4.1 集群部署规划
注意: NameNode 和 SecondaryNameNode 不要安装在同一台服务器
ResourceManager 也很消耗内存,不要和 NameNode、SecondaryNameNode 配置在 同一台机器上。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j8kUFixt-1621835603354)(C:\Users\guochao\Desktop\notes\hadoop 集群分布.jpg)]
4.2 配置文件说明
Hadoop 配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认 配置值时,才需要修改自定义配置文件,更改相应属性值。
1.默认配置文件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OW6vcyxW-1621835603355)(C:\Users\guochao\Desktop\notes\集群.jpg)]
2.自定义配置文件: core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 四个配置文件存放在 $HADOOP_HOME/etc/hadoop 这个路径上,用户可以根据项目需求重新进行修改配置。
4.3 配置集群
1.核心配置文件
配置 core-site.xml
[guochao@hadoop102 ~]$ cd $HADOOP_HOME/etc/hadoop
[guochao@hadoop102 hadoop]$ vim core-site.xml
文件内容如下: 在 中添加
下同
<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 网页登录使用的静态用户为 guochao -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>guochao</value>
</property>
</configuration>
2.HDFS 配置文件
配置 hdfs-site.xml
[guochao@hadoop102 hadoop]$ vim hdfs-site.xml
文件内容如下:
<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>
</configuration>
3.YARN 配置文件
配置 yarn-site.xml
[guochao@hadoop102 hadoop]$ 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>hadoop103</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO
NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
RED_HOME</value>
</property>
</configuration>
4.MapReduce 配置文件
配置 mapred-site.xml
[guochao@hadoop102 hadoop]$ vim mapred-site.xml
文件内容如下:
<configuration>
<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
4.4 在集群上分发配置好的 Hadoop 配置文件
[guochao@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc/hadoop/
4.5 去 103 和 104 上查看文件分发情况
[guochao@hadoop103 ~]$ cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
[guochao@hadoop104 ~]$ cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
五、群起集群
5.1 配置 workers
[atguigu@hadoop102 hadoop]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
在该文件中增加如下内容:
hadoop102
hadoop103
hadoop104
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
同步所有节点配置文件
[guochao@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc
5.2 启动集群
1.如果集群是第一次启动,需要在 hadoop102 节点格式化 NameNode(注意:格式 化 NameNode,会产生新的集群 id,导致 NameNode 和 DataNode 的集群 id 不一致,集群找 不到已往数据。如果集群在运行过程中报错,需要重新格式化 NameNode 的话,一定要先停 止 namenode 和 datanode 进程,并且要删除所有机器的 data 和 logs 目录,然后再进行格式 化)
[guochao@hadoop102 hadoop-3.1.3]$ hdfs namenode -format
2.启动 HDFS
[guochao@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
3.在配置了 ResourceManager 的节点(hadoop103)启动 YARN
[guochao@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
4.Web 端查看 HDFS 的 NameNode
(a)浏览器中输入:http://hadoop102:9870
(b)查看 HDFS 上存储的数据信息
5.Web 端查看 YARN 的 ResourceManager
(a)浏览器中输入:http://hadoop103:8088
(b)查看 YARN 上运行的 Job 信息