由于Spark在将Yarn作为集群管理器时会用到Hadoop,因此在安装Spark之前,先要把Hadoop完全分布式(集群)环境搭建起来。在Hadoop的集群中,有一个NameNode,一个ResourceManager;在高可靠的集群环境中,可以拥有两个NameNode和两个ResourceManager;在Hadoop3以后,同一个NameService可以拥有3个NameNode。由于NameNode和ResourceManager是两个主要的服务,因此建议将它们部署到不同的服务器上。
下面以3台服务器为例,来快速搭建Hadoop的完全分布式环境,这对深入了解后面要讲解的Spark集群运行的基本原理非常有用。
可以利用虚拟机软件VirtualBox复制出来的CentOS镜像文件,快速搭建3个CentOS虚拟主机来做集群。
完整的集群主机配置如表2-2所示。
从表2-1中可以看出,server101运行的进程比较多,且NameNode运行在上面,所以这台主机需要更多的内存。
由于需要使用3台Linux服务器搭建集群环境,因此推荐使用VirtualBox把2.2节配置好的虚拟机CentOS7-201复制出来,稍微做些修改,即可快速搭建Hadoop完全分布式环境。
(1)把CentOS7-201复制为CentOS7-101,按下面的
~
核对和修改相关配置,已经配置好的可以跳过去。
(2)把CentOS7-101复制为CentOS7-102、CentOS7-103,由于此时CentOS7-101已基本配置好了,复制出来的CentOS7-102、CentOS7-103只需修改主机名称和IP地址即可。
(3)3台虚拟机配置好了以后,再按下面的
和
运行这个完全分布式集群。
Hadoop完全分布式环境如图2-36所示。
图2-36 Hadoop完全分布式环境
完成准备工作。
(1)所有主机安装JDK1.8+。建议将JDK安装到不同主机的相同目录下,这样可以减少修改配置文件的次数。
(2)在主节点(即执行start-dfs.sh和start-yarn.sh的主机)上向所有其他主机做SSH免密码登录。
(3)修改所有主机的名称和IP地址。
(4)配置所有主机的hosts文件,添加主机名和IP的映射:
192.168.56.101 server101 192.168.56.102 server102 192.168.56.103 server103
(5)使用以下命令关闭所有主机上的防火墙:
systemctl stop firewalld systemctl disable firewalld
在server101上安装Hadoop。
可以将Hadoop安装到任意目录下,如在根目录下,创建/app然后授予hadoop用户即可。
将hadoop-3.2.3.tar.gz解压到/app目录下,并配置/app目录属于hadoop用户:
$ sudo tar -zxvf hadoop-3.2.3.tag.gz -C /app/
将/app目录及子目录授权给hadoop用户和hadoop组:
$suto chown hadoop:hadoop -R /app
接下来的配置文件都在/app/hadoop-3.2.3/etc/hadoop目录下。配置hadoop-env.sh文件:
export JAVA_HOME=/usr/java/jdk1.8.0_361
配置core-site.xml文件:
配置hdfs-site.xml文件:
配置mapred-site.xml文件:
配置yarn-site.xml文件:
配置workers文件。workers文件用于配置执行DataNode和NodeManager的节点:
server101 server102 server103
使用scp将Hadoop分发到其他主机。
由于scp会在网络上传递文件,而hadoop/share/doc目录下都是文档,没有必要进行复制,因此可以删除这个目录。
删除doc目录:
$ rm -rf /app/hadoop-3.2.3/share/doc
然后复制server101的文件到其他两台主机的相同目录下:
$scp -r /app/hadoop-3.2.3 server102:/app/ $scp -r /app/hadoop-3.2.3 server103:/app/
在server101上格式化NameNode。
首先需要在server101上配置Hadoop的环境变量。打开/etc/profile文件:
$ sudo vim /etc/profile
在文件最后追加以下内容:
export HADOOP_HOME=/app/hadoop-3.2.3 export PATH=$PATH:$HADOOP_HOME/bin
在server101上执行namenode初始化命令:
$ hdfs namenode -format
启动HDFS和YARN。
在server101上执行启动工作时,由于配置了集群,此启动过程会以SSH方式登录其他两台主机,并分别启动DataNode和NodeManager。
$ /app/hadoop-3.2.3/sbin/start-dfs.sh $ /app/hadoop-3.2.3/sbin/start-yarn.sh
启动完成后,通过宿主机的浏览器查看9870端口,页面会显示集群情况。即访问http://192.168.56.101:9870,会发现同时存在3个DataNode节点,如图2-37所示。
图2-37 存在3个DataNode节点
访问http://192.168.56.101:8088,会发现同时存在集群的3个活动节点,如图2-38所示。
图2-38 存在集群的3个活动节点
执行MapReduce测试集群。
建议执行MapReduce测试一下集群,比如执行WordCount示例,如果可以顺利执行完成,则说明整个集群的配置都是正确的。首先创建一个文本文件a.txt,并输入几行英文句子:
[hadoop@server101 ~]$ vim a.txt Hello This is a Very Sample MapReduce Example of Word Count Hope You Run This Program Success!
然后分别执行以下命令:
[hadoop@server101 ~]$ hdfs dfs -mkdir -p /home/hadoop [hadoop@server101 ~]$ hdfs dfs -mkdir /home/hadoop [hadoop@server101 ~]$ hdfs dfs -put ./a.txt /home/hadoop [hadoop@server101 ~]$ yarn jar /app/hadoop-3.2.3/share/hadoop/mapreduce/ hadoop-mapreduce-examples-3.2.3.jar wordcount ~/a.txt /out002