超详细Hadoop集群搭建

2023年 9月 12日 60.0k 0

前期环境准备

JDK安装配置

# 快速手把手教你Centos7中安装Java8 JDK

新增非root用户

adduser hadoop
passwd hadoop
chown -R hadoop hadoop /app

下面所有hadoop集群安装配置及启动的操作都是在hadoop用户下完成的(不能使用root用户)

服务器之间的免密登录

# Linux 多台机器之间的免密登录设置

要在hadoop用户下操作

hadoop下载及介绍

Hadoop 是 Apache 基金会面向全球开源的产品之一,任何用户都可以从 Apache Hadoop 官网 archive.apache.org/dist/hadoop… / 下载使.......

Hadoop 是 Apache 基金会面向全球开源的产品之一,任何用户都可以从 Apache Hadoop 官网 archive.apache.org/dist/hadoop…

先将下载的 hadoop-2.7.4.tar.gz 安装包上传到主节点 hadoop01 的 / export/software / 目录下,然后将文件解压到 / export/servers / 目录,具体指令如下。

$ tar -zxvf hadoop-2.7.4.tar.gz -C /export/servers/

执行完上述指令后,同样通过 “vi /etc/profile” 指令打开 profile 文件,在文件底部进一步添加如下内容类配置 Hadoop 环境变量。

export HADOOP_HOME=/export/servers/hadoop-2.7.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

在 / etc/profile 文件中配置完上述 Hadoop 环境变量后(注意 HADOOP_HOME 路径),保存退出即可。然后,还需要执行 “source /etc/profile” 指令使可使配置文件生效。

安装完 Hadoop 并配置好环境变量后,可以在当前主机任意目录下查看安装的 Hadoop 版本号,具体指令如下。

$ hadoop version

执行完上述指令后,效果如图 1 所示。

图 1 Hadoop 版本号

从图 1 可以看出,当前 Haddoop 版本就是指定的 2.7.4,说明 Hadoop 安装成功。

接下来,可以在 Hadoop 解压目录下通过 ll 指令查看 Hadoop 目录结构,如图 2 所示。

图 2 Hadoop 安装目录结构

从图 2 可以看出,Hadoop 安装目录包括有 bin、etc、include、lib、libexec、sbin、share 和 src 共 8 个目录以及其他一些文件,下面简单介绍下各目录内容及作用。

bin:存放操作 Hadoop 相关服务(HDFS、Yarn)的脚本,但是通常使用 sbin 目录下的脚本。

etc:存放 Hadoop 配置文件,主要包含 core-site.xml、hdfs-site.xml、mapred-site.xml 等从 Hadoop1.0 继承而来的配置文件和 yarn-site.xml 等 Hadoop2.0 新增的配置文件。

include:对外提供的编程库头文件(具体动态库和静态库在 lib 目录中),这些头文件均是用 C++ 定义的,通常用于 C++ 程序访问 HDFS 或者编写 MapReduce 程序。

lib:该目录包含了 Hadoop 对外提供的编程动态库和静态库,与 include 目录中的头文件结合使用。

libexec:各个服务对用的 shell 配置文件所在的目录,可用于配置日志输出、启动参数(比如 JVM 参数)等基本信息。

sbin:该目录存放 Hadoop 管理脚本,主要包含 HDFS 和 YARN 中各类服务的启动 / 关闭脚本。

share:Hadoop 各个模块编译后的 jar 包所在的目录。

src:Hadoop 的源码包。

hadoop集群配置(重点)

上一节仅仅进行了单机上的 Hadoop 安装,为了在多台机器上进行 Hadoop 集群搭建和使用,还需要对相关配置文件进行修改,来保证集群服务协调运行。

上一节仅仅进行了单机上的 Hadoop 安装,为了在多台机器上进行 Hadoop 集群搭建和使用,还需要对相关配置文件进行修改,来保证集群服务协调运行。

Hadoop 默认提供了两种配置文件:一种是只读的默认配置文件,包括 core-default.xml、hdfs-default.xml、mapred-default.xml 和 yarn-default.xml,这些文件包含了 Hadoop 系统各种默认配置参数;另一种是 Hadoop 集群自定义配置时编辑的配置文件(这些文件多数没有任何配置内容,都存在于 Hadoop 解压包下的 etc/hadoop / 目录中),包括 core-site.xml、hdfs-site.xml、mapred-site.xml 和 yarn-site.xml 等,可以根据需要在这些文件中对上一种默认配置文件中的参数进行修改,Hadoop 会优先选择这些配置文件中的参数。

接下来,先通过一张表来对 Hadoop 集群搭建可能涉及到的主要配置文件及功能进行描述,如表 1 所示。

表 1 Hadoop 主要配置文件

配置文件 功能描述
hadoop-env.sh 配置 Hadoop 运行所需的环境变量
yarn-env.sh 配置 Yarn 运行所需的环境变量
core-site.xml Hadoop 核心全局配置文件,可在其他配置文件中引用该文件
hdfs-site.xml HDFS 配置文件,继承 core-site.xml 配置文件
mapred-site.xml MapReduce 配置文件,继承 core-site.xml 配置文件
yarn-site.xml Yarn 配置文件,继承 core-site.xml 配置文件

在表 1 中,前 2 个配置文件都是用来指定 Hadoop 和 Yarn 所需运行环境,hadoop-env.sh 用来保证 Hadoop 系统能够正常执行 HDFS 的守护进程 NameNode、Secondary NameNode 和 DataNode;而 yarn-env.sh 用来保证 YARN 的守护进程 ResourceManager 和 NodeManager 能正常启动。另外其他 4 个配置文件都是用来设置集群运行参数的,在这些配置文件中可以使用 Hadoop 默认配置文件中的参数进行配置来优化 Hadoop 集群,从而使集群更加稳定高效。

Hadoop 提供的默认配置文件 core-default.xml、hdfs-default.xml、mapred-default.xml 和 yarn-default.xml 中的参数非常之多,这里不便一一展示说明。读者在具体使用时可以通过访问 Hadoop 官方文档http://hadoop.apache.org/docs/stable/index.html,进入到文档最底部的 Configuration 部分进行学习和查看。

接下来,就以 Hadoop 集群规划图为例,来详细讲解 Hadoop 集群配置,具体步骤如下。

1.配置 Hadoop 集群主节点

(1)修改 hadoop-env.sh 文件

先进入到主节点 hadoop01 解压包下的 etc/hadoop / 目录,使用 “vi hadoop-env.sh” 指令打开其中的 hadoop-env.sh 文件,找到 JAVA_HOME 参数位置,进入如下修改(注意 JDK 路径)。

export JAVA_HOME=/export/servers/jdk

上述配置文件中设置的是 Hadoop 运行时需要的 JDK 环境变量,目的是让 Hadoop 启动时能够执行守护进程。

(2)修改 core-site.xml 文件

该文件是 Hadoop 的核心配置文件,其目的是配置 HDFS 地址、端口号,以及临时文件目录。参考上一步,打开该配置文件,添加如下配置内容。

     
       
        fs.defaultFS  
        hdfs://hadoop01:9000 
      
       
        hadoop.tmp.dir  
        /export/servers/hadoop-2.7.4/tmp 
       
    

在上述核心配置文件中,配置了 HDFS 的主进程 NameNode 运行主机(也就是此次 Hadoop 集群的主节点位置),同时配置了 Hadoop 运行时生成数据的临时目录。

(3)修改 hdfs-site.xml 文件

该文件用于设置 HDFS 的 NameNode 和 DataNode 两大进程。打开该配置文件,添加如下配置内容。

     
       
        dfs.replication  
        3 
        
       
        dfs.namenode.secondary.http-address  
        hadoop02:50090 
       
      
      
        dfs.namenode.http-address
        0.0.0.0:9870
      
    

在上述配置文件中,配置了 HDFS 数据块的副本数量(默认值就为 3,此处可以省略),并根据需要设置了 Secondary NameNode 所在服务的 HTTP 协议地址。

(4)修改 mapred-site.xml 文件

该文件是 MapReduce 的核心配置文件,用于指定 MapReduce 运行时框架。在 etc/hadoop / 目录中默认没有该文件,需要先通过 “cp mapred-site.xml.template mapred-site.xml” 命令将文件复制并重命名为“mapred-site.xml”。接着,打开 mapred-site.xml 文件进行修改,添加如下配置内容。

 
   
    mapreduce.framework.name  
    **yarn** 
   


在上述配置文件中,就是指定了 Hadoop 的 MapReduce 运行框架为 Yarn。

(5)修改 yarn-site.xml 文件

本文件是 Yarn 框架的核心配置文件,需要指定 Yarn 集群的管理者。打开该配置文件,添加如下配置内容。

     
       
        yarn.resourcemanager.hostname  
        hadoop01 
        
       
        yarn.nodemanager.aux-services  
        mapreduce_shuffle 
       
      
      
        yarn.resourcemanager.webapp.address
        0.0.0.0:8088
      
    

在上述配置文件中,配置了 YARN 的主进程 ResourceManager 运行主机为 hadoop01,同时配置了 NodeManager 运行时的附属服务,需要配置为 mapreduce_shuffle 才能正常运行 MapReduce 默认程序。

(6)修改 wokers 文件

该文件用于记录 Hadoop 集群所有从节点(HDFS 的 DataNode 和 YARN 的 NodeManager 所在主机)的主机名,用来配合一键启动脚本启动集群从节点(并且还需要保证关联节点配置了 SSH 免密登录)。打开该配置文件,先删除里面的内容(默认 localhost),然后配置如下内容。

hadoop01
hadoop02
hadoop03

在上述配置文件中,配置了 Hadoop 集群所有从节点的主机名为 hadoop01、hadoop02 和 hadoop03(这是因为此次在该 3 台机器上搭建 Hadoop 集群,同时前面的配置文件 hdfs-site.xml 指定了 HDFS 服务副本数量为 3)。

2.将集群主节点的配置文件分发到其他子节点

完成 Hadoop 集群主节点 hadoop01 的配置后,还需要将系统环境配置文件、JDK 安装目录和 Hadoop 安装目录分发到其他子节点 hadoop02 和 hadoop03 上,具体指令如下。

$ scp /etc/profile hadoop02:/etc/profile
$ scp /etc/profile hadoop03:/etc/profile
$ scp -r /export/ hadoop02:/
$ scp -r /export/ hadoop03:/

执行完上述所有指令后,还需要在其他子节点 hadoop02、hadoop03 上分别执行 “source /etc/profile” 指令立即刷新配置文件。

至此,整个集群所有节点就都有了 Hadoop 运行所需的环境和文件,Hadoop 集群也就安装配置完成。在下节中,将对此次安装配置的集群进行效果测试。

初始化hadoop集群

通过前面小节的学习,已经完成了 Hadoop 集群的安装和配置。

通过前面小节的学习,已经完成了 Hadoop 集群的安装和配置。此时还不能直接启动集群,因为在初次启动 HDFS 集群时,必须对主节点进行格式化处理,具体指令如下。

    $ hdfs namenode -format

或者

    $ hadoop namenode -format

执行上述任意一条指令都可以对 Hadoop 集群进行格式化。执行格式化指令后,必须出现有 “successfully formatted” 信息才表示格式化成功,然后就可以正式启动集群了;否则,就需要查看指令是否正确,或者之前 Hadoop 集群的安装和配置是否正确。

另外需要注意的是,上述格式化指令只需要在 Hadoop 集群初次启动前执行即可,后续重复启动就不再需要执行格式化了。

启动或关闭hadoop集群

针对 Hadoop 集群的启动,需要启动内部包含的 HDFS 集群和 YARN 集群两个集群框架。

针对 Hadoop 集群的启动,需要启动内部包含的 HDFS 集群和 YARN 集群两个集群框架。启动方式有两种:一种是单节点逐个启动;另一种是使用脚本一键启动。

1.单节点逐个启动和关闭

单节点逐个启动的方式,需要参照以下方式逐个启动 Hadoop 集群服务需要的相关服务进程,具体步骤如下。

(1)在主节点上使用以下指令启动 HDFS NameNode 进程:

$ hadoop-daemon.sh start namenode

(2)在每个从节点上使用以下指令启动 HDFS DataNode 进程:

$ hadoop-daemon.sh start datanode

(3)在主节点上使用以下指令启动 YARN ResourceManager 进程:

$ yarn-daemon.sh start resourcemanager

(4)在每个从节点上使用以下指令启动 YARN nodemanager 进程:

$ yarn-daemon.sh start nodemanager

(5)在规划节点 hadoop02 使用以下指令启动 SecondaryNameNode 进程:

$ hadoop-daemon.sh start secondarynamenode

上述介绍了单节点逐个启动和关闭 Hadoop 集群服务的方式。另外,当需要停止相关服务进程时,只需要将上述指令中的 start 更改为 stop 即可。

2.脚本一键启动和关闭

启动集群还可以使用脚本一键启动,前提是需要配置 slaves 配置文件和 SSH 免密登录(例如本书采用 hadoop01、hadoop02、hadoop03 三台节点,为了在任意一台节点上执行脚本一键启动 Hadoop 服务,那么就必须在三台节点包括自身节点均配置 SSH 双向免密登录)。

使用脚本一键启动 Hadoop 集群,可以选择在主节点上参考如下方式进行启动。

(1)在主节点 hadoop01 上使用以下指令启动所有 HDFS 服务进程:

$ start-dfs.sh

(2)在主节点 hadoop01 上使用以下指令启动所有 YARN 服务进程:

$ start-yarn.sh

上述使用脚本一键启动的方式,先启动了集群所有的 HDFS 服务进程,然后再启动了所有的 YARN 服务进程,这就完成了整个 Hadoop 集群服务的启动。

另外,还可以在主节点 hadoop01 上执行 “start-all.sh” 指令,直接启动整个 Hadoop 集群服务。不过在当前版本已经不再推荐使用该指令启动 Hadoop 集群了,并且使用这种指令启动服务会有警告提示。

同样,当需要停止相关服务进程时,只需要将上述指令中的 start 更改为 stop 即可(即

使用 stop-dfs.sh、stop-yarn.sh 来关停服务)。

在整个 Hadoop 集群服务启动完成之后,可以在各自机器上通过 jps 指令查看各节点的服务进程启动情况,效果分别如图 1、2 和 3 所示。

图 1 hadoop01 集群服务进程效果图

图 2 hadoop02 集群服务进程效果图

图 3 hadoop03 集群服务进程效果图

从图 1、2 和 3 可以看出,hadoop01 节点上启动了 NameNode、DataNode、ResourceManager 和 NodeManager 四个服务进程;hadoop02 上启动了 DataNode、NodeManager 和 SecondaryNameNode 三个 Hadoop 服务进程;hadoop03 上启动了 DataNode 和 NodeManager 两个服务进程。这与之前规划配置的各节点服务一致,说明 Hadoop 集群启动正常。

注意:

读者在进行前面 Hadoop 集群的配置和启动时,可能会出现例如 NodeManager 进程无法启动或者启动后自动结束的情况,此时可以查看 Hadoop 解压包目录中 logs 下的日志文件,主要是因为系统内存和资源分配不足。此时,可以参考如下方式,在所有节点的 yarn-site.xml 配置文件中添加如下参数进行适当调整。


    yarn.nodemanager.resource.memory-mb
    2048


    yarn.scheduler.minimum-allocation-mb
    2048


    yarn.nodemanager.resource.cpu-vcores
    1


上述配置文件中,yarn.nodemanager.resource.memory-mb 表示该节点上 NodeManager 可使用的物理内存总量,默认是 8192(MB),如果节点内存资源不够 8GB,则需要适当调整;yarn.scheduler.minimum-allocation-mb 表示每个容器可申请的最少物理内存量,默认是 1024(MB);yarn.nodemanager.resource.cpu-vcores 表示 NodeManager 总的可用虚拟 CPU 核数。

通过UI界面查询hadoop集群运行状态

Hadoop 集群正常启动后,它默认开放了两个端口 9870 和 8088,分别用于监控 HDFS 集群和 YARN 集群。

Hadoop 集群正常启动后,它默认开放了两个端口 9870 和 8088,分别用于监控 HDFS 集群和 YARN 集群。通过 UI 界面可以方便地进行集群的管理和查看,只需要在本地操作系统的浏览器输入集群服务的 IP 和对应的端口号即可访问。

为了后续方便查看,可以在本地宿主机的 hosts 文件(Windows7 操作系统下路径为 C:WindowsSystem32driversetc)中添加集群服务的 IP 映射,具体内容示例如下(读者需要根据自身集群构建进行相应的配置)。

192.168.121.134 hadoop01

192.168.121.135 hadoop02

192.168.121.136 hadoop03

想要通过外部 UI 界面访问虚拟机服务,还需要对外开放配置 Hadoop 集群服务端口号。这里,为了后续学习方便,就直接将所有集群节点防火墙进行关闭即可,具体操作如下。

首先,在所有集群节点上执行如下指令关闭防火墙:

$ service iptables stop

接着,在所有集群节点上执行如下指令关闭防火墙开机启动:

$ chkconfig iptables off

执行完上述所有操作后,再通过宿主机的浏览器分别访问http://hadoop01:9870(集群服务 IP + 端口号)和http://hadoop01:8088查看 HDFS 和 YARN 集群状态,效果分别如图 1 和 2 所示。

图 1 HDFS 的 UI 界面

图 2 YARN 的 UI 界面

从图 1 和 2 可以看出,通过 UI 界面都可以正常访问 Hadoop 集群的 HDFS 界面和 YARN 界面,并且页面显示正常,同时通过 UI 界面可以更方便的进行集群状态管理和查看。

hadoop集群初体验

前面完成了 Hadoop 集群安装和测试,显示构建的 Hadoop 集群能够正常运行。

前面完成了 Hadoop 集群安装和测试,显示构建的 Hadoop 集群能够正常运行。接下来,就通过 Hadoop 经典案例——单词统计,来演示 Hadoop 集群的简单使用。

(1)打开 HDFS 的 UI 界面,选择【Utilities】→【Browse the file system】查看分布式文件系统里的数据文件,可以看到新建的 HDFS 系统上没有任何数据文件,如图 1 所示。

图 1 HDFS 文件系统

(2)先在集群主节点 hadoop01 上的 / export/data / 目录下,使用 “vi word.txt” 指令新建一个 word.txt 文本文件,并编写一些单词内容,如文件所示。

文件 word.txt

hello itcast

hello itheima

hello hadoop

接着,在 HDFS 文件系统上创建 / wordcount/input 目录,并将 word.txt 文件上传至该目录下,具体指令如下所示。

$ hadoop fs -mkdir -p /wordcount/input

$ hadoop fs -put /export/data/word.txt /wordcount/input

上述指令是 Hadoop 提供的进行文件系统操作的 HDFS Shell 相关指令,此处不必深究具体使用,在下一章节会进行详细说明。执行完上述指令后,再次查看 HDFS 的 UI 界面,会发现 / wordcount/input 目录创建成功并上传了指定的 word.txt 文件,如图 2 所示。

图 2 HDFS 文件系统

(3)进入 Hadoop 解压包中的 share/hadoop/mapreduce / 目录下,使用 ll 指令查看文件夹内容,如图 3 所示。

图 3 官方 MapReduce 示例程序

从图 3 可以看出,在该文件夹下自带了很多 Hadoop 的 MapReduce 示例程序。其中,hadoop-mapreduce-examples-2.7.4.jar 包中包含了计算单词个数、计算 Pi 值等功能。

因此,这里可以直接使用 hadoop-mapreduce-examples-2.7.4.jar 示例包,对 HDFS 文件系统上的 word.txt 文件进行单词统计,来进行此次案例的演示,在当 jar 包位置执行如下指令。

$ hadoop jar hadoop-mapreduce-examples-2.7.4.jar wordcount /wordcount/input /wordcount/output

上述指令中,hadoop jar hadoop-mapreduce-examples-2.7.4.jar 表示执行一个 Hadoop 的 jar 包程序;wordcount 表示执行 jar 包程序中的单词统计功能;/wordcount/input 表示进行单词统计的 HDFS 文件路径;/wordcount/output 表示进行单词统计后的输出 HDFS 结果路径。

执行完上述指令后,示例包中的 MapReduce 程序开始运行,此时可以通过 YARN 集群的 UI 界面查看运行状态,如图 4 所示。

图 4 YARN 集群 UI 界面

经过一定时间执行后,再次刷新查看 YARN 集群的 UI 界面,就会发现程序已经运行成功的状态信息以及其他相关参数。

(4)在单词统计的示例程序执行成功后,再次刷新并查看 HDFS 的 UI 界面,如图 5 所示。

图 5 MapReduce 程序执行结果

从图 5 可以看出,MapReduce 程序执行成功后,在 HDFS 上自动创建了指定的结果目录 / wordcount/output,并且输出了_SUCCESS 和 part-r-00000 结果文件。其中_SUCCESS 文件用于表示此次任务成功执行的标识,而 part-r-00000 表示单词统计的结果。

接着,就可以单击下载图 2-48 中的 part-r-00000 结果文件到本地操作系统,并使用文本工具(EditPlus、Nodepad++、记事本等)打开该文件,如图 6 所示。

图 6 MapReduce 单词统计结果文件

从图 6 可以看出,MapReduce 示例程序成功统计出了 / wordcount/input/word.txt 文本中的单词数量,并进行了结果输出。

在本节使用 Hadoop 提供的示例程序演示了单词统计案例的实现,在实际工作应用开发中,开发者需要根据需求自行编写各种 MapReduce 程序,打包上传至服务器上,然后执行此程序。关于 Hadoop 系统的工作原理,以及 MapReduce 程序编写方式,将在后面的章节进行详细讲解。

注意:

在执行 MapReduce 程序时,可能会出现类似 “WARN hdfs.DFSClient:Caught exception” 的警告提示信息,这是由于 Hadoop 版本以及系统资源配置的原因,读者可以不必在意,它并不会影响程序的正常执行。

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论