文档使用的版本为Apache Hadoop 3.1.3,其他版本也基本上是一致的。文档提供的是一个简单的学习测试用集群,生产中的配置如高可用、通讯加密、权限控制等会在其他文档提供。
前期准备
操作系统支持
支持所有GNU/Linux操作系统用于开发或生产,也支持Windows(不推荐)。本文使用的操作系统为CentOS 7.3。
软件要求
Java
Apache Hadoop 3 要求 Java 8以上,本文使用的是 jdk1.8.0_102。 详情可见Hadoop Java Versions。
-
配置主机列表
节点设置hostname命令:
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