前置课程(★★★★★)

CentOS集群搭建

软件版本:

  • CentOS 7
  • Hadoop 3.1.2

集群部署规划

主机名称

hcmaster

hcslave1

hcslave2

IP地址

172.16.85.140

172.16.85.141

172.16.85.142

角色

master

slave

slave

host

xmaster

xslave1

xslave2

NameNode


SecondaryNameNode


DataNode




NodeManager




ResourceManager


HistoryServer


说明:考虑到NameNode、SecondaryNameNode、ResourceManager消耗的资源比较磊,所以将它们分别部署到三台机子上

准备工作

root用户登录,在三台虚拟机上都做以下操作:

安装JDK

由于Hadoop 的编译及MapReduce的运行都需要使用JDK,所以需要在集群中的每一台机器上提前安装好能够满足Hadoop 最低版本要求的JDK。

关闭防火墙

为避免由于防火墙策略导致安装失败问题,需要先关闭防火墙,命令:

systemctl stop firewalld.service

关闭SELinux:修改/etc/selinux/config 文件

因为CentOS的所有访问权限都是有SELinux来管理的,为了避免安装过程中由于权限关系而导致的失败,需要先将其关闭,以后根据需要再进行重新管理。

hadoop集群中配置了三个datanode节点但是页面中Live Nodes只有一个显示_Hadoop3.1.2

以root账户登录,创建hc/hc用户

由于Hadoop 集群中的各节点默认会使用当前的账号SSH免密码登录其它节点,所以需要在每个节点中创建一个相同的供 Hadoop 集群专用的账户。

hadoop集群中配置了三个datanode节点但是页面中Live Nodes只有一个显示_hadoop_02

编辑/etc/sudoers

hadoop集群中配置了三个datanode节点但是页面中Live Nodes只有一个显示_Hadoop集群搭建_03

安装配置Hadoop

准备工作

在hcmaster上,将下载下来的Hadoop压缩包解压到/usr/local目录,并修改文件的拥有者为hc。

hadoop集群中配置了三个datanode节点但是页面中Live Nodes只有一个显示_完全分布式安装_04


在/usr/local/hadoop3.1.2目录下创建logs文件夹,并修改拥有者为hc。

hadoop集群中配置了三个datanode节点但是页面中Live Nodes只有一个显示_完全分布式安装_05

修改配置

一般情况下,我们只需要修改下图标示的几个文件即可:

编辑core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
      <name>fs.defaultFS</name>
      <value>hdfs://hcmaster:8020</value>
  </property>
  <property>
  	<name>hadoop.tmp.dir</name>
  	<value>/usr/local/hadoop3.1.2/data/tmp/</value>
  </property>
  <property>
    <name>hadoop.proxyuser.hc.hosts</name>
    <value>*</value>
  </property>
  <property>
      <name>hadoop.proxyuser.hc.groups</name>
      <value>*</value>
  </property>
</configuration>

说明:

  • fs.defaultFS:用来指定NameNode 的hdfs协议的文件系统通信地址,可以指定一个主机+端口,也可以指定为一个NameNode 服务(这个服务内部可以有多台NameNode 实现ha的NameNode 服务。
  • hadoop.tmp.dir:hadoop集群在工作的时候存储的一些临时文件的目录。
    /data/tmp目录需要自己创建;tmp目录不用自己创建,Hadoop启动起来后会自己创建;Hadoop启动起来后会在tmp下面创建data和name子目录

编辑hadoop-env.sh

export JAVA_HOME=/usr/local/jdk1.8.0_181/

编辑hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>/usr/local/hadoop3.1.2/data/tmp/dfs/name</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>/usr/local/hadoop3.1.2/data/tmp/dfs/data</value>
  </property>
  <property>
  	<name>dfs.replication</name>
  	<value>3</value>
  </property>
  <property> 
    <name>dfs.namenode.secondary.http-address</name>
    <value>hcslave2:50090</value>
  </property>
</configuration>

说明:

  • dfs.NameNode .name.dir:NameNode 数据的存放地点。也就是NameNode 元数据存放的地方,记录了hdfs系统中文件的元数据。可以同时指定多个name节点,这多个节点中的内容是一样的
  • dfs.DataNode .data.dir:DataNode 数据的存放地点。也就是block块存放的目录了。
  • dfs.replication:hdfs的副本数设置。也就是上传一个文件,其分割为block块后,每个block的冗余副本个数,默认配置是3。
  • dfs.secondary.http.address:secondaryNameNode 运行节点的信息,和NameNode 不同节点
    不管是dfs.NameNode .name.dir还是dfs.DataNode .data.dir都可以配置多个目录,比如:

编辑yarn-site.xml

<?xml version="1.0"?>
<configuration>
  <property>
   		<name>yarn.nodemanager.aux-services</name>
   		<value>mapreduce_shuffle</value>
  </property>
  <property>
      <name>yarn.resourcemanager.hostname</name>
      <value>hcslave1</value>
  </property>
  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>
  <property>
      <name>yarn.log-aggregation.retain-seconds</name>
      <value>604800</value>
  </property>
  <property>
    <name>yarn.resoucemanager.webapp.address</name>
    <value>hcslave1:8080</value>
  </property>
    <property>
        <name>yarn.application.classpath</name>
<value>/usr/local/hadoop3.1.2/etc/hadoop:/usr/local/hadoop3.1.2/share/hadoop/common/lib/*:/usr/local/hadoop3.1.2/share/hadoop/common/*:/usr/local/hadoop3.1.2/share/hadoop/hdfs:/usr/local/hadoop3.1.2/share/hadoop/hdfs/lib/*:/usr/local/hadoop3.1.2/share/hadoop/hdfs/*:/usr/local/hadoop3.1.2/share/hadoop/mapreduce/lib/*:/usr/local/hadoop3.1.2/share/hadoop/mapreduce/*:/usr/local/hadoop3.1.2/share/hadoop/yarn:/usr/local/hadoop3.1.2/share/hadoop/yarn/lib/*:/usr/local/hadoop3.1.2/share/hadoop/yarn/*</value>
    </property>
    
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>22528</value>
    </property>
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>1500</value>
    </property>
    <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>16384</value>
    </property>
    
</configuration>
说明:
  • yarn.resourcemanager.hostname:yarn总管理器的IPC通讯地址
  • yarn.nodemanager.aux-services:YARN 集群为 MapReduce 程序提供的服务(常指定为 shuffle )
    下面两条是和日志聚集相关配置
  • yarn.log-aggregation-enable:是否启用日志聚集功能。
  • yarn.log-aggregation.retain-seconds:设置日志保留时间,单位是秒。

编辑mapred-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
  		<name>mapreduce.framework.name</name>
  		<value>yarn</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>hcslave2:10020</value>
  </property>
  <property>
      <name>mapreduce.jobhistory.webapp.address</name>
      <value>hcslave2:19888</value>
  </property>
  
    <property>
        <name>mapreduce.map.memory.mb</name>
        <value>1500</value>
    </property>
    <property>
        <name>mapreduce.reduce.memory.mb</name>
        <value>3000</value>
    </property>
    <property>
        <name>mapreduce.map.java.opts</name>
        <value>-Xmx1200m</value>
    </property>
    <property>
        <name>mapreduce.reduce.java.opts</name>
        <value>-Xmx2600m</value>
    </property>
</configuration>

说明:

  • mapreduce.framework.name:指定MapReduce在的资源调度框架yarn上运行 。

下面两条是和历史服务器相关的配置:

  • mapreduce.jobhistory.address
  • mapreduce.jobhistory.webapp.address

编辑works

把原本的localhost删掉,增加如下内容所示的数据结点:

hcmaster
hcslave1
hcslave2

当服务器启动的时候,会向这些结点发送启动数据结点的命令。

编辑/etc/profile

将Hadoop的环境变量添加到profile中

export HADOOP_HOME=/usr/local/hadoop3.1.2
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

分发

分发Hadoop

切换到root用户,在hcmaster上执行xsync.sh /usr/local/hadoop3.1.2将hcmaster上配置好的Hadoop文件发送到其它两台虚拟机。

hadoop集群中配置了三个datanode节点但是页面中Live Nodes只有一个显示_完全分布式安装_06


分别修改hcslave1和hcslave2上的hadoop3.1.2的拥有者为hc。

分发/etc/profile文件

命令:xsync.sh /etc/profile

格式化NameNode

在hcmaster虚拟机上格式化NameNode。
第一次启动HDFS需要先进行格式化以创建一个新分布式文件系统,然后才能正常启动NameNode 服务。

命令:./bin/hdfs namenode -format

hadoop集群中配置了三个datanode节点但是页面中Live Nodes只有一个显示_Hadoop集群搭建_07


格式化成功后,可以在看到在/ /usr/local/hadoop3.1.2/data/tmp/dfs/data/目录多了一个current目录,而且该目录内有一系列文件

注意:格式化文件系统时只需要在master上做一次就行了。

启动Hadoop

切换成hc用户

在hcmaster启动dfs

hadoop集群中配置了三个datanode节点但是页面中Live Nodes只有一个显示_Hadoop3.1.2_08

在hcslave1启动yarn

因为ResourceManager节点在hcsalve1上,所以yarn必须在hcslave1上启动,在其它节点上启动会报错。

hadoop集群中配置了三个datanode节点但是页面中Live Nodes只有一个显示_hadoop_09

在hcslave2启动history server

hadoop集群中配置了三个datanode节点但是页面中Live Nodes只有一个显示_CentOS7 _10

验证集群环境

  1. 查看HDFS Web页面 http://hcmaster:9870/explorer.html#/ (HDFS管理界面)
  2. 查看YARN Web 页面http://hcslave1:8088/cluster (MR管理界面)