前言

我们之前搭建了Hadoop的伪分布式的集群,伪分布式的集群对于学习一些基础的Hadoop操作是足够的,但是当你涉及到更复杂的操作时,伪分布式就不够了,完全分布式的性能比伪分布的要强,而且完全分布式可操作性也更高,与此同时完全分布式对于电脑的配置也要求更高,完全分布式一般需要3台虚拟机来完成,下面我们开始搭建自己的完全分布式。

使用环境

下面是本次搭建使用的环境

操作环境 主机名 IP地址 jdk hadoop版本
centos6.8 hadoop102 192.168.128.172 jdk1.8.0_191 hadoop-2.7.2
hadoop103 192.168.128.173
hadoop104 192.168.128.174

本文中使用的各种包,后续我会进行上传,以方便读者的使用

搭建步骤详解

1.修改各节点的网络配置

在虚拟机中输入

vim /etc/sysconfig/network-scripts/ifcfg-eth0

可以进入虚拟机的网卡配置

我们需要修改虚拟机的网卡默认配置,将我们的虚拟机的网卡配置设置为静态ip

ip地址 根据 VMware 虚拟网络进行相关配置 如图

在虚拟机里修改配置可以如图所示

修改完输入

service network restart

重启网络服务

对其他两个hadoop节点也同样做上述操作,只不过在IPADDR值不一样,分别填其节点对应的ip

2.修改节点主机名,并且添加各节点映射

在命令行中输入

vim /etc/sysconfig/network

进入文件中修改hostname名称,如图所示

在其他两个子节点的hostname处分别填hadoop103和hadoop104

添加节点映射,输入

vim /etc/hosts

添加节点映射为

我这里是多写了一些,对于这次搭建我们只需要添加hadoop102,hadoop103,hadoop104的节点映射即可

3.关闭防火墙

我们只有关闭防火墙后才能在三台机器之间互相通信

所以关闭防火墙是很有必要的

我们可以使用这条命令来检查我们虚拟机开机时的防火墙状态

chkconfig iptables --list	

如果是已经关闭应该会如下图所示

如果没有关闭我们可以使用这两条命令来关闭我们的防火墙

service iptables stop

这条命令是在本次虚拟机开启过程中关闭防火墙,也就是一次性关闭

我们还需要这条命令

chkconfig iptables  off 

禁止防火墙关机自启动,这样防火墙就是是关闭了

当hadoop102关闭防火墙后,对于hadoop103与hadoop104也要做同样的操作

在防火墙关闭完成后,输入

reboot

重启虚拟机,检查防火墙是否已经关闭

4.配置节点间ssh免密登陆

在hadoop102上输入

ssh-keygen -t rsa

一直按回车

完成后在保证三台虚拟机开启且完成之前所有配置的情况下输入

(注如果提示not found 可能是ssh没有安装,输入

yum install openssh-clients

安装openssh)

[root@hadoop102 ~]# ssh-copy-id hadoop102
[root@hadoop102 ~]# ssh-copy-id hadoop103
[root@hadoop102 ~]# ssh-copy-id hadoop104

在hadoop102上完成后,在其他两个节点上重复上述操作

验证ssh免密登录是否成功

这里可以看到我们可以自己使用ssh转到hadoop103这台机器上

5.安装java和hadoop

我们先使用xftp将hadoop和java的压缩包上传到我们新建的/opt/software上同时新建一个module文件夹放置解压后的hadoop和java,新建文件夹代码如下

[root@hadoop102 ~]# cd /opt/
[root@hadoop102 ~]# mkdir software
[root@hadoop102 ~]# mkdir module

上传完成之后我们需要解压java和hadoop到/opt/module下,以便未来的管理

解压代码如下

tar -zxf jdk-8u191-linux-x64.tar.gz -C /opt/module/
tar -zxf hadoop-2.7.2.tar.gz -C /opt/module/

解压完成后在/opt/module下应该是这样的,如图所示

之后我们就需要配置环境变量

vi /etc/profile

在最后添加

export JAVA_HOME=/opt/module/jdk1.8.0_191
export PATH=$PATH:$JAVA_HOME/bin

export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

退出后,输入

source /etc/profile

使其生效

验证java和hadoop环境变量是否配置完成

[root@hadoop103 module]# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
[root@hadoop103 module]# hadoop version
Hadoop 2.7.2
Subversion Unknown -r Unknown
Compiled by root on 2017-05-22T10:49Z
Compiled with protoc 2.5.0
From source with checksum d0fda26633fa762bff87ec759ebe689c
This command was run using /opt/module/hadoop-2.7.2/share/hadoop/common/hadoop-common-2.7.2.jar
[root@hadoop103 module]#

环境变量已经配置完成, 在其他两个节点上重复上述操作

6.配置hadoop中的文件

6.1配置文件core-site.xml

core-site.xml文件包含了NameNode主机地址,监听端口等信息,对于这个完全分布式模型来说,我的主机地址为hadoo101,NameNode默认使用的端口为8020。

修改core-site.xml

<configuration>
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:8020</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
</configuration>

6.2配置文件hdfs-site.xml

hdfs-site.xml用于配置/HDFS的相关属性,例如数据块的副本参数,数据块的副本对于完全分布式来说应该为3

<configuration>

<property>
<name>dfs.replication</name>
<value>3</value>
</property>

<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:50090</value>
</property>

<property>
<name>dfs.name.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp/name</value>

</property>

<property>
<name>dfs.data.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp/data</value>
</property>



</configuration>

6.3配置文件slaves

slaves文件里面记录的是集群里所有DataNode的主机名

[root@hadoop102 hadoop]#vim slaves
hadoop102
hadoop103
hadoop104

6.4配置文件yarn-site.xml

<configuration>
<!-- Site specific YARN configuration properties -->
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
</configuration>

6.5配置文件yarn-env.sh

在其中修改java的路径

export JAVA_HOME=/opt/module/jdk1.8.0_191

6.6配置hadoop-env.sh

hadoop-env.sh 由于Hadoop是java进程,所以需要添加jdk

修改hadoop-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_191

6.7配置文件mapred-site.xml

先改名,因为本身是没有mapred-site.xml这个文件的

输入

mv mapred-site.xml.template mapred-site.xml

改名完成后

[root@hadoop102 ~]#vim mapred-site.xml

<configuration>
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>

<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
</configuration>

这些配置文件改好后,返回/opt/module目录下

把hadoop102下修改的文件分发到hadoop103和hadoop104下

[root@hadoop102 module]# scp -r hadoop root@hadoop103:/opt/module/
[root@hadoop102 module]# scp -r hadoop root@hadoop104:/opt/module/

7.测试集群

在完成配置文件等一系列工作后,我们要开始测试集群了

先格式化

[root@hadoop2 hadoop-2.7.2]# bin/hdfs namenode –format

之后启动hdfs

[root@hadoop2 hadoop-2.7.2]# sbin/start-dfs.sh

[root@hadoop2 hadoop-2.7.2]# jps
4166 NameNode
4482 Jps
4263 DataNode

[root@hadoop3 桌面]# jps
3218 DataNode
3288 Jps

[root@hadoop4 桌面]# jps
3221 DataNode
3283 SecondaryNameNode
3364 Jps

如果是这样这表示启动hdfs成功

下面启动yarn

sbin/start-yarn.sh

启动完成后

在浏览器上访问可视化页面:http://192.168.128.172:50070

到此为止,hadoop配置就结束了,谢谢大家的阅读。