Hadoop3 - 集群搭建
Posted 小毕超
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop3 - 集群搭建相关的知识,希望对你有一定的参考价值。
一、Hadoop
上篇文章对 Hadoop
进行了简单的介绍,并搭建了单机版的 HDFS
,本篇文章继续搭建集群版本的 HDFS
以及 YARN
,下面是上篇文章地址:
Hadoop
集群具体来说包含两个集群:HDFS
集群和YARN
集群,两者逻辑上分离,但物理上常在一起。
HDFS集群负责海量数据的存储,集群中的角色主要有:NameNode、DataNode、SecondaryNameNode
YARN集群负责海量数据运算时的资源调度,集群中的角色主要有:ResourceManager、NodeManager
下面准备在三台服务器上安装 HDFS
集群和YARN
集群,安装架构:
主机 | 规划设置主机名 | 角色 |
---|---|---|
192.168.40.172 | node1 | NameNode、DataNode、ResourceManager、NodeManager |
192.168.40.173 | node2 | SecondaryNameNode、DataNode、NodeManager |
192.168.40.174 | node3 | DataNode、NodeManager |
三台主机需具备 Java 环境。
二、集群安装
1. 环境准备
- 修改 /etc/hosts 增加映射
vi /etc/hosts
192.168.40.172 node1
192.168.40.173 node2
192.168.40.174 node3
- 关闭防火墙
#关闭防火墙
systemctl stop firewalld.service
#禁止防火墙开启自启
systemctl disable firewalld.service
- ssh免密登录(node1执行 -> node1|node2|node3)
#4个回车 生成公钥、私钥
ssh-keygen
# 将公钥给三台主机
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3
- 集群时间同步(3台机器)
yum -y install ntpdate
ntpdate ntp4.aliyun.com
- 创建统一工作目录(3台机器)
mkdir -p /export/server/,/export/data/,/export/software/
- 下载官方安装包,这里我使用的为
3.1.4
版本,将下载好的安装包,先上传至node1
服务器上/export/server/
下,修改完配置后再同步到另两台机器中:
2. 集群配置修改
- 进入到
/export/server/hadoop-3.1.4/etc/hadoop/
下,此处存放的为hadoop
的配置文件,修改hadoop-env.sh
:
文件中设置的是Hadoop
运行时需要的环境变量。JAVA_HOME
是必须设置的,即使我们当前的系统中设置了JAVA_HOME
,它也是不认识的,因为Hadoop
即使是在本机上执行,它也是把当前的执行环境当成远程服务器。
vi hadoop-env.sh
# The java implementation to use.
export JAVA_HOME=/usr/lib/jvm/java-1.8.0
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
- 修改
core-site.xml
hadoop
的核心配置文件,有默认的配置项 core-default.xml
。
core-default.xml
与core-site.xml
的功能是一样的,如果在core-site.xml
里没有配置的属性,则会自动会获取core-default.xml
里的相同属性的值。
vi core-site.xml
<!-- 默认文件系统的名称。通过URI中schema区分不同文件系统。-->
<!-- file:///本地文件系统 hdfs:// hadoop分布式文件系统 gfs://。-->
<!-- hdfs文件系统访问地址:http://nn_host:8020。-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:8020</value>
</property>
<!-- hadoop本地数据存储目录 format时自动生成 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/export/data/hadoop-3.1.4</value>
</property>
<!-- 在Web UI访问HDFS使用的用户名。-->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
- 修改
hdfs-site.xml
HDFS
的核心配置文件,主要配置HDFS
相关参数,有默认的配置项hdfs-default.xml
。
hdfs-default.xml
与hdfs-site.xml
的功能是一样的,如果在hdfs-site.xml
里没有配置的属性,则会自动会获取hdfs-default.xml
里的相同属性的值。
vi hdfs-site.xml
<!-- 设定SNN运行主机和端口。-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node2:9868</value>
</property>
- 修改
mapred-site.xml
MapReduce
的核心配置文件,Hadoop
默认只有个模板文件mapred-site.xml.template
,需要使用该文件复制出来一份mapred-site.xml
文件
vi mapred-site.xml
<!-- mr程序默认运行方式。yarn集群模式 local本地模式-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- MR App Master环境变量。-->
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<!-- MR MapTask环境变量。-->
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<!-- MR ReduceTask环境变量。-->
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
- 修改
yarn-site.xml
我三台主机用的虚拟机,没有多大内存,如果资源充足可相应填大一些:
YARN
的核心配置文件
vi yarn-site.xml
<!-- yarn集群主角色RM运行机器。-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node1</value>
</property>
<!-- NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MR程序。-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 每个容器请求的最小内存资源(以MB为单位)。-->
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
<!-- 每个容器请求的最大内存资源(以MB为单位)。-->
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
</property>
<!-- 容器虚拟内存与物理内存之间的比率。-->
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>4</value>
</property>
- 修改
workers
workers
文件里面记录的是集群主机名。一般有以下两种作用:
- 配合一键启动脚本如
start-dfs.sh
、stop-yarn.sh
用来进行集群启动。这时候slaves
文件里面的主机标记的就是从节点角色所在的机器。 - 可以配合
hdfs-site.xml
里面dfs.hosts
属性形成一种白名单机制。
dfs.hosts
指定一个文件,其中包含允许连接到NameNode
的主机列表。必须指定文件的完整路径名,那么所有在workers
中的主机才可以加入的集群中。如果值为空,则允许所有主机。
vi workers
node1
node2
node3
- 将修改后的安装包,上传至 node2、node3 主机:
cd /export/server/
scp -r hadoop-3.1.4 root@node2:/export/server/
scp -r hadoop-3.1.4 root@node3:/export/server/
- 添加 Hadoop 的环境变量,修改
/etc/profile
vim /etc/profile
export HADOOP_HOME=/export/server/hadoop-3.1.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
- 将修改后的环境变量同步至 node2,node3 主机
scp /etc/profile root@node2:/etc/
scp /etc/profile root@node3:/etc/
- 重新加载环境变量(3台机器都需要操作)
source /etc/profile
- 验证环境是否生效:
hadoop version
3. 集群安装
- 格式化 NameNode,首次启动HDFS时,必须对其进行格式化操作。本质上是一些清理和准备工作,因为此时的HDFS在物理上还是不存在的。
hdfs namenode -format
注意点:
- 首次启动之前需要format操作
- format只能进行一次 后续不再需要
- 如果多次format除了造成数据丢失外
- 还会导致hdfs集群主从角色之间互不识别
- 通过删除所有机器hadoop.tmp.dir目录重新forma解决
出现下面日志则格式化成功:
4. 集群启动
集群启动有两种方式,一种是在每台主机中启动相应的组件,另一种 hadoop 为我们提供了一键启停脚本,前提是配置好机器之间的SSH免密登录和workers文件。
在每台主机上单独启动组件
启动为 start ,停止为 stop:
- node1 节点启动:
hdfs --daemon start namenode
hdfs --daemon start datanode
yarn --daemon start resourcemanager
yarn --daemon start nodemanager
- node2 节点启动:
hdfs --daemon start secondarynamenode
hdfs --daemon start datanode
yarn --daemon start nodemanager
- node3 节点启动:
hdfs --daemon start datanode
yarn --daemon start nodemanager
通过脚本一键启动
- HDFS集群
# 启动
start-dfs.sh
# 关闭
stop-dfs.sh
- YARN集群
# 启动
start-yarn.sh
# 关闭
stop-yarn.sh
- Hadoop集群,启停 HDFS 和 YARN
# 启动
start-all.sh
# 关闭
stop-all.sh
5. 可视化页面验证集群是否安装成功
- HDFS UI页面
访问地址:http://192.168.40.172:9870
- YARN集群 UI页面
访问地址:http://192.168.40.172:8088
三、测试
- 测试上传文件:
创建一个 txt 文件,将其上传至 HDFS 中:
echo "hello" > a.txt
上传 a.txt
hadoop fs -put a.txt /bxc
web 页面查看是否上传成功:
- 运行
mapreduce
程序
在Hadoop
安装包的share/hadoop/mapreduce
下有官方自带的mapreduce
程序。我们可以使用如下的命令进行运行测试。(示例程序jar:hadoop-mapreduce-examples-3.1.4.jar
计算圆周率)
yarn jar /export/server/hadoop-3.1.4/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.4.jar pi 2 50
以上是关于Hadoop3 - 集群搭建的主要内容,如果未能解决你的问题,请参考以下文章