#完全分布式搭建
注:hadoop启动之后生成的文件均保存在了临时目录/tmp下,因此每次重新启动之前就需要格式化一回;可在配置文件里配置,这里并没有配置,在后续的文章里会进行介绍
在虚拟机中选择创建5台Ubuntu来进行完全分布式环境的搭建,使用工具SecureCRT 7.3,具体如何配置每台机器的IP地址,并实现联网,参考我的前序文章:VMware虚拟网络配置及原理;环境变量的设置也请参考我的前序文章:Hadoop-2.7.3环境搭建之伪分布式模式
每台机器的hosts文件(在/etc/hosts目录下):
192.168.26.100 master
192.168.26.101 slave1
192.168.26.102 slave2
192.168.26.103 slave3
192.168.26.104 slave4
总体搭建思路
master作为NameNode与ResourceManager
slave1、slave2、slave3均作为DataNode与NodeManager
slave4作为SecondaryNameNode
##在master节点上实现对slave1-slave4节点的控制,因此配置SSH
思路
1.在五台机器上均安装SSH,并生成各自的私钥、公钥对
$>sudo apt-get install ssh
$>ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
2.配置SSH
将master节点上的公钥分别传给slave1-slave4,实现master节点上可以登录slave1-slave4这四个节点并对他们进行操作
原理:master将消息用私钥进行加密,传给slave1-slave4这四台机器,由于这四台机器拥有master节点的公钥,因此可以用master的公钥对传来的消息进行识别并解密,一旦匹配,就实现登陆
操作:分别在slave1-slave4的机器上执行操作:
$>nc -l 8888 > ~/.ssh/id_rsa.pub.master
在master节点上执行操作:
$>nc slave-x 8888 < ~/.ssh/id_rsa.pub
注:slave-x分别代表slave1-slave4,需要分开执行四组即可实现
在master节点上查看效果
$>ssh slave3 ifconfig
示例截图:
##编写脚本文件实现在master节点上对其余四个从节点的控制
1.分发文件脚本
功能:分发/soft里的安装软件
分发环境变量配置文件/etc/environment
分发完全分布式配置文件
$>su root
$>cd /usr/local/bin
$>touch xsync
$>chmod a+x xsync
文件内容:
#!/bin/bash
pcount=$#
if(( pcount<1 )) ; then
echo no args;
exit;
fi
#获得文件名
p1=$1;
fname=`basename $p1`
#获得上级目录的绝对路径 -P获取物理路径
pdir=`cd -P $(dirname $p1) ; pwd`
#获取当前用户名
cuser=`whoami`
#循环
for (( host=101 ;host<105;host=host+1 )) ; do
echo ------------slave$host-----------------
rsync -rvl $pdir/$fname $cuser@slave$host:$pdir
done
2.在五台机器上执行相同命令的脚本
功能:在master节点上使用jps命令查看所有节点的情况
同时删除或是创建相同文件
$>su root
$>cd /usr/local/bin
$>touch xcall
$>chmod a+x xcall
文件内容:
#!/bin/bash
pcount=$#
if(( pcount<1 )) ; then
echo no args;
exit;
fi
echo ----------master----------------
$@
for (( host=101 ;host<105;host=host+1 )) ; do
echo ------------slave$host-----------------
ssh slave$host $@
done
##配置文件的修改
进入/hadoop/etc/hadoop目录下:
1.core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master/</value>
</property>
</configuration>
2.hdfs-site.xml
<configuration>
<property>
<name>fs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
</configuration>
3.mapred-site.xml
因为没有mapred-site.xml这个文件,因此执行命令:
$>cp mapred-site.xml.template mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
**d.yarn-site.xml**
<?xml version="1.0" ?>
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
4.slaves
slave1
slave2
slave3
##向各节点分发配置文件
$>cd /soft/hadoop/etc/hadoop
$>xsync core-site.xml
$>xsync hdfs-site.xml
$>xsync mapred-site.xml
$>xsync yarn-site.xml
$>xsync slaves
##格式化
$>hadoop namenode -format
##启动hadoop集群
$>start-all.sh
##查看情况
$>xcall jps
成功截图:
通过浏览器进行浏览: