原生Hadoop集群的搭建与配置
前言
将近三个月没写点新东西了,上班果然让人懒得动弹……在这家公司实习干的事情很杂,前段时间被叫去了解了一下Hadoop,主要看了看哔站尚硅谷的Hadoop教程,整理出了一篇搭建的文档,今天稍微修改一下发出来。
教程网址:
尚硅谷丨大数据Hadoop 3.x(2021全新升级/部署+源码+实战)
0.有关概念
官方文档地址:Apache-Hadoop
Hadoop是什么
- Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
- 主要解决海量数据的存储和海量数据的分析计算问题。
Hadoop的组成
- HDFS:Hadoop Distributed File System,分布式文件系统
- YARN:Yet Another Resource Negotiator,Hadoop 的资源管理器
- MapReduce: 大规模并行数据处理的数据模型
HDFS的架构
- NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、 文件权限),以及每个文件的块列表和块所在的DataNode等。 (相当于存储的是书本的目录)
- DataNode(dn):在本地文件系统存储文件块数据,以及块数据的校验和。 (相当于存储的是书本的具体内容)
- Secondary NameNode(2nn):每隔一段时间对NameNode元数据备份。 (对书本目录的备份)
YARN的架构
-
ResourceManager(RM):整个集群资源(内存、CPU等)的老大
-
NodeManager(NM):单个节点服务器资源老大
-
ApplicationMaster(AM):单个任务运行的老大
-
Container:容器,相当一台虚拟的服务器,里面封装了任务运行所需要的资源,如内存、CPU、磁盘、网络等(从真实的服务器中封装出来的)
MapReduce 的架构
MapReduce 将计算过程分为两个阶段:Map 和 Reduce
- Map 阶段:并行处理输入数据
- Reduce 阶段:对 Map 结果进行汇总
HDFS、YARN、MapReduce工作流程
Hadoop的运行模式
- (独立)本地模式: 无需任何守护进程,所有的程序都运行在同一个JVM上执行。在独立模式下调试MR程序非常高效方便。所以一般该模式主要是在学习或者开发阶段调试使用 。
- 伪分布式模式: Hadoop守护进程运行在本地机器上,以一台服务器作为一个集群。单机运行,但是具备Hadoop 集群的所有功能
- 完全分布式模式:多台服务器各司其职,组成分布式环境,Hadoop守护进程运行在一个集群上
注:所谓分布式要启动守护进程 ,即:使用分布式hadoop时,要先启动一些准备程序进程,然后才能使用比如start-dfs.sh start-yarn.sh。而本地模式不需要启动这些守护进程 。
1.Hadoop的安装与配置
1.0.需要材料
-
服务器:若干(最好三台以上)。本次用的是虚拟机,Linux版本为centos7
-
安装包:Java安装包,最好为jdk1.8
Hadoop安装包 本次使用的版本为2.10.1
1.1.准备工作
1.1.0.如果是虚拟机中,需要关闭防火墙、配置静态IP,请自行配置
1.1.1.修改服务器主机名
在集群中,为了方便区分,应当给每一个主机分配一个主机名称。
- 打开/etc/hostname文件
vim /etc/hostname
- 在第一行输入主机名称后,直接保存即可
检验:输入hostname查看主机名称
hostname
1.1.2.配置服务器主机名称映射
现在要访问其他服务器,需要通过ip地址的方式。配置主机名称映射,可以直接通过主机名称来访问服务器。
- 打开/etc/hosts文件
vim /etc/hosts
- 在末尾追加集群内其他服务器的ip地址,主机名。直接保存即可。
1.1.3.配置服务器之间的ssh免密登录
- 生成服务器的公钥与私钥
ssh-keygen -t rsa
输入命令后,连续按三次enter即可
检验:到root/.ssh中,可以查看到新生成的两个文件,其中id_rsa保存的是本机的私钥,id_rsa.pub保存的是本机的公钥
cd /root/.ssh
-
配置ssh免密登录,需要让服务器获得被访问服务器的公钥
-
将本服务器的公钥拷贝给集群内所有服务器(包括自己)
ssh-copy-id node03
根据提示输入yes 和 node03的密码
检验:测试是否能成功连接
ssh node03
可以看到,已经可以连接到node03了
到node03中的/root/.ssh目录中看,生成了一个authorized_keys的文件,该文件保存了能无密码访问本机的服务器的公钥
1.1.4.编写集群分发脚本
在集群机器配置时,经常需要将一个文件或目录copy到同样的多台集群上,如果一个一个机器去复制,比较麻烦。
编写xsync同步脚本,只需要一条命令就可以实现这个目的。
注:xsync其实是对rsync脚本的二次封装,脚本内容可以根据自己需要进行修改。
步骤如下:
- 检查一下是否安装rsync
rpm -q rsync
- 如果没有安装rsync,先安装
yum install -y rsync
- 进入到用户主目录的bin目录下
cd /bin
- 创建一个xsync文件
vim xsync
- 输入如下脚本(主机名、路径请自行修改)
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in node02 node03 node04
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
- 使脚本可用
chmod +x xsync
- 用本脚本直接将脚本文件发送到其他服务器
xsync xsync
到另外两台节点的bin目录下查看,可以看到多了xsync脚本
注:此后我们修改环境变量、集群的配置文件时,编写好后直接使用该命令发送到其他服务器,就不需要一个个去修改了。
不使用集群分发脚本的话,以下步骤在要在每一台机器中重复执行
1.2.为服务器配置Java环境
1.2.1.将安装包上传到服务器
为了方便管理,本次在/opt/目录下新建一个software目录,一起上传到里面