文档使用的版本为Apache Hadoop 3.1.3,其他版本也基本上是一致的。文档提供的是一个简单的学习测试用集群,生产中的配置如高可用、通讯加密、权限控制等会在其他文档提供。

前期准备

操作系统支持

支持所有GNU/Linux操作系统用于开发或生产,也支持Windows(不推荐)。本文使用的操作系统为CentOS 7.3。

软件要求

  • Java

    Apache Hadoop 3 要求 Java 8以上,本文使用的是 jdk1.8.0_102。 详情可见Hadoop Java Versions

  • ssh

    配置主机列表

    节点设置hostname命令:

    1. hostnamectl set-hostname node1

    所有节点配置主机列表

    vim /etc/hosts
    

    将集群所有节点的ip和对应hostname填入文件内

    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.43.211 node1
    192.168.43.17 node2
    192.168.43.136 node3
    

    配置时间同步

    使用NTP服务保证所有服务器的时间是同步的
    语雀内容

    配置服务器间相互免密ssh

语雀内容

关闭服务器间防火墙

systemctl stop firewalld
systemctl disable firewalld

下载

从就近的镜像 Apache Download Mirror或者完整的存档Apache Hadoop Archive下载Hadoop。
文档直接使用binary版本。
将下载好的介质传入其中一台服务器,解压到自己指定的目录下

tar zxvf hadoop-3.1.3.tar.gz -C /opt/
cd /opt/hadoop-3.1.3

修改配置文件

这里只说明一些简单的,让集群可以启动的配置。配置文件存放在Hadoop home目录的etc/hadoop/下。
通常我们会为Hadoop配置环境变量
所有节点vi /etc/profile
添加以下内容

export HADOOP_HOME=/opt/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin

编辑hadoop-env.sh文件

#导入Java home目录
export JAVA_HOME=/usr/java/jdk1.8.0_102
#添加root用户作为shell命令使用用户。如果没有这些配置,我们无法在root用户下使用快捷的集群管理脚本。
#在生产环境中,往往会建立并使用不同的用户操作不同组件。
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

编辑core-site.xml文件

<!-- Put site-specific property overrides in this file. -->
<!-- fs.defaultFS填入主节点的hostname-->
<configuration>

<property>
  <name>fs.defaultFS</name>
  <value>hdfs://node1:9000</value>
</property>

<property>
  <name>io.file.buffer.size</name>
  <value>131072</value>
</property>

</configuration>

编辑yarn-site.xml

<!-- Put site-specific property overrides in this file. -->

<configuration>

<property>
  <name>yarn.resourcemanager.hostname</name>
  <value>node1</value>
</property>

</configuration>

编辑workers文件,添加工作节点,集群的一键启动脚本会在写入此文件的节点上启动DataNode和NodeManager。

node2
node3

到这里其实已经完成了集群可启动的配置,但默认的NameNode和DataNode数据将保存在/tmp目录下,有很大的丢失风险。我们可以建立一组目录来存放HDFS的文件。在生产中,此目录应挂载专用的数据盘。
所有节点创建目录:

mkdir -p /opt/dfs/tmp
mkdir -p /opt/dfs/data
mkdir -p /opt/dfs/name

core-site.xml添加配置:

<property>
  <name>hadoop.tmp.dir</name>
  <value>/opt/dfs/tmp</value>
</property>

编辑hdfs-site.xml文件

<!-- Put site-specific property overrides in this file. -->
<configuration>

<property>
  <name>dfs.namenode.name.dir</name>
  <value>file:///opt/dfs/name</value>
  <description>Determines where on the local filesystem the DFS name node
      should store the name table(fsimage).  If this is a comma-delimited list
      of directories then the name table is replicated in all of the
      directories, for redundancy. </description>
</property>

<property>
  <name>dfs.datanode.data.dir</name>
  <value>file:///opt/dfs/data</value>
  <description>Determines where on the local filesystem an DFS data node
  should store its blocks.  If this is a comma-delimited
  list of directories, then data will be stored in all named
  directories, typically on different devices. The directories should be tagged
  with corresponding storage types ([SSD]/[DISK]/[ARCHIVE]/[RAM_DISK]) for HDFS
  storage policies. The default storage type will be DISK if the directory does
  not have a storage type tagged explicitly. Directories that do not exist will
  be created if local filesystem permission allows.
  </description>
</property>

</configuration>

分发Hadoop文件

保存好编辑的配置文件,将整个Hadoop文件夹分发到其他节点上,最好让各个节点Hadoop目录位置保持一致。你也可以在一开始为所有节点分发Hadoop,然后将编辑好的配置文件进行分发。

scp -r /opt/hadoop-3.1.3 root@node2:/opt/

集群启动与关闭

集群启动

集群首次启动需要格式化NameNode

$HADOOP_HOME/bin/hdfs namenode -format

启动NameNode,在自己指定的节点上输入指令:

$HADOOP_HOME/bin/hdfs --daemon start namenode

启动DataNode,在自己指定的节点上输入指令:

$HADOOP_HOME/bin/hdfs --daemon start datanode

一键启动HDFS进程,workers文件中的节点上会启动DataNode进程

$HADOOP_HOME/sbin/start-dfs.sh

启动ResourceManager,在自己指定的节点上输入指令:

$HADOOP_HOME/bin/yarn --daemon start resourcemanager

启动NodeManager,在自己指定的节点上输入指令:

$HADOOP_HOME/bin/yarn --daemon start nodemanager

一键启动YARN进程,workers文件中的节点上会启动NodeManager进程

$HADOOP_HOME/sbin/start-yarn.sh

启动Jobhistory,在自己指定的节点上输入指令:

$HADOOP_HOME/bin/mapred --daemon start historyserver

集群关闭

集群关闭的命令和启动类似
关闭NameNode,在自己指定的节点上输入指令:

$HADOOP_HOME/bin/hdfs --daemon stop namenode

关闭DataNode,在自己指定的节点上输入指令:

$HADOOP_HOME/bin/hdfs --daemon stop datanode

一键关闭HDFS进程

$HADOOP_HOME/sbin/stop-dfs.sh

关闭ResourceManager,在自己指定的节点上输入指令:

$HADOOP_HOME/bin/yarn --daemon start resourcemanager

关闭NodeManager,在自己指定的节点上输入指令:

$HADOOP_HOME/bin/yarn --daemon start nodemanager

一键关闭YARN进程

$HADOOP_HOME/sbin/start-yarn.sh

关闭Jobhistory,在自己指定的节点上输入指令:

$HADOOP_HOME/bin/mapred --daemon start historyserver

Web UI 默认端口

在浏览器输入 http://hostname:port/可以浏览组件的Web UI

进程 默认端口
NameNode 9870
ResourceManager 8088
MapReduce JobHistory Server 19888

附件

附上Hadoop 3.1.3的默认配置文件
core-default.xml
hdfs-default.xml
yarn-default.xml
mapred-default.xml

Reference

https://hadoop.apache.org/docs/r3.1.3/hadoop-project-dist/hadoop-common/ClusterSetup.html