1. 实验简介

Hadoop是典型的分布式系统,原则上需要在至少3个节点构成集群上进行安装完全分布式系统。但是,出于学习的目的,在资源受限的情况下,可以有简化的安装模式,比如由单个节点构成的伪分布式安装(仍然通过网络进行节点访问,但是访问的IP地址:127.0.0.1就是本机地址)。

1.1 实验目的

  • 了解Hadoop集群的搭建及配置过程


1.2实验原理

HDFS是Hadoop的核心子项目,为Hadoop提供了一个综合性的文件系统抽象,并实现了多类文件系统的接口,HDFS基于流式数据访问、存储和处理超大文件,并运行于商用硬件服务器上。

HDFS采用了典型的Master/Slave架构,一个HDFS集群通常包含一个NameNode和若干个DataNode。一个文件被分成了一个或者多个数据块,并存储在一组DataNode上,DataNode可分布在不同的机架上。NameNode执行文件系统的全名空间打开或关闭、重命名文件或目录等操作,同时负责管理数据块到具体DataNode的映射。在NameNode的统一调度下,DataNode负责处理文件系统客户端的读/写请求,完成数据块的创建、删除和复制。


2. 所需软件及相应版本

(1) Java

虽然现在Java的长期支持版本(Long Term Support,LTS)有8、11、17三个,但是当前各大数据软件如Hadoop等,仍然停留在Java 8上,所以本次选用Java 8


(2) Hadoop

Hadoop 2.x相对于1.x版本变化巨大,但是Hadoop 3.x引入的新特性不多,本实验选用2.10.1版本。


3. 安装前的准备工作


3.1 Linux基础系统安装

本文将不会详细介绍如何安装Linux操作系统,详细原文点击下方阅读学习

-> 说走就走的Linux之旅,一小时打造虚拟机上的Anolis系统! 


3.2 Java(JDK安装)

在完成Linux(Anolis Linux)基础系统安装并配置好网络以后,JDK可以使用如下命令(具备sudo权限的用户),一键安装:

sudo yum  install  java-1.8.0-openjdk 

sudo  yum  install  java-1.8.0-openjdk-devel  

安装完成以后,可以通过如下命令,检查java(jdk)是否安装成功

java  -version

javac  -version

如图1所示,如果显示出java/javac的版本号,说明已经安装成功。

零基础也能学会!Hadoop伪分布式集群安装与配置实践_Hadoop

图 1. 检查java(JDK)是否安装成功

3.3 添加操作Hadoop系统的用户

一般设置一个专用的用户,操作Hadoop系统(含安装、配置,提交计算任务等),一般给该用户配置sudo权限,便于配置过程中执行一些高权限的操作。以下设置该用户名为hadoop

操作命令如下:

sudo  useradd  -s  /bin/bash  -m  hadoop

sudo  passwd   hadoop

sudo  usermod  -aG  wheel  hadoop

按照提示输入即可(注意虽然密码长度不足8位,会出现警告,但是仍然可以设置)

整个过程如图2所示

零基础也能学会!Hadoop伪分布式集群安装与配置实践_伪分布式_02

图2 添加Hadoop用户并设置密码、sudo权限

注意:当我们创建了一个hadoop用户,我们接下来的所有操作都在在hadoop这个用户下进行操作,所以先要进行切换用户,否者在后面的安装过程中会出现操作的权限不够的情况。

3.4 生成ssh密钥、配置SSH免密登录

无论单节点的伪分布式部署,还是3节点的完全分布式部署,均需要配置SSH免密登录。

配置SSH免密登录,需要如下两步:

(1) 生成当前用户的密钥

使用命令如下:

ssh-keygen  -t rsa  

然后按照提示输入即可

零基础也能学会!Hadoop伪分布式集群安装与配置实践_Hadoop_03

(2) 将生成的公钥安装到目标服务器上

使用命令如下:

ssh-copy-id  用户名@目标服务器的IP,按照提示输入密码等

例如,安装到本机当前用户(hadoop)

ssh-copy-id  hadoop@localhost 

如图4所示,其中红色框中的“yes”是手工输入的,然后回车。

零基础也能学会!Hadoop伪分布式集群安装与配置实践_HDFS_04

图4 向目标服务器安装SSH密钥

3.5 安装wget工具(Linux系统下的下载工具)

输入命令:

sudo  yum  install   wget

零基础也能学会!Hadoop伪分布式集群安装与配置实践_伪分布式_05

图 5  安装wget工具


4. Hadoop伪分布式安装

4.1 下载安装包

Hadoop国外服务器来下载太慢了,本文选用从国内清华镜像站

在命令行下输入如下命令

wget  https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.10.1/hadoop-2.10.1.tar.gz

零基础也能学会!Hadoop伪分布式集群安装与配置实践_伪分布式_06

图 6  下载安装文件

4.2 解压文件并放置到适当的位置

一般将用户自己安装的程序放在/usr/local/目录下,为了便于管理,我们统一创建/usr/local/bda/目录,并将此目录(及其子目录)的所有者改为hadoop

sudo  mkdir  /usr/local/bda

sudo  chown  -R  hadoop:hadoop  /usr/local/bda

cd  ~ # 切换回hadoop用户的home目录

tar  xzvf  hadoop-2.10.1.tar.gz   

如图7所示。

注意:如果提示找不到 tar 命令,则需要先安装,如下面命令所示:

sudo  yum  install  tar 

零基础也能学会!Hadoop伪分布式集群安装与配置实践_Hadoop_07

图 7  创建目录、解压安装文件

将解压后的文件夹移动到/usr/local/bda/目录下,并改名

mv  ~/hadoop-2.10.1  /usr/local/bda/hadoop 


4.3 配置Hadoop的配置文件

Hadoop 2.x主要由HDFS、yarn、MapReduce三部分组成,因此总共有5个文件需要进行配置,分别是:

  1.  hadoop-env.sh:Hadoop运行环境
  2.  core-site.xml:集群全局参数
  3.  hdfs-site.xml:HDFS的配置
  4.  yarn-site.xml:集群资源管理系统参数
  5. mapred-site.xml:MapReduce的参数

以下详细介绍。

需要说明的是:在执行完本节(4.3)的配置后,实际上完成的是整个Hadoop的配置(含MapReduce、YARN)而不仅仅是HDFS的配置。


4.3.1 建立Hadoop所需的目录

我们需要有一个思想就是Linux系统内的所有东西,皆文件的思想,那么我们部署hadoop系统,也是要建立相关目录文件,因为HDFS、MapReduce正常工作,需要一些专用的目录的辅助。因此在开始配置之前,需要建立相应的文件夹,如下

mkdir  /usr/local/bda/hadoop/tmp    

 mkdir  /usr/local/bda/hadoop/var

 mkdir  /usr/local/bda/hadoop/dfs

 mkdir  /usr/local/bda/hadoop/dfs/name

 mkdir  /usr/local/bda/hadoop/dfs/data

4.3.2 配置hadoop-env.sh

Hadoop系统环境,只需要配置一个环境变量:JAVA_HOME,也就是告诉Hadoop系统,java的安装位置,使用如下命令打开配置文件:

vim  /usr/local/bda/hadoop/etc/hadoop/hadoop-env.sh

进行如下修改,然后保存、退出。

零基础也能学会!Hadoop伪分布式集群安装与配置实践_Yarn_08

图 8  hadoop-env.sh文件的修改


4.3.3 配置core-site.xml

vim  /usr/local/bda/hadoop/etc/hadoop/core-site.xml

将如下内容添加到core-site.xml文件configure中:

<property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/bda/hadoop/tmp</value>
        <description>A base for other temporary directories.</description>
</property>
<property>
        <name>fs.default.name</name>
        <value>hdfs://localhost:9000</value>
</property>

说明:此处进行了两项配置,(1)配置了hadoop的临时目录;(2)配置了文件系统缺省的主机和端口。因为是伪分布式系统,所以此处的主机名是localhost

配置以后的core-site.xml文件,如下图所示:

零基础也能学会!Hadoop伪分布式集群安装与配置实践_Hadoop_09

图 9  core-site.xml文件的配置


4.3.4 配置hdfs-site.xml

vim  /usr/local/bda/hadoop/etc/hadoop/hdfs-site.xml

进行如下图的配置,各项的说明见下图中的红字,保存,退出

<configuration>
        <property>
                <name>dfs.name.dir </name>
                <value>/usr/local/bda/hadoop/dfs/name </value>
                <description>Path on the local filesystem where theNameNode stores the namespace and transactions logs persistently</description>
        </property>
        <property>
                <name>dfs.data.dir</name>
                <value>/usr/local/bda/hadoop/dfs/data</value>
                <description>Comma separated list of paths on the localfilesystem of a DataNode where it should store its blocks. </description>
        </property>
        <property>
                <name>dfs.replication </name>
                <value>1</value>
        </property>
</configuration>

零基础也能学会!Hadoop伪分布式集群安装与配置实践_HDFS_10

图 10  hdfs-site.xml文件的配置


4.3.5 配置mapred-site.xml

首先,将mapred-site.xml的配置模板文件mapred-site.xml.template复制一份,并命名为mapred-site.xml

零基础也能学会!Hadoop伪分布式集群安装与配置实践_伪分布式_11

然后用vim打开进行编辑

vim  /usr/local/bda/hadoop/etc/hadoop/mapred-site.xml

配置内容如下图所示,保存、退出

<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                 <value>yarn</value>
        </property>
        <property>
                 <name>mapreduce.application.classpath</name>
                <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>

        </property>
        <property>

                <name>mapred.local.dir</name>
                <value>/usr/local/bda/hadoop/var</value>
        </property>
</configuration>

零基础也能学会!Hadoop伪分布式集群安装与配置实践_Linux_12

图 11  mapred-site.xml文件的配置

4.3.6 配置yarn-site.xml

vim  /usr/local/bda/hadoop/etc/hadoop/yarn-site.xml

配置内容如下图所示,保存、退出

<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
</property>
<property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>
</property>
<property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>2048</value>
</property>
<property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
</property>

零基础也能学会!Hadoop伪分布式集群安装与配置实践_Hadoop_13

图 12  yarn-site.xml文件的配置

4.4 HDFS文件系统格式化及服务启动、关闭

4.4.1 HDFS文件系统格式化

如同其它的文件系统一样,HDFS在使用之前也要先进行格式化操作,使用如下的命令进行

/usr/local/bda/hadoop/bin/hdfs  namenode  -format

零基础也能学会!Hadoop伪分布式集群安装与配置实践_HDFS_14

图 13  执行HDFS格式化命令后的部分输出信息

如图13所示,执行HDFS文件系统格式化命令后,会有较大的输出信息,可以检查是否有ERROR信息。

4.4.2 启动HDFS服务及验证

(1)启动DFS服务

输入如下命令,启动dfs服务,如图14所示。/usr/local/bda/hadoop/sbin/start-dfs.sh

零基础也能学会!Hadoop伪分布式集群安装与配置实践_Hadoop_15

图 14  启动DFS服务

注意,首次启动后,需要输入如图中红框所示的yes。其后再次启动则无需输入。

(2)检查服务进程是否正常

输入jps 命令,查看相关进程是否正常

零基础也能学会!Hadoop伪分布式集群安装与配置实践_Hadoop_16

图 15  查看当前的java进程

jps命令的作用是查看当前系统中正在运行的java进程。如图15所示,执行完start-dfs.sh脚本后正常情况下有3个HDFS的进程,一个是NameNode进程,一个是DataNode进程,还有一个是SecondaryNameNode进程。除此之外还有jps进程自己。

(3)访问hdfs的http服务端口

HDFS提供了http服务端口,可以通过浏览器访问,但是需要注意的是,为了访问该端口,需要在防火墙上打开该端口,或者直接关闭防火墙。以下图16中,先检查防火墙状态,发现出于打开的状态,则禁用防火墙,并关闭防火墙。

零基础也能学会!Hadoop伪分布式集群安装与配置实践_Linux_17

图 16  防火墙状态检查及关闭

关闭防火墙端口后,就可以在windows系统打开浏览器,地址栏中输入虚拟机的“小网IP”及HDFS的http服务端口(2.x版本是50070)

所以当我的hdfs运行起来之后,通过浏览器 http://192.168.80.130:50070/

前面的192.168.80.130 是我虚拟机的ip 

零基础也能学会!Hadoop伪分布式集群安装与配置实践_Hadoop_18

图 17 通过浏览器访问HDFS的http服务

4.4.3 停止HDFS服务

/usr/local/bda/hadoop/sbin/stop-dfs.sh

特别注意:在关闭服务器之前,一定要先使用stop-dfs.sh命令停止HDFS文件系统,如果不执行该命令,直接进行服务器的关机操作,则HDFS系统很容易受到损坏。

零基础也能学会!Hadoop伪分布式集群安装与配置实践_HDFS_19

图 18 停止HDFS服务并使用jps命令检查

4.5 YARN服务启动及关闭

与HDFS类似,Hadoop提供了YARN服务的启动(start-yarn.sh)和关闭(stop-yarn.sh)命令。需要注意的是,YARN服务一般在HDFS服务启动后启动,并在HDFS服务关闭之前关闭。也就是,其执行顺序一般是:

start-dfs.sh  -> start-yarn.sh -> stop-yarn.sh  -> stop-dfs.sh

一定要注意启动和停止顺序,否者hadoop系统如何文件出现损坏。


4.5.1启动YARN服务及验证

/usr/local/bda/hadoop/sbin/start-yarn.sh

零基础也能学会!Hadoop伪分布式集群安装与配置实践_Hadoop_20

图 19 启动HDFS、YARN服务并使用jps命令检查

与HDFS类似,也可以通过浏览器输入服务器的小网IP+8088端口,访问YARN的http服务,查看在执行的计算任务及系统资源情况(需要打开防火墙端口,或者关闭防火墙)

零基础也能学会!Hadoop伪分布式集群安装与配置实践_Hadoop_21

图 20  访问YARN的http服务,查看系统监控


4.5.2关闭YARN服务

/usr/local/bda/hadoop/sbin/stop-yarn.sh

与HDFS类似,YARN服务也需要关闭,然后再关闭服务器。如果不关闭服务,直接关闭服务器,则可能损坏YARN服务。

零基础也能学会!Hadoop伪分布式集群安装与配置实践_Linux_22

图 21 停止YARN、HDFS服务并使用jps命令检查