购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.5 搭建Hadoop 3.x分布式集群

本例的搭建思路是,在节点centos01中安装Hadoop并修改配置文件,然后将配置好的Hadoop安装文件远程复制到集群中的其他节点。集群各节点的角色分配如表3-1所示。

表3-1 Hadoop集群角色分配

表3-1中的角色指的是Hadoop集群各节点所启动的守护进程,其中的NameNode、SecondaryNameNode和DataNode是HDFS集群所启动的进程(HDFS将在第4章进行详细讲解);ResourceManager和NodeManager是YARN集群所启动的进程。

Hadoop集群搭建的操作步骤如下:

1.上传Hadoop并解压

在centos01节点中,将Hadoop安装文件hadoop-3.3.1.tar.gz上传到/opt/softwares/目录,然后进入该目录,解压安装文件到/opt/modules/,命令如下:

     $ cd /opt/softwares/
     $ tar -zxf hadoop-3.3.1.tar.gz -C /opt/modules/

2.配置系统环境变量

为了可以方便地在任意目录下执行Hadoop命令,而不需要进入到Hadoop安装目录,需要配置Hadoop系统环境变量。此处只需要配置centos01节点即可。

执行以下命令,修改文件/etc/profile:

     $ sudo vi /etc/profile

在文件末尾加入以下内容:

     export HADOOP_HOME=/opt/modules/hadoop-3.3.1
     export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

执行以下命令,刷新profile文件,使修改生效:

     $ source /etc/profile

执行hadoop命令,若能成功输出以下返回信息,说明Hadoop系统变量配置成功:

     Usage: hadoop [--config confdir] [COMMAND | CLASSNAME]
       CLASSNAME            run the class named CLASSNAME
      or
       where COMMAND is one of:
       fs                   run a generic filesystem user client
     version    print the version
     jar <jar>  run a jar file

3.配置Hadoop环境变量

Hadoop所有的配置文件都存在于安装目录下的etc/hadoop中,进入该目录,修改以下配置文件:

     hadoop-env.sh
     mapred-env.sh
     yarn-env.sh

三个文件分别加入JAVA_HOME环境变量,如下:

     export JAVA_HOME=/opt/modules/jdk1.8.0_144

4.配置HDFS

(1)修改配置文件core-site.xml,加入以下内容:

     <configuration>
        <property>
           <name>fs.defaultFS</name>
           <value>hdfs://centos01:9000</value>
        </property>
        <property>
           <name>hadoop.tmp.dir</name>
           <value>file:/opt/modules/hadoop-3.3.1/tmp</value>
        </property>
     </configuration>

上述配置属性解析如下:

·fs.defaultFS:HDFS的默认访问路径,也是NameNode的访问地址。

·hadoop.tmp.dir:Hadoop数据文件的存放目录。该参数如果不配置,默认指向/tmp目录,而/tmp目录在系统重启后会自动被清空,从而导致Hadoop的文件系统数据丢失。

(2)修改配置文件hdfs-site.xml,加入以下内容:

     <configuration>
        <property>
           <name>dfs.replication</name>
           <value>2</value>
        </property>
        <property><!--不检查用户权限-->
           <name>dfs.permissions.enabled</name>
           <value>false</value>
        </property>
        <property>
           <name>dfs.namenode.name.dir</name>
           <value>file:/opt/modules/hadoop-3.3.1/tmp/dfs/name</value>
        </property>
        <property>
           <name>dfs.datanode.data.dir</name>
           <value>file:/opt/modules/hadoop-3.3.1/tmp/dfs/data</value>
        </property>
     </configuration>

上述配置属性解析如下:

·dfs.replication:文件在HDFS系统中的副本数。

·dfs.namenode.name.dir:NameNode节点数据在本地文件系统的存放位置。

·dfs.datanode.data.dir:DataNode节点数据在本地文件系统的存放位置。

(3)修改workers文件,配置DataNode节点。workers文件原本无任何内容,需要将所有DataNode节点的主机名都添加进去,每个主机名占一整行(注意不要有空格)。本例中,DataNode为三个节点,配置信息如下:

     centos01
     centos02
     centos03

5.配置YARN

(1)修改mapred-site.xml文件,添加以下内容,指定MapReduce任务执行框架为YARN,并配置MapReduce任务的环境变量。

     <configuration>
       <!--指定MapReduce任务执行框架为YARN-->
        <property>
           <name>mapreduce.framework.name</name>
           <value>yarn</value>
        </property>
       <!--为MapReduce应用程序主进程添加环境变量-->
        <property>
           <name>yarn.app.mapreduce.am.env</name>
           <value>HADOOP_MAPRED_HOME=/opt/modules/hadoop-3.3.1</value>
        </property>
       <!--为MapReduce Map任务添加环境变量-->
        <property>
           <name>mapreduce.map.env</name>
           <value>HADOOP_MAPRED_HOME=/opt/modules/hadoop-3.3.1</value>
        </property>
       <!--为MapReduce Reduce任务添加环境变量-->
        <property>
           <name>mapreduce.reduce.env</name>
           <value>HADOOP_MAPRED_HOME=/opt/modules/hadoop-3.3.1</value>
        </property>
     </configuration>

若不配置上述环境变量,在执行MapReduce任务时可能会报“找不到或无法加载主类org.apache.hadoop.mapreduce.v2.app.MRAppMaster”等相关错误。

(2)修改yarn-site.xml文件,添加以下内容:

     <configuration>
        <property>
           <name>yarn.nodemanager.aux-services</name>
           <value>mapreduce_shuffle</value>
        </property>
     </configuration>

上述配置属性解析如下:

·yarn.nodemanager.aux-services:NodeManager上运行的附属服务,需配置成mapreduce_shuffle才可运行MapReduce程序。YARN提供了该配置项用于在NodeManager上扩展自定义服务,MapReduce的Shuffle功能正是一种扩展服务。

也可以继续在yarn-site.xml文件中添加以下属性内容,指定ResourceManager所在的节点,此处指定ResourceManager运行在centos01节点:

     <!--ResourceManager所在的主机名。客户端提交应用程序、ApplicationMaster申请资源、
NodeManager汇报心跳和领取任务等,都需要知道ResourceManager的位置,以便进行通信-->
     <property>
         <name>yarn.resourcemanager.hostname</name>
         <value>centos01</value>
     </property>

若不添加上述内容,ResourceManager将默认在执行YARN启动命令(start-yarn.sh)的节点上启动。

6.复制Hadoop安装文件到其他主机

在centos01节点上,将配置好的整个Hadoop安装目录复制到其他节点(centos02和centos03),命令如下:

     $ scp -r hadoop-3.3.1/ hadoop@centos02:/opt/modules/
     $ scp -r hadoop-3.3.1/ hadoop@centos03:/opt/modules/

7.格式化NameNode

启动Hadoop之前,需要先格式化NameNode。格式化NameNode可以初始化HDFS文件系统的一些目录和文件,在centos01节点上执行以下命令,进行格式化操作:

     $ hdfs namenode -format

若能输出以下信息,说明格式化成功:

     Storage directory /opt/modules/hadoop-3.3.1/tmp/dfs/name has been successfully
formatted.

格式化成功后,会在当前节点的Hadoop安装目录中生成tmp/dfs/name/current目录,该目录中则生成了用于存储HDFS文件系统元数据信息的文件fsimage(关于元数据文件将在下一章进行详细讲解),如图3-8所示。

图3-8 格式化NameNode后生成的相关文件

需要注意的是,必须在NameNode所在节点上进行格式化操作。

8.启动Hadoop

在centos01节点上执行以下命令,启动Hadoop集群:

     $ start-all.sh

也可以执行start-dfs.sh和start-yarn.sh分别启动HDFS集群和YARN集群。

Hadoop安装目录下的sbin目录中存放了很多启动脚本,若由于内存等原因使集群中的某个守护进程宕掉了,可以执行该目录中的脚本对相应的守护进程进行启动。常用的启动和停止脚本及说明如表3-2所示。

表3-2 常见的Hadoop启动和停止脚本及说明

注意

①若不配置SecondaryNameNode所在的节点,将默认在执行HDFS启动命令(start-dfs.sh)的节点上启动;②若不配置ResourceManager所在的节点,将默认在执行YARN启动命令(start-yarn.sh)的节点上启动;若配置了ResourceManager所在的节点,则必须在所配置的节点启动YARN,否则在其他节点启动时将抛出异常;③NodeManager无须配置,会与DataNode在同一个节点上,以获取任务执行时的数据本地性优势,即有DataNode的节点就会有NodeManager。

9.查看各节点启动进程

集群启动成功后,分别在各个节点上执行jps命令,查看启动的Java进程。可以看到,各节点的Java进程如下。

若某个进程启动失败,可查看进程所在节点的Hadoop安装主目录下的logs中生成的该进程的日志文件(每个进程都会有相应的日志文件),该文件中会记录相关错误信息。

10.测试HDFS

在centos01节点中执行以下命令,在HDFS根目录创建文件夹input,并将Hadoop安装目录下的文件README.txt上传到新建的input文件夹中:

     $ hdfs dfs -mkdir /input
     $ hdfs dfs -put /opt/modules/hadoop-3.3.1/README.txt /input

浏览器访问网址http://centos01: 9870(需要在本地配置好域名IP映射,域名为NameNode所在节点的主机名,关于NameNode将在第4章进行详细讲解)可以查看HDFS的NameNode信息并浏览HDFS系统中的文件,如图3-9所示。

图3-9 HDFS Web主界面

11.测试MapReduce

在centos01节点中执行以下命令,运行Hadoop自带的MapReduce单词计数程序,统计/input文件夹中的所有文件的单词数量:

    $ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount
/input /output

程序执行过程中,控制台输出的部分日志信息如图3-10所示。

可以看到,Map阶段和Reduce阶段的执行进度都为100%,说明程序执行成功。

图3-10 MapReduce任务执行过程

若Map阶段始终没有开始,此时程序可能一直处于“ACCEPTED”状态,而非正常的“RUNNING”状态(可以在YARN ResourceManager的Web界面http://centos01:8088查看程序的运行状态,具体见5.3节单词计数的程序运行)。说明程序运行可能出现了问题,可以查看NodeManager节点的日志文件,例如在centos03节点的Hadoop安装目录执行以下命令,查询NodeManager日志信息:

     $ more logs/hadoop-hadoop-nodemanager-centos03.log

若报以下错误:

     INFO org.apache.hadoop.ipc.Client: Retrying connect to server:
0.0.0.0/0.0.0.0:8031. Already tried 7 time(s); retry polic
     y is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000
MILLISECONDS)

说明ResourceManager的8031端口没有连接上,且连接地址(0.0.0.0)也不正确,此时可以修改yarn-site.xml配置文件,添加以下内容,指定ResourceManager所在的主机名:

     <!--ResourceManager所在的主机名。客户端提交应用程序、ApplicationMaster申请资源、
NodeManager汇报心跳和领取任务等,都需要知道ResourceManager的位置,以便进行通信-->
     <property>
         <name>yarn.resourcemanager.hostname</name>
         <value>centos01</value>
     </property>

修改完配置文件后,将其同步到其他节点,重新启动YARN集群。删除HDFS中生成的/output目录(MapReduce会自动创建该目录,若不删除,执行上述MapReduce单词计数程序时会抛出异常):

     $ hdfs dfs -rm -r /output

再次运行Hadoop自带的MapReduce单词计数程序,统计单词数量。

统计完成后,执行以下命令,查看MapReduce执行结果:

     $ hdfs dfs -cat /output/*

如果以上测试没有问题,则Hadoop集群搭建成功。

本书第4、5章将对HDFS和MapReduce做详细讲解。 IVDlZSr+rS6dtbFLCFYw/ghGbzPO16NFEMAt2PSz0yiPgouJwm0KIGEL9hY4RlRa

点击中间区域
呼出菜单
上一章
目录
下一章
×