【图书介绍】《Spark SQL大数据分析快速上手》-CSDN博客
大数据与数据分析_夏天又到了的博客-CSDN博客
本文介绍Hadoop完全分布式环境搭建方法,这个Hadoop环境用于安装配置Spark。假设读者已经安装好Visual Box 7.0.6虚拟环境与一个CentOS 7虚拟机(如果不熟悉这两个步骤,可以反馈给博主,博主将另外上个博文讲解)。
下载安装Visual Box 7.0.6
Visual Box 7.0.6百度Oracle网站下载,安装过程很简单,按其安装向导提示,即可安装成功。
下载安装CentOS 7
下载CentOS 7,阿里云镜像下载地址:
centos-7-isos-x86_64安装包下载_开源镜像站-阿里云
下载完成后,在Visual Box虚拟环境中安装CentOS 7操作系统,详细步骤略去。
Linux的统一设置
后面配置Hadoop环境时将使用一些Linux的统一设置,在此一并列出。由于本次登录是用root登录的(见图2-30),因此可以直接操作某些命令,而不用添加sudo命令。
1. 配置主机名称
笔者习惯将“server+IP最后一部分数字”作为主机名称,所以取主机名为server201,因为本主机设置的IP地址是192.168.56.201。
# hostnamectl set-hostname server201
2. 修改hosts文件
在hosts文件的最后,添加以下配置(这可通过vim /etc/hosts命令进行修改):
192.168.56.201 server201
3. 关闭且禁用防火墙
# systemctl stop firewalld# systemctl disable firewalld
4. 禁用SElinux,需要重新启动
#vim /etc/selinux/configSELINUX=disabled
5. 设置时间同步(可选)
#vim /etc/chrony.conf
删除所有的server配置,只添加:
server ntp1.aliyun.com iburst
重新启动chronyd:
#systemctl restart chronyd
查看状态:
#chronyc sources -v^* 120.25.115.20
如果结果显示“*”,则表示时间同步成功。
6. 在/usr/java目录下安装JDK1.8
usr目录的意思是unix system resource目录,可以将JDK1.8的Linux x64版本安装到此目录下。
首先去Oracle网站下载JDK1.8的Linux压缩包版本。
然后将压缩包上传到Linux并解压(作者使用jdk-8u361版本做演示):
# mkdir /usr/java# tar -zxvf jdk-8u361-linux-x64.tar.gz -C /usr/java/
7. 配置JAVA_HOME环境变量
# vim /etc/profile
在profile文件最后添加以下配置:
export JAVA_HOME=/usr/java/jdk1.8.0_361export PATH=.:$PATH:$JAVA_HOME/bin
让环境变量生效:
# source /etc/profile
检查Java版本:
[root@localhost bin]# java -versionjava version "1.8.0_361"Java(TM) SE Runtime Environment (build 1.8.0_361-b09)Java HotSpot(TM) 64-Bit Server VM (build 25.361-b09, mixed mode)
到此,基本的Linux运行环境就已经配置完成了。
在VirtualBox虚拟机中,可以通过复制的方式,为本小节已经做了统一设置的CentOS镜像文件创建副本,用于备份或者搭建集群。
8. 为hadoop账户创建统一的工作空间/app
接下来创建一个工作目录/app,方便我们以hadoop账户安装、配置与运行Spark相关程序。
在磁盘根目录(/)下,创建一个app目录,并授权给hadoop用户。我们会将Spark以及其他相关的软件安装到此目录下。
以root账户切换到根目录下:
[hadoop@server201 ~]# cd /
添加sudo前缀,使用mkdir创建/app目录:
[hadoop@server201 /]# sudo mkdir /app[sudo] hadoop 的密码:
将此目录的所有权授予hadoop用户和hadoop组:
[hadoop@server201 /]# sudo chown hadoop:hadoop /app
su hadoop账户,切换进入/app目录:
[hadoop@server201 /]$ cd /app/
使用ll -d命令查看本目录的详细信息:
[hadoop@server201 app]$ ll -ddrwxr-xr-x 2 hadoop hadoop 6 3月 9 21:35 .
可见此目录已经属于hadoop用户。
搭建Hadoop完全分布式环境
由于Spark在将Yarn作为集群管理器时会用到Hadoop,因此在安装Spark之前,先要把Hadoop完全分布式(集群)环境搭建起来。在Hadoop的集群中,有一个NameNode,一个ResourceManager;在高可靠的集群环境中,可以拥有两个NameNode和两个ResourceManager;在Hadoop3以后,同一个NameService可以拥有3个NameNode。由于NameNode和ResourceManager是两个主要的服务,因此建议将它们部署到不同的服务器上。
下面以3台服务器为例,来快速搭建Hadoop的完全分布式环境,这对深入了解后面要讲解的Spark集群运行的基本原理非常有用。
注意:可以利用虚拟机软件VirtualBox复制出来的CentOS镜像文件,快速搭建3个CentOS虚拟主机来做集群。
完整的集群主机配置如表2-1所示。
从表2-1中可以看出,server101运行的进程比较多,且NameNode运行在上面,所以这台主机需要更多的内存。
由于需要使用3台Linux服务器搭建集群环境,因此推荐使用VirtualBox把2.2节配置好的虚拟机CentOS7-201复制出来,稍微做些修改,即可快速搭建Hadoop完全分布式环境。
(1)把CentOS7-201复制为CentOS7-101,按下面的步骤(1)~步骤(3) 核对和修改相关配置,已经配置好的可以跳过去。
(2)把CentOS7-101复制为CentOS7-102、CentOS7-103,由于此时CentOS7-101已基本配置好了,复制出来的CentOS7-102、CentOS7-103只需修改主机名称和IP地址即可。
(3)3台虚拟机配置好了以后,再按下面的步骤(4) 和步骤(5) 运行这个完全分布式集群。
Hadoop完全分布式环境如图2-36所示。
图2-35 Hadoop完全分布式环境
步骤(1) 完成准备工作。
(1)所有主机安装JDK1.8+。建议将JDK安装到不同主机的相同目录下,这样可以减少
修改配置文件的次数。
(2)在主节点(即执行start-dfs.sh和start-yarn.sh的主机)上向所有其他主机做SSH免密码登录。
(3)修改所有主机的名称和IP地址。
(4)配置所有主机的hosts文件,添加主机名和IP的映射:
192.168.56.101 server101192.168.56.102 server102192.168.56.103 server103
(5)使用以下命令关闭所有主机上的防火墙:
systemctl stop firewalldsystemctl disable firewalld
步骤(2) 在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文件:
<configuration><property><name>fs.defaultFS</name><value>hdfs://server101:8020</value></property><property><name>hadoop.tmp.dir</name><value>/app/datas/hadoop</value></property>
</configuration>
配置hdfs-site.xml文件:
<configuration><property><name>dfs.namenode.name.dir</name><value>/app/hadoop-3.2.3/dfs/name</value></property><property><name>dfs.datanode.data.dir</name><value>/app/hadoop-3.2.3/dfs/data</value></property><property><name>dfs.replication</name><value>3</value></property><property><name>dfs.permissions.enabled</name><value>false</value></property>
</configuration>
配置mapred-site.xml文件:
<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property>
</configuration>
配置yarn-site.xml文件:
<configuration><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><name>yarn.resourcemanager.hostname</name><value>server101</value></property><property><name>yarn.application.classpath</name><value>请自行执行hadoop classpath命令并将结果填入</value></property>
</configuration>
配置workers文件。workers文件用于配置执行DataNode和NodeManager的节点:
步骤(3) 使用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/
步骤(4) 在server101上格式化NameNode。
首先需要在server101上配置Hadoop的环境变量。打开/etc/profile文件:
$ sudo vim /etc/profile
在文件最后追加以下内容:
export HADOOP_HOME=/app/hadoop-3.2.3export PATH=$PATH:$HADOOP_HOME/bin
在server101上执行namenode初始化命令:
步骤(5) 启动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-36所示。
图2-36 存在3个DataNode节点
访问http://192.168.56.101:8088,会发现同时存在集群的3个活动节点,如图2-37所示。
图2-37 存在集群的3个活动节点
步骤(6) 执行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
至此,就完成了Hadoop完全分布式环境的搭建。