Hadoop的运行模式包括本地模式、伪分布式模式和完全分布式模式。本节主要搭建实际生产环境中比较常用的完全分布式模式,在搭建完全分布式模式之前,需要对集群部署进行提前规划,不要将过多的服务集中到一台节点服务器上。我们将负责管理工作的NameNode和ResourceManager分别部署在两台节点服务器上,另一台节点服务器上部署SecondaryNameNode,所有的节点服务器均承担DataNode和NodeManager角色,DataNode和NodeManager通常存储在同一台节点服务器上,所有角色尽量做到均衡分配。
(1)集群部署规划如表3-1所示。
表3-1 集群部署规划
(2)对集群角色的分配主要依靠配置文件,配置集群文件的细节如下。
①核心配置文件为core-site.xml,该配置文件属于Hadoop的全局配置文件,我们主要对分布式文件系统NameNode的入口地址和分布式文件系统中数据落地到服务器本地磁盘的位置进行配置,代码如下。
②Hadoop的环境配置文件为hadoop-env.sh,在这个配置文件中,我们需要指定JDK的路径JAVA_HOME,避免程序运行中出现找不到JAVA_HOME的异常。
③HDFS的配置文件为hdfs-site.xml,在这个配置文件中我们主要对HDFS文件系统的属性进行配置。
④YARN的环境配置文件为yarn-env.sh,同样指定JDK的路径为JAVA_HOME。
⑤针对YARN的配置文件yarn-site.xml,主要配置如下两个参数。
⑥MapReduce的环境配置文件为mapred-env.sh,同样指定JDK的路径为JAVA_HOME。
⑦针对MapReduce的配置文件mapred-site.xml,主要配置一个参数,指明MapReduce的运行框架为YARN。
⑧主节点服务器NameNode和ResourceManager的角色在配置文件中已经进行了配置,而从节点服务器的角色还需要指定,配置文件workers 就是用来配置Hadoop分布式集群中各从节点服务器的角色的。如下面的代码所示,对workers文件进行修改,将3台节点服务器全部指定为从节点服务器,启动DataNode和NodeManager进程。
⑨在集群上分发配置好的Hadoop配置文件,这样3台节点服务器都可以享有相同的Hadoop配置。
⑩查看文件分发情况。
(3)创建数据目录。
根据core-site.xml文件中配置的分布式文件系统最终落地到各个数据节点上的本地磁盘位置信息/opt/module/hadoop-3.1.3/data,自行创建该目录。
(4)启动Hadoop分布式集群。
①如果是第一次启动集群,则需要格式化NameNode。
②在配置了NameNode的节点服务器后,通过执行start-dfs.sh命令启动HDFS,即可同时启动所有的DataNode和SecondaryNameNode。
③通过执行start-yarn.sh命令启动YARN,即可同时启动ResourceManager和所有的NodeManager。需要注意的是,NameNode和ResourceManger 如果不在同一台服务器上,则不能在NameNode上启动YARN,应该在ResouceManager所在的服务器上启动YARN。
通过执行jps命令,可以在各台节点服务器上查看进程的启动情况,若显示如下内容,则表示启动成功。
(5)通过Web UI查看集群是否启动成功。
①在Web端输入之前配置的NameNode的节点服务器地址和端口9870,即可查看HDFS文件系统。例如,在浏览器中输入http://hadoop102:9870,可以检查NameNode和DataNode是否正常。NameNode的Web端如图3-55所示。
图3-55 NameNode的Web端
②通过在Web端输入ResourceManager地址和端口8088,可以查看YARN上任务的运行情况。例如,在浏览器输入http://hadoop103:8088,即可查看本集群YARN的运行情况。YARN的Web端如图3-56所示。
图3-56 YARN的Web端
(6)运行PI实例,检查集群是否启动成功。
在集群任意节点服务器上执行下面的命令,如果看到如图3-57所示的运行结果,则说明集群启动成功。
图3-57 PI实例运行结果
最后输出为Estimated value of Pi is 3.20000000000000000000。
(7)编写集群所有进程查看脚本。
启动集群后,用户需要通过jps命令查看各节点服务器进程的启动情况,操作起来比较麻烦,所以我们通过编写一个脚本,来达到同时查看所有节点的所有进程的目的。
①在/home/atguigu/bin目录下创建脚本xcall.sh。
②脚本思路:先通过i变量在hadoop102、hadoop103和hadoop104节点服务器间遍历,再分别通过ssh命令进入3台节点服务器,执行传入参数指定命令。
在脚本中编写如下内容。
③增加脚本执行权限。
④执行脚本。