Hadoop完全分布式集群搭建
环境准备
操作环境 | 主机名 | IP地址 | JDK | hadoop版本 |
---|---|---|---|---|
CentOS7 | hadoop102 | 192.168.128.172 | jdk1.8.0_191 | hadoop-2.7.2 |
CentOS7 | hadoop103 | 192.168.128.173 | jdk1.8.0_191 | hadoop-2.7.2 |
CentOS7 | hadoop104 | 192.168.128.174 | jdk1.8.0_191 | hadoop-2.7.2 |
配置静态IP、主机名及主机映射
1.修改各节点的网络配置
命令行输入
vim /etc/sysconfig/network-scripts/ifcfg-ens33
进入虚拟机的网卡配置
需要修改虚拟机的网卡默认配置,将虚拟机的网卡配置设置为静态ip
ip地址 根据 VMware 虚拟网络进行相关配置 如图
在虚拟机里修改配置可以如图所示
修改完命令行输入:
service network restart
重启网络服务
对其余两个hadoop节点也同样做上述操作,只不过IPADDR值不一样,分别填其节点对应的ip
2.修改节点主机名,并且添加各节点映射
在命令行中输入
vim /etc/hostname
进入文件中修改hostname名称为hadoop102,在其他两个子节点的hostname处分别填hadoop103和hadoop104
配置节点主机映射,命令行输入
vim /etc/hosts
添加节点映射
这里多写了一些,此次搭建只需要添加hadoop102,hadoop103,hadoop104的映射即可
关闭防火墙
关闭防火墙后才能在三台机器之间互相通信
所以关闭防火墙是很有必要的
可以使用这条命令来检查我们虚拟机开机时的防火墙状态
chkconfig iptables --list
如果是已经关闭应该会如下图所示
如果没有关闭我们可以使用这两条命令来关闭我们的防火墙
systemctl stop firewalld
这条命令是在本次虚拟机开启过程中关闭防火墙,也就是一次性关闭
还需要这条命令禁止防火墙关机自启动,这样防火墙就是是关闭了
systemctl disable firewalld.service
当hadoop102关闭防火墙后,对于hadoop103与hadoop104也要做同样的操作
在防火墙关闭完成后,输入
reboot
重启虚拟机,检查防火墙是否已经关闭
配置节点间ssh免密
在hadoop102上输入
ssh-keygen -t rsa
一直按回车
完成后在保证三台虚拟机开启且完成之前所有配置的情况下输入:
[root@hadoop102 ~]# ssh-copy-id hadoop102
[root@hadoop102 ~]# ssh-copy-id hadoop103
[root@hadoop102 ~]# ssh-copy-id hadoop104
注:如果提示not found 可能是ssh没有安装,输入
yum install openssh-clients
安装openssh
在hadoop102上完成后,在其他两个节点上重复上述操作
验证ssh免密登录是否成功
这里可以看到使用ssh登录到了hadoop103节点上
安装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]#
环境变量配置完成, 在其他两个节点上重复上述操作
修改hadoop配置文件
1.修改core-site.xml
core-site.xml文件包含了NameNode主机地址,监听端口等信息,对于这个完全分布式模型来说,此次教程的主机地址为hadoo101,NameNode默认使用的端口为8020。
<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>
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>
3.修改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>
4.修改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>
5.修改slaves
slaves文件里面记录的是集群里所有DataNode的主机名
[root@hadoop102 hadoop]# vim slaves
hadoop102
hadoop103
hadoop104
6.修改yarn-env.sh,配置JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_191
7.修改hadoop-env.sh,配置JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_191
这些配置文件改好后,返回/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/
测试Hadoop集群
格式化namenode
[root@hadoop2 hadoop-2.7.2]# bin/hdfs namenode –format
格式化成功后,启动集群
启动集群
[root@hadoop2 hadoop-2.7.2]# start-all.sh
每个节点上使用jps命令查看hadoop启动状况
hadoop102
[root@hadoop102 hadoop-2.7.2]# jps
hadoop103
[root@hadoop104 hadoop-2.7.2]# jps
hadoop104
[root@hadoop104 hadoop-2.7.2]# jps
启动完成后
在浏览器上访问可视化页面:http://namenode所在节点IP:50070