赞
踩
上篇文章对 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 环境。
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
#4个回车 生成公钥、私钥
ssh-keygen
# 将公钥给三台主机
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3
yum -y install ntpdate
ntpdate ntp4.aliyun.com
mkdir -p {/export/server/,/export/data/,/export/software/}
3.1.4
版本,将下载好的安装包,先上传至 node1
服务器上 /export/server/
下,修改完配置后再同步到另两台机器中:/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
cd /export/server/
scp -r hadoop-3.1.4 root@node2:/export/server/
scp -r hadoop-3.1.4 root@node3:/export/server/
/etc/profile
vim /etc/profile
export HADOOP_HOME=/export/server/hadoop-3.1.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
scp /etc/profile root@node2:/etc/
scp /etc/profile root@node3:/etc/
source /etc/profile
hadoop version
hdfs namenode -format
注意点:
出现下面日志则格式化成功:
集群启动有两种方式,一种是在每台主机中启动相应的组件,另一种 hadoop 为我们提供了一键启停脚本,前提是配置好机器之间的SSH免密登录和workers文件。
启动为 start ,停止为 stop:
hdfs --daemon start namenode
hdfs --daemon start datanode
yarn --daemon start resourcemanager
yarn --daemon start nodemanager
hdfs --daemon start secondarynamenode
hdfs --daemon start datanode
yarn --daemon start nodemanager
hdfs --daemon start datanode
yarn --daemon start nodemanager
# 启动
start-dfs.sh
# 关闭
stop-dfs.sh
# 启动
start-yarn.sh
# 关闭
stop-yarn.sh
# 启动
start-all.sh
# 关闭
stop-all.sh
访问地址:http://192.168.40.172:9870
访问地址: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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。