最全面的CentOS下hadoop的完全分布式搭建
在开始搭建完全分布式之前,请先确保已经掌握hadoop伪分布式的安装。
因为hadoop完全分布式的安装只需在伪分布式的基础上配置三个结点即可,同时对一些配置文件稍加改进。
一、本博客的集群相关配置
本博客主要搭建具有三个节点的完全分布式hadoop集群,结点名称分别为hadoop1、hadoop2、hadoop3。具体信息如下:
二、克隆虚拟机
在搭建好伪分布式的基础,我们不需要在另外单独创建两个虚拟机,直接采用的克隆的方法创建,同时必须确保三台机器的用户名一样。
这部分如果觉得比较困难的同学或者遇到bug无法解决的同学可以直接再单独创建两个虚拟机就好了,然后直接跳到第四步。
进行两次克隆之后,克隆出两个分别名为Hadoop2,Hadoop3的节点
三、进行Hadoop2、Hadoop3的网络配置
1、生成新的MAC地址
因为是克隆虚拟机,所以导致克隆出的两台虚拟机的MAC地址和原虚拟机的相同。所以我需要重新生成新的MAC地址。
2、修改/etc/udev/rules.d/70-persistent-net.rules文件配置
我的虚拟机是创建了两个网卡,eth0(static)用于内网,eth1(dhcp)用于访问外网,其中IP到主机名之间的映射采用的是eth0。所以下面有四个网络,其中两个是新生成的,第一二个是原来的。
删除eth0和eth1所在所在行,并修改eth2为eth0,eth3为eth1,同时配置/etc/sysconfig/network-scripts/ifcfg-eth0 和/etc/sysconfig/network-scripts/ifcfg-eth1中的MAC地址。确保和/etc/udev/rules.d/70-persistent-net.rules中的MAC地址对应
3、修改hadoop2和hadoop3的IP地址并配置主机名到IP地址之间的映射
这部分其实就是CentOS的网络配置,我在之前写的博客CentOS搭建中写的比较详细,这里就不赘述了
四、配置三台主机之间的映射免密登陆(重要)
务必确保这一步完全配置好,否则后面容易出现bug
首先确保在三台主机的/etc/hosts文件中都加入了三个主机到IP地址的映射。
除此之外,因为hadoop1既是NameNode结点,又是datanode结点,其他的两个结点都是datanode结点。所以我们在hadoop1结点启动hdfs模块时,需要远程登录hadoop1、hadoop2、hadoop3结点。因此需要能够在hadoop1上面免密登陆到hadoop1、hadoop2和hadoop3上面。否则我们采用start-dfs.sh命令启动hdfs模块的时候就会报错。
配置方法:
在hadoop1上面依次使用如下命令:ssh-****** -t rsa
cd ~/.ssh/
ssh-copy-id hadoop1
ssh-copy-id hadoop2
ssh-copy-id hadoop3
除此之外,因为hadoop2既是resoucemanager结点,又是nodemanager结点,其他的两个结点都是nodemanager结点。所以我们在hadoop2结点启动yarn模块时,需要远程登录hadoop1、hadoop2、hadoop3结点。因此需要能够在hadoop2上面免密登陆到hadoop1、hadoop2和hadoop3上面。否则我们采用start-yarn.sh命令启动hdfs模块的时候就会报错。
配置方法:
在hadoop2上面依次使用如下命令:ssh-****** -t rsa
cd ~/.ssh/
ssh-copy-id hadoop1
ssh-copy-id hadoop2
ssh-copy-id hadoop3
五、配置相关文件
只需要在hadoop1上面进行配置,配置好之后进行分发。
1、hdfs模块:slaves、core-site.xml、hadoop-env.sh、hdfs-sit.xml
(1)hadoop-env.sh:配置java路径
(2)core-site.xml:这里配置的/opt/app/hadoop-2.5.0/data/tmp目录中的data和tmp是不存在,因此需要单独创建
(3)hdfs-site.xml:在伪分布式中,我们设置了副本数为1,这里不需要设置,主要区分。同时我们在这里加入了secondarynode结点,位置在hadoop3结点上,当然在伪分布式中也可以加入,不过我当时没有配置。
(4)slaves
2、yarn模块:slaves、yarn-site.xml、yarn-env.sh
(1)yarn-env.sh:配置java路径
(2)yarn-site.xml:注意resourcemanager的位置在hadoop2上面
(3)slaves:在hdfs模块中已经配置过了,所以不需要再配置
3、mapreduce:mapred-site.xml(原名:mapred-site.xml.template)
以上全都在hadoop1配置好之后,采用scp -r hadoop安装目录 用户名@主机名:hadoop安装目录
分发到另外两台机器上
三个机器上的hadooop安装路径必须相同
六、运行集群
1、hdfs模块
(1)在Hadoop1上的hadoop安装目录进行格式化:bin/hdfs namenode -format
(2)在hadoop1上的hadoop安装目录执行sbin/start-dfs.sh
启动hdfs模块
这里出现了WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable问题,本身可以忽略,如果有强迫症的人可以参考解决办法
(3)分别在三个结点上使用jps查看进程:
出现上图表示hdfs启动成功。
在浏览器上输入:主机名 or IP地址:50070
查看web页面
2、yarn模块
(1)在hadoop2的hadoop安装目录下输入sbin/start-yarn.sh
命令
(2)在各结点上输入jps查看进程
出现上图表示yarn启动成功。
在浏览器上输入:主机名 or IP地址:8088
查看web页面
3、Mapreduce模块
(1) 在hadoop1的hadoop安装目录下输入sbin/mr-jobhistory-daemon.sh start historyserver
命令启动历史服务器
(2)在hadoop1输入jps查看进程
至此,hadoop完全分布式2三搭建完成了!