文章目录
- 前言
- 1. Hadoop 集群搭建模式
- 2. 伪分布式集群搭建环境准备
- 2.1 SSH免密登录设置
- 2.2 Java 环境准备
- 2.3 Hadoop环境准备
- 2.4 其他环境准备
- 3. Hadoop初始配置
- 3.1 创建Hadoop用户
- 3.2 创建目录
- 3.3 认识Hadoop相关配置文件
- 3.3.1 配置文件的优先级
- 3.3.2 配置Hadoop守护进程环境变量
- 3.3.3 配置Hadoop核心属性(core-site.xml)
- 3.3.4 配置Mapreduce(mapred-site.xml)
- 3.3.5 配置Yarn(yarn-site.xml)
- 3.3.6 配置HDFS(hdfs-site.xml)
- 4. 操作集群
- 4.1 格式化集群
- 4.2 启动HDFS与YARN集群
- 4.3 关闭HDFS与YARN集群
- 5. 伪分布式集群虚拟机环境
- 总结
前言
为了保证应用高可用性,一般我们都会搭建一个应用的集群环境,这样即使其中一个应用出现故障,集群中的其他应用仍可继续对外提供访问。本章将介绍如何安装和配置一个伪分布式集群。
以下是本章主要内容:
- hadoop环境准备
- 搭建一个简单的伪分布式Hadoop集群
- 操作hadoop集群
- 使用hadoop运行测试程序
1. Hadoop 集群搭建模式
官方给我们提供了三种安装Hadoop集群的方式如下图所示:
- 单机模式(Standalone )
hadoop默认情况是以非分布式单机方式运行的,所有的Hadoop服务都是运行在一个JVM虚拟机上,这种模式下Hadoop采用操作系统本地文件而不是HDFS(Hadoop File System)进行数据的存储。此种模式适合开发人员进行代码测试工作。
- 伪分布式(Pseudo-Distributed )
此模式可以模拟真实的多节点集群,可以让Hadoop守护进程(DataNode、NameNode和ResourceManager)运行在单一服务器上,但这也意味着这种单节点的Hadoop集群无法保证高可用性与数据的安全性,生产环境不推荐使用。
- 全分布式(Fully-Distributed)
Hadoop守护进程(DataNode、NameNode和ResourceManager)在不同的机器上运行着,这种模式可以保证Hadoop集群的高可用性、数据安全性。常应用在生产环境中。
2. 伪分布式集群搭建环境准备
在实际安装集群前,必须满足如下要求,才能够成功在Linux环境下安装软件。
2.1 SSH免密登录设置
Hadoop应用提供了很多脚本用来管理和维护Hadoop守护进程,这其中就用了SSH登录相关命令,所以这里需要配置一个免密登录localhost的配置,具体步骤如下:
- 生成SSH密钥
## 生成密钥命令:ssh-keygen -t rsa
[root@hadoop104 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:81ORH1ajaBDTFlQPo+yWLWTVXzeVe9QWooqqYbSbRr4 root@hadoop104
The key's randomart image is:
+---[RSA 2048]----+
| ++oo*.oB|
| +o=.*=B|
| .Oo.o+*|
| . * o+ oo|
| . .S. =... .|
| ... . o... |
| o+ . o |
| .o= . |
| .E. |
+----[SHA256]-----+
- 拷贝公钥
## 将公钥拷贝到~/.ssh/authorized_keys 下
[root@hadoop104 ~]# ssh-copy-id root@localhost
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is SHA256:YjPIJdatopqmPsZtdK/5JyTSgahk7tdP+QIuLbuw81U.
ECDSA key fingerprint is MD5:02:6f:99:e3:62:3b:e1:28:d8:05:34:70:dc:d3:99:89.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@localhost's password:
## 输入用户名与密码
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@localhost'"
and check to make sure that only the key(s) you wanted were added.
- 使用ssh免密登录本地
## 免密登录
[root@hadoop104 ~]# ssh root@localhost
Last login: Wed Sep 28 12:08:58 2022 from 192.168.10.1
## 退出当前连接
[root@hadoop104 ~]# exit
logout
Connection to localhost closed.
[root@hadoop104 ~]#
2.2 Java 环境准备
hadoop 3.x版本目前要求最低的JDK版本为1.8版本,所以这里我们在服务器配置一下JDK环境即可:
这里可以直接访 oracle 官网 直接下载JDK8,也可以使用我提供的百度云网址如下:
链接:https://pan.baidu.com/s/10e19hoiDjW61rHrhh-KtBQ?pwd=zyk5
提取码:zyk5
然后将JDK安装包上传到Linux服务器上,解压并配置Java环境变量。具体操作步骤如下:
- 创建目录
# 1. 创建安装包保存路径与解压安装包路径
[root@hadoop104 ~]# mkdir -p /soft/{service,packages}
- 上传安装包
- 解压安装包
# 解压到指定目录
[root@hadoop104 packages]# tar -zxvf jdk-8u341-linux-x64.tar.gz -C /soft/service/
- 配置环境变量
[root@hadoop104 ~]# vim /etc/profile.d/java.sh
编辑环境脚本内容如下:
## 刷新环境变量
[root@hadoop104 ~]# source /etc/profile
## 验证JDK环境
[root@hadoop104 ~]# java -version
java version "1.8.0_341"
Java(TM) SE Runtime Environment (build 1.8.0_341-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.341-b10, mixed mode)
[root@hadoop104 ~]#
2.3 Hadoop环境准备
## 设置Hadoop环境变量
[hdfs@hadoop104 hadoop]$ vim /etc/profile.d/hadoop.sh
2.4 其他环境准备
- 安装epel-release
yum install -y epel-release
- 安装vim
yum install -y vim*
- 安装 net-tools
yum install -y net-tools
- 同步时间
yum install -y ntpdate
ntpdate ntp4.aliyun.com
- 停用防火墙
systemctl stop firewalld
## 查看防火墙状态
firewall-cmd --state
3. Hadoop初始配置
首先我们需要从官网上下载Hadoop安装包,这里选用3.1.4版本进行安装。
cd /soft
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.1.4/hadoop-3.1.4.tar.gz
解压安装包:
## 将hadoop3.1.4安装包解压到/soft/service 目录下
[root@hadoop104 packages]# tar -zxvf hadoop-3.1.4.tar.gz -C /soft/service/
配置Hadoop环境变量:
export HADOOP_HOME=/soft/service/hadoop-3.1.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
验证hadoop是否安装成功:
## 查看hadoop安装版本
[root@hadoop104 hadoop-3.1.4]# hadoop version
输出如下结果则Hadoop安装成功
3.1 创建Hadoop用户
hadoop每个关键的守护进程都需要造单独的用户下运行,所以这里创建三个用户用来对应不同的hadoop守护进程:
用户 | 说明 |
yarn | 用来管理ResourceManager服务 |
mapred | 用来管理MapReduce服务 |
hdfs | 用来管理HDFS文件系统 |
## 创建hadoop组
[root@hadoop104 packages]# groupadd hadoop
## 创建yarn用户
[root@hadoop104 packages]# useradd -g hadoop yarn
## 创建hdfs用户
[root@hadoop104 packages]# useradd -g hadoop hdfs
## 创建mapred用户
[root@hadoop104 packages]# useradd -g hadoop mapred
3.2 创建目录
在Hadoop中我们需要明确 NameNode、SecondaryNameNode、DataNode 的数据目录以及日志目录,下面创建以下目录
- 创建NameNode数据目录
mkdir -p /soft/data/hadoop/hdfs/nn
- 创建SecondaryNameNode数据目录
mkdir -p /soft/data/hadoop/hdfs/snn
- 创建DataNode数据目录
mkdir -p /soft/data/hadoop/hdfs/dn
- 授权目录给hdfs用户
chown -R hdfs:hadoop /soft/data/hadoop/
- 创建yarn用户日志目录
mkdir -p /soft/log/hadoop/logs
- 授权目录给yarn用户
chown -R yarn:hadoop /soft/log/hadoop/
3.3 认识Hadoop相关配置文件
Hadoop使用了多个配置文件,且每一个都会影响集群操作的不同方面,如HDFS操作、Yarn操作、MapReduce操作,每一个操作都有与之对应的配置文件,这些配置文件基本上都是XML格式的,Hadoop的配置文件有很多参数,如果没有自定义配置参数的值,大部分都会使用默认值,总的来说Hadoop中一共有以下类型的配置文件:
- 环境变量文件
- Hadoop为启动和停止Hadoop应用提供了以上三个环境变量脚本,其中 hadoop-env.sh用来设置hadoop运行环境相关的配置mapred-env.sh用来指定mapReduce操作环境相关配置、yarn-env.sh是用来指定yarn使用的环境变量的值。
- 默认配置文件
默认配置文件如上,顾名思义当我们没有在自定义配置文件中配置参数对应的值,则默认以xx.default.xml配置的值为准,否则以自定义xx.site的值为准,下面介绍每个配置文件的作用:
- core-default.xml:hadoop核心配置文件,可以在core-site.xml中设置变量来覆盖此文件的默认配置值。
- hdfs-default.xml :HDFS相关服务的默认配置文件,可以设置hdfs-site.xml覆盖此文件中的默认配置值。
- yarn-default.xml:YARN默认配置文件,可以设置yarn-site.xml覆盖此文件中默认配置值。
- mapred-default.xml:MapReduce默认配置文件,可以设置mapred-site.xml覆盖此文件中默认配置值。
- site专用配置文件
- site自定义配置文件是我们在实际中需要经常打交道的配置文件,此类型文件设置的值会默认覆盖xx-default.xml中配置的默认值。
3.3.1 配置文件的优先级
主节点上的 hdfs-site.xml 与 yarn-site.xml、hdfs-default.xml、yarn-default.xml 并不是唯一可以配置HDFS与 YARN的方法,假设已经在hdfs-site.xml文件中将:dfs.replication参数设置值为3,即设置文件副本个数为6。如果在客户端的代码中配置了此参数的值为6。实际上文件上传后文件副本个数为3,在Hadoop中配置文件参数的优先级从大到小如下:
如果有时候并不希望客户端修改配置的参数值,即让上图中优先级为4
: 服务器自定义配置文件参数值优先级最高,例如我们设置文件副本个数为3,客户端不可修改。只需要在hdfs-site.xml中这样配置:
<property>
<name>fs.replication</name>
<value>3</value>
<final>true</final>
</property>
如果在生产开发中,遇到了有些参数客户端不可修改的需求时,这个时候就可以将参数标记为final即可。
3.3.2 配置Hadoop守护进程环境变量
hadoop中默认为我们设置了 hadoop-env.sh、mapred-env.sh、yarn-env.sh,可以使用如下参数配置每个hadoop守护程序:
参数 | 说明 |
YARN_RESOURCEMANAGER_OPS | 设置ResourceManager JVM变量值 |
YARN_NODEMANAGER_OPS | 设置NodeManagerJVM变量值 |
HADOOP_NAMENODE_OPS | 设置NameNode JVM变量值 |
HADOOP_DATANODE_OPS | 设置DataNode JVM变量值 |
HADOOP_SECONDARYNAMENODE_OPS | 设置SecondaryNameNodeJVM变量值 |
例如设置上述每一个守护进程最大堆内存大小为2g: |
YARN_RESOURCEMANAGER_OPS = Xmx2g
YARN_NODEMANAGER_OPS = Xm2g
HADOOP_NAMENODE_OPS = Xmx2g
HADOOP_DATANODE_OPS = Xmx2g
HADOOP_SECONDARYNAMENODE_OPS = Xmx2
3.3.3 配置Hadoop核心属性(core-site.xml)
- fs.defaultFS
设置文件系统的名称以及NameNode所在主机和端口信息:
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop104:8020</value>
</property>
- hadoop.http.staticuser.user
设置操作hdfs为用户为hdfs:
<property>
<name>hadoop.http.staticuser.user</name>
<value>hdfs</value>
</property>
- hadoop.tmp.dir
设置hadoop本地数据存储目录:
<property>
<name>hadoop.tmp.dir</name>
<value>/soft/data/hadoop/tmpDir</value>
</property>
- fs.trash.interval
设置Hadoop文件存储在垃圾箱中的时间,默认值为0,即永久删除被删除的所有文件库,这里我们默认设置1440分钟(1天)
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
3.3.4 配置Mapreduce(mapred-site.xml)
- mapreduce.framework.name
设置hadoop使用YARN作为执行MapReduce的框架。
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
- yarn.app.mapreduce.am.env
指定mapruce APP MASTER 环境变量
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
- mapreduce.map.env
指定mapreduce Reuce Task 环境变量
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
- mapreduce.reduce.env
指定mapreduce Reuce Task 环境变量
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
3.3.5 配置Yarn(yarn-site.xml)
- yarn.nodemanager.aux-services
此属性可以让NodeManager指定MapReduce容器从map任务到reduce任务所需要执行的shuffle操作,只有设置了这个值才可以运行MapReduce任务。
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
- yarn.nodemanager.aux-services.mapreduce_shuffle.class
设置YARN使用这个设置值对应的类执行shuffle操作
<property>
<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
- yarn.nodemanager.resource.memory-mb
设置YARN在每一个节点消耗的总内存值单位MB
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
- yarn.scheduler.minimum-allocation-mb
设置每一个启动的容器节点最小内存单位MB
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
- yarn.scheduler.maximum-allocation-mb
设置每一个启动容器最大的内存单位MB
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>1024</value>
</property>
- yarn.nodemanager.vmem-pmem-ratio
设置容器虚拟内存与真实物理内存直接比率
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2</value>
</property>
3.3.6 配置HDFS(hdfs-site.xml)
- dfs.namenode.secondary.http-address
设置SecondaryNameNode运行主机和端口
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
- dfs.replication
此参数配置默认的文件块数量为3,但我们这里搭建伪分布式所以需要设置为1
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
- dfs.datanode.data.dir
设置DataNode数据快本地存储目录
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/soft/data/hadoop/hdfs/dn</value>
</property>
- dfs.namenode.name.dir
设置NameNode核心文件如fsimage如edit日志文件存储位置,只有NameNode服务可以读取和写入这些文件。
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/soft/data/hadoop/hdfs/nn</value>
</property>
- dfs.namenode.checkpoint.dir
指定SecondaryNameNode存储元数据文件位置
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:/soft/data/hadoop/hdfs/snn</value>
</property>
4. 操作集群
上面的配置文件配置好了,接下来就是来启动集群了,不过在正常启动集群前还需要进一步操作
4.1 格式化集群
使用hdfs用户执行NameNode格式化,需要注意的是NameNode的格式化只需要做一次就够了。
[hdfs@hadoop104 hadoop]$ hdfs namenode -format
执行完后如果有下图 successfully format 字样,则表明格式化成功
可以看到在 /soft/data/hadoop/hdfs/nn 目录下已经有格式化好的current文件夹如下所示:
4.2 启动HDFS与YARN集群
- 启动NameNode
hdfs --daemon start namenode
- 启动DataNode
hdfs --daemon start secondarynamenode
- 启动SecondaryNameNode
hdfs --daemon start secondarynamenode
- 启动ResourceManager
yarn --daemon start resourcemanager
- 启动NodeManager
yarn --daemon start nodemanager
查看进程:
访问HDFS管理端地址:http://192.168.10.128:9870/管理端首页如下:
访问 Yarn管理端地址:http://192.168.10.128:8088/cluster
4.3 关闭HDFS与YARN集群
- 启动NameNode
hdfs --daemon stop namenode
- 启动DataNode
hdfs --daemon stop secondarynamenode
- 启动SecondaryNameNode
hdfs --daemon stop secondarynamenode
- 启动ResourceManager
yarn --daemon stop resourcemanager
- 启动NodeManager
yarn --daemon stop nodemanager
5. 伪分布式集群虚拟机环境
链接:https://pan.baidu.com/s/1MdUQp96yiR9EnFknhGekKQ?pwd=id4n
提取码:id4n
总结
本文中我们使用一台机器完成了Hadoop的伪分布式集群部署,在实际的生成活动中,此种模式只能用于开发人员进行测试使用,下一章将介绍如何搭建一个Hadoop的完全分布式集群,敬请期待。