



在准备好集群环境后,我们需要安装JDK与Hadoop。
在正式安装JDK与Hadoop前,首先需要在3台节点服务器上进行一些配置。
(1)在/opt目录下创建module、software文件夹。
(2)修改module、software文件夹的所有者。
之后所有的软件安装操作都将在module和software文件夹中进行。
为什么需要配置免密登录呢?这与 Hadoop 分布式集群的架构有关。我们搭建的 Hadoop 分布式集群是主从架构,在配置了节点服务器间免密登录之后,就可以方便地通过主节点服务器启动从节点服务器,而不用手动输入用户名和密码。
(1)免密登录原理如图3-1所示。
图3-1 免密登录原理
(2)生成公钥和私钥。
然后连续按3次Enter键,就会生成2个文件:id_rsa(私钥)、id_rsa.pub(公钥)。
(3)将公钥复制到想要配置免密登录的目标机器上。
注意: 需要在hadoop102上采用root账号,配置免密登录到hadoop102、hadoop103、hadoop104;还需要在hadoop103上采用atguigu账号,配置免密登录到hadoop102、hadoop103、hadoop104。
.ssh文件夹下的文件功能解释如下。
● known_hosts:记录SSH访问过计算机的公钥。
● id_rsa:生成的私钥。
● id_rsa.pub:生成的公钥。
● authorized_keys:存放授权过的免密登录服务器公钥。
为什么要配置节点服务器间的时间同步呢?
即将搭建的Hadoop分布式集群需要解决2个问题:数据的存储和数据的计算。
Hadoop对大型文件的存储采用分块的方法,将文件切分成多块,以块为单位,分发到各台节点服务器上进行存储。当这个大型文件再次被访问时,需要从3台节点服务器上分别拿出数据,再进行计算。由于计算机之间的通信和数据的传输一般是以时间为约定条件的,如果3台节点服务器的时间不一致,就会导致在读取块数据时出现时间延迟,进而可能导致访问文件时间过长,甚至失败,所以配置节点服务器间的时间同步非常重要。
第一步:配置时间服务器(必须是root用户)。
(1)检查所有节点服务器ntp服务状态和开机自启状态。
(2)在所有节点服务器关闭ntp服务和开机自启动。
(3)修改ntp配置文件。
修改内容如下。
① 修改1(设置本地网络上的主机不受限制),将以下配置前的“#”删除,解开此行注释。
② 修改2(设置为不采用公共的服务器)。
将上述内容修改为:
③ 修改3(添加一个默认的内部时钟数据,使用它为局域网用户提供服务)。
(4)修改/etc/sysconfig/ntpd 文件。
增加如下内容(让硬件时间与系统时间一起同步)。
重新启动ntpd文件。
执行:
第二步:配置其他服务器(必须是root用户)。
配置服务器每10分钟与时间服务器同步一次。
编写脚本。
修改hadoop103的节点服务器时间,使其与另外2台节点服务器时间不同步。
10分钟后查看该服务器是否与时间服务器同步。
集群间数据的复制通用的2个命令是scp和rsync,其中,rsync命令可以只对差异文件进行更新,使用起来非常方便,但是在使用时需要操作者频繁输入各种命令参数,为了能够更方便地使用该命令,我们编写一个集群分发脚本,主要实现目前集群间的数据分发功能。
第一步:脚本需求分析。循环复制文件到所有节点服务器的相同目录下。
(1)原始复制。
(2)期望脚本效果。
(3)在/home/atguigu/bin目录下存放的脚本,atguigu用户可以在系统任何地方直接执行。
第二步:脚本实现。
(1)在/home/atguigu目录下创建bin目录,并在bin目录下使用vim命令创建文件xsync,文件内容如下。
(2)修改脚本xsync,使其具有执行权限。
(3)调用脚本的形式:xsync 文件名称。
JDK是Java的开发工具箱,是整个Java的核心,包括Java运行环境、Java工具和Java基础类库,JDK 是学习大数据技术的基础。即将搭建的 Hadoop 分布式集群的安装程序就是使用 Java 开发的,所有Hadoop分布式集群要想正常运行,必须安装JDK。
(1)在3台虚拟机上分别卸载现有的JDK。
(2)将JDK导入opt目录下的software文件夹中。
① 在Linux下的opt目录中查看软件包是否导入成功。
② 解压JDK到/opt/module目录下,使用tar命令来解压.tar或.tar.gz格式的压缩包,使用-z选项指定解压.tar.gz格式的压缩包。使用-f选项指定解压文件,使用-x选项指定解包操作,使用-v选项显示解压过程,使用-C选项指定解压路径。
(3)配置JDK环境变量,方便使用JDK的程序调用JDK。
① 先获取JDK路径。
② 新建/etc/profile.d/my_env.sh文件,需要注意的是,/etc/profile.d路径属于root用户,需要使用sudo vim命令才可以对它进行编辑。
在profile文件末尾添加JDK路径,添加的内容如下。
保存后退出。
③ 修改环境变量后,需要执行source命令使修改后的文件生效。
(4)通过执行java-version命令,测试JDK是否安装成功。
如果执行java-version命令后无法显示Java版本,就执行以下命令重启服务器。
(5)分发JDK给所有节点服务器。
(6)分发环境变量。
(7)执行source命令,使环境变量在每台虚拟机上生效。
在搭建Hadoop分布式集群时,每台节点服务器上的Hadoop配置基本相同,因此只需要在hadoop102节点服务器上进行操作,配置完成之后同步到另外2台节点服务器上即可。
(1)将Hadoop的安装包hadoop-3.3.4.tar.gz导入opt目录下的software文件夹,该文件夹被指定用来存储各软件的安装包。
① 进入Hadoop安装包路径。
② 解压安装包到/opt/module文件中。
③ 查看是否解压成功。
(2)将Hadoop添加到环境变量中,可以直接使用Hadoop的相关指令进行操作,而不用指定Hadoop的目录。
① 获取Hadoop安装路径。
② 打开/etc/profile文件。
在profile文件末尾添加Hadoop路径,添加的内容如下。
③ 保存后退出。
④ 执行source命令,使修改后的文件生效。
(3)测试是否安装成功。
(4)如果执行hadoop version命令后无法显示Java版本,就执行以下命令重启服务器。
(5)分发Hadoop给所有节点服务器。
(6)分发环境变量。
(7)执行source命令,使环境变量在每台虚拟机上生效。
Hadoop的运行模式包括本地模式、伪分布式模式和完全分布式模式。本次主要搭建实际生产环境中比较常用的完全分布式模式,在搭建完全分布式模式之前,需要对集群部署进行提前规划,不要将过多的服务集中到一台节点服务器上。我们将负责管理工作的NameNode和ResourceManager分别部署在两台节点服务器上,在另一台节点服务器上部署 SecondaryNameNode,所有节点服务器均承担 DataNode 和NodeManager角色,并且DataNode和NodeManager通常存储在同一台节点服务器上,所有角色尽量做到均衡分配。
(1)集群部署规划如表3-2所示。
表3-2 集群部署规划
(2)对集群角色的分配主要依靠配置文件,配置集群文件的细节如下。
① 核心配置文件为core-site.xml,该配置文件属于Hadoop的全局配置文件,我们主要对分布式文件系统NameNode的入口地址和分布式文件系统中数据落地到服务器本地磁盘的位置进行配置,代码如下。
② HDFS的配置文件为hdfs-site.xml,在这个配置文件中,我们主要对HDFS文件系统的属性进行配置。
③ 关于YARN的配置文件yarn-site.xml,主要配置如下两个参数。
④ 关于MapReduce的配置文件mapred-site.xml,主要配置一个参数,指明MapReduce的运行框架为YARN。
⑤ 主节点服务器 NameNode 和 ResourceManager 的角色在配置文件中已经进行了配置,而从节点服务器的角色还需指定,配置文件workers就是用来配置Hadoop分布式集群中各从节点服务器的角色的。如下方代码所示,对workers文件进行修改,将三台节点服务器全部指定为从节点服务器,启动DataNode和NodeManager进程。
⑥ 在集群上分发配置好的Hadoop配置文件,这样三台节点服务器都可以享有相同的Hadoop配置。
⑦ 查看文件分发情况。
(3)启动Hadoop分布式集群。
① 如果是第一次启动集群,就需要格式化NameNode。
② 在配置了NameNode的节点服务器后,通过执行start-dfs.sh命令启动HDFS,即可同时启动所有的DataNode和SecondaryNameNode。
③ 通过执行start-yarn.sh命令启动YARN,即可同时启动ResourceManager和所有的NodeManager。需要注意的是,NameNode和ResourceManger如果不在同一台服务器上,就不能在NameNode上启动YARN,应该在ResouceManager所在的服务器上启动YARN。
通过执行jps命令,可在各台节点服务器上查看进程启动情况,若显示如下内容,则表示启动成功。
(4)通过Web UI查看集群是否启动成功。
① 在Web端输入之前配置的NameNode的节点服务器地址和端口9870,即可查看HDFS文件系统。例如,在浏览器中输入http://hadoop102:9870,可以检查NameNode和DataNode是否正常。NameNode的Web端如图3-2所示。
图3-2 NameNode的Web端
② 通过在Web端输入ResourceManager地址和端口8088,可以查看YARN上任务的运行情况。例如,在浏览器输入http://hadoop103:8088,即可查看本集群YARN的运行情况。YARN的Web端如图3-3所示。
图3-3 YARN的Web端
(5)运行PI实例,检查集群是否启动成功。
在集群的任意节点服务器上执行下面的命令,如果看到如图3-4所示的PI实例运行结果,就说明集群启动成功。
图3-4 PI实例运行结果
最后输出Estimated value of Pi is 3.20000000000000000000。
(6)编写Hadoop集群启动脚本。
①在/home/atguigu/bin目录下创建脚本hdp.sh。
②在脚本文件中编写以下内容。
③为脚本增加执行权限。
④启动Hadoop集群。
查看进程。
⑤关闭Hadoop集群。
查看进程。
(7)编写集群所有进程查看脚本。
在启动集群后,用户需要通过 jps 命令查看各节点服务器进程的启动情况,操作起来比较麻烦,因此我们通过编写一个集群所有进程查看脚本,来实现使用一个脚本查看所有节点服务器的所有进程的目的。
①在/home/atguigu/bin目录下创建脚本xcall.sh。
②脚本思路:通过i变量在hadoop102、hadoop103和hadoop104节点服务器间遍历,分别通过ssh命令进入三台节点服务器,执行传入参数指定命令。
在脚本中编写如下内容。
③增加脚本执行权限。
④执行脚本。