超详细Hadoop HA高可用集群搭建及常见问题处理

首先给大家推荐一下我老师大神的人工智能教学网站。教学不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵黄段子!点这里可以跳转到网站

       最近研究了下公司的hadoop集群并模仿搭建了一个在本地测试使用的hadoop集群。本文介绍下详细的搭建过程以及各种常见问题的处理解决。

 1 ,  前期准备

    1.0  ,  准备Linux环境。

        安装vmware linux虚拟机,因为Centos 7 和Centos 6版本部分命令差别还挺多了,所以我本次用的Centos 6版本,用什么你随意,高兴就好。 集群中虚拟机需要几步必须的配置(本次集群的搭建我搞了7台虚拟机,原因下面有介绍),这里我们先配置好一台虚拟机的公共配置,然后其余的克隆出来即可,配置如下 :

              配置虚拟机网络环境

              打开你的vmware, 点击编辑->虚拟网络编辑器 -> VMnet8 ,注意ip地址以及网关和你windows本地vmnet8 的映射关系,网关保持一直,并且ip地址要在统一网段内,实在不懂的模仿这如下截图来就行,具体原因文章底部有详细讲解,如图我本地配置截图。

                合理设置每台虚拟机内存,处理器,硬盘等信息

                如下是我电脑配置截图。根据自己电脑配置酌情设置每台的硬件信息。

  1.2 , 修改虚拟机IP地址(最好使用第一种配置,简单且不容易出错)

        注意,修改之前建议使用 root 管理员权限登陆,这样会避免特别多问题,等集群搭建好之后在用普通用户登陆。

        7 台虚拟机ip地址最好整个连号,比如我本地是 192.168.2.201 到 192.168.2.207

        第一种:通过Linux图形界面进行修改。
进入Linux图形界面 -> 右键点击右上方的两个小电脑 -> 点击Edit connections -> 选中当前网络System eth0 -> 点击edit按钮 -> 选择IPv4 -> method选择为manual -> 点击add按钮 -> 添加IP:192.168.2.201 子网掩码:255.255.255.0 网关:192.168.2.1 -> apply
第二种:修改配置文件方式
vi /etc/sysconfig/network-scripts/ifcfg-eth0

 1.3  ,  修改主机名和ip的映射关系

            保存退出 (键盘 Shift + :  , 输入小写 wq ,然后 enter ) 

            关闭防火墙 service iptables stop  

            关闭开机自启 chkconfig iptables off

   1.4 ,  完成上述配置操作后重启虚拟机

                reboot 

    注 : 将另外6台虚拟机复制出来需注意的问题

   1 ,IP地址配置问题。

                我们第一台虚拟机配置好后用的是 eth0 网卡,但是克隆出来的的其他虚拟机会自动多处自己的新网卡(eth1,eth2….),实际起作用的是eth1,eth0是从之前克隆过来的,eth1才是我们需要的。克隆系统会重新生成一个mac地址,因此系统会在eth0加1变成eth1, 这里我们需要将每台虚拟机网卡都配置成使用eth0, 这样一会会避免一些可能发生的网络问题。

                vi /etc/udev/rules.d/70-persistent-net.rules

        将该文件中第一个etho注掉, 并将第二个eth1 改为 ehto , 复制他的mac地址(ATTR{address})。        

        修改完成后保存退出。

        输入命令 进入这个文件,将其中的HWADDR 改为刚才复制的mac地址。    

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

        保存退出。

        最后重启网络服务 service network restart

        查看etho 网卡信息 ifconfig

        执行 ping www.baidu.com , 如果可以ping通的话,标识配置成功。

2 ,  集群规划

主机名 IP 安装的软件 运行的进程
weekend01 192.168.2.201     jdk hadoop NameNode、DFSZKFailoverController(zkfc)
weekend02 192.168.2.202     jdk hadoop NameNode、DFSZKFailoverController(zkfc)
weekend03 192.168.2.203 jdk hadoop ResourceManager
weekend04 192.168.2.204 jdk hadoop ResourceManager
weekend05 192.168.2.205 jdk hadoop zookeeperDataNode、NodeManager、JournalNode、QuorumPeerMain
weekend06 192.168.2.206 jdk hadoop zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain

weekend07 192.168.2.207 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain

3 ,  安装集群所需要的各个软件

2.1 安装JDK (在第weekend01上安装)

        上传jdk压缩包,我用的是jdk7 ,

        创建文件夹 mkdir /usr/app

        解压 tar -zxvf jdk-7u55-linux-i586.tar.gz -C /usr/app

       添加环境变量

        vi /etc/profile

        在文件最后添加
export JAVA_HOME=/usr/app/jdk-7u_65-i585

export PATH=$PATH:$JAVA_HOME/bin

        刷新配置

source /etc/profile

    2.2 安装配置 zookeeper (在第weekend05上安装)

        上传zookeeper压缩包并解压到 /usr/app文件夹下

       修改配置
        cd /usr/app/zookeeper-3.4.5/conf/
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
修改:dataDir=/usr/app/zookeeper-3.4.5/tmp
在最后添加:
server.1=weekend05:2888:3888
server.2=weekend06:2888:3888
server.3=weekend07:2888:3888
保存退出
创建一个tmp文件夹
mkdir /usr/app/zookeeper-3.4.5/tmp
再创建一个空文件
touch /usr/app/zookeeper-3.4.5/tmp/myid
最后向该文件写入ID

echo 1 > /usr/app/zookeeper-3.4.5/tmp/myid

    配置好的zookeeper拷贝到其他节点(首先分别在weekend06、weekend07根目录下创建一个目录:mkdir /usr/app)
scp -r /usr/app/zookeeper-3.4.5/ weekend06:/usr/app/
scp -r /usr/app/zookeeper-3.4.5/ weekend07:/usr/app/
注意:修改weekend06、weekend07对应/usr/app/zookeeper-3.4.5/tmp/myid内容
weekend06:
echo 2 > /usr/app/zookeeper-3.4.5/tmp/myid
        weekend07:
echo 3 > /usr/app/zookeeper-3.4.5/tmp/myid

  2.3 安装hadoop (在第weekend01上安装)

        上传hadoop压缩包,我用的是2.4版本    

        同样解压到 /usr/app文件夹下面

        将hadoop添加到环境变量中
vi /etc/profile
export JAVA_HOME=/usr/app/jdk-7u_65-i585
export HADOOP_HOME=/usr/app/hadoop-2.4.1

export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin

        配置修改 /usr/app/hadoop-2.4.1/etc/hadoop 路径下如下5个文件

        hadoo-env.sh ,core-site.xml,hdfs-site.xml,mapred-site.xml,yarn-site.xml

        点击此处跳转至详细配置文档

 2.4 修改slaves

(slaves是指定子节点的位置,因为要在weekend01上启动HDFS、在weekend03启动yarn,所以weekend01上的slaves文件指定的是datanode的位置,weekend03上的slaves文件指定的是nodemanager的位置)

分别修改 weekend01 和 weekend03上的配置文件

  vi  /usr/app/hadoop-2.4.1/etc/hadoop

    将slavles中信息改为如下所示

2.5 配置免密码登陆 (点击此处跳转详细配置方法文档)

配置weekend01到weekend02、weekend03、weekend04、weekend05、weekend06、weekend07的免密码登陆

配置weekend03到weekend04、weekend05、weekend06、weekend07的免密码登陆

两个namenode之间要配置ssh免密码登陆,别忘了配置weekend02到weekend01的免登陆

2.6 将配置好的hadoop及zookeeper拷贝到其他节点

在weekend01上执行 如下 : 

scp -r /usr/app/hadoop-2.4.1/ weekend01:/usr/app
scp -r /usr/app/hadoop-2.4.1/ weekend02:/usr/app
……..
scp -r /usr/app/hadoop-2.4.1/ weekend07:/usr/app

在weekend05上执行如下 :

scp -r /usr/app/zookeeper-3.4.5/ weekend06:/usr/app

scp -r /usr/app/zookeeper-3.4.5/ weekend07:/usr/app

按照下面的步骤启动集群
2.7 启动zookeeper集群(分别在weekend05、weekend06、weekend07上启动zk)

cd /usr/app/zookeeper-3.4.5/bin/
./zkServer.sh start
#查看状态:一个leader,两个follower
./zkServer.sh status


2.8启动journalnode(分别在在weekend05、weekend06、weekend07上执行)最下方有关系图解

注: journalnode为qjournal分布式应用(可用来管理)的管理edit.log文件,依赖于zk管理,所以将三个node节点放到zk上启动。hadoop1.x中还是用secondynode管理edit.log文件,而hadoop2.x使用qjournal管理edit.log文件。
cd /usr/app/hadoop-2.4.1
sbin/hadoop-daemon.sh start journalnode
#运行jps命令检验,weekend05、weekend06、weekend07上多了JournalNode进程


2.9格式化HDFS(仅第一次启动执行)
#在weekend01上执行命令:
hdfs namenode -format
#格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里我配置的是/weekend/hadoop-2.4.1/tmp,然后将/usr/app/hadoop-2.4.1/tmp拷贝到weekend02的/usr/app/hadoop-2.4.1/下。
scp -r tmp/ weekend02:/usr/app/hadoop-2.4.1/
##也可以这样,建议hdfs namenode -bootstrapStandby


3.1格式化ZKFC(在weekend01上执行即可)(仅第一次启动执行)

注:zkfc是用来管理两台namenode切换状态的进程。同样是依赖zk实现。当active namenode状态不正常了,该namenode上的zkfc会制一个状态发动到 zk上,standby namenode上的zkfc会查看到该不正常状态,并向active namenode通过ssh发送一条指令,kill -9 进程号,杀死该进程,并将自己重置成active,放置active假死发生脑裂事件,万一ssh发送失败,也可以启动自定义的.sh脚本文件,强制杀死active namenode进程。

在hadoop2.x中将这也的一对namenode管理关系叫做 federation(联邦)最下方有图解。

并且支持多个federation,  比如配置文件中起名为ns1, 则该ns1中包括 (active namenode)nn1, (standby namenode)nn2 。
hdfs zkfc -formatZK


3.2启动HDFS(在weekend01上执行)
sbin/start-dfs.sh


3.3 启动YARN(在weekend03上执行start-yarn.sh,把namenode和resourcemanager分开是因为性能问题,因为他们都要占用大量资源,所以把他们分开了,他们分开了就要分别在不同的机器上启动)

sbin/start-yarn.sh

weekend04上面的resourcemanager 需要自己手动去启动下,

yarn-daemon.sh start resourcemanager

到这里hadoop HA集群配置完毕,查看各个集群节点上的进程验证是否成功启动

搭建成功情况下 weekend01 , weekend02 含有的进程

weekend03 , weekend04 含有的进程

weekend05 , weekend06,weekend07 含有的进程

可以在网页查看各个服务运行状态 : 

HDFS  :  http://weekend01:50070    

ResourceManager :  http://weekend03:8088

下图为常见默认端口号: 

附 : 配置虚拟机网络环境配置分析

首先vmware 会产生一个虚拟网关,同时vmware 上面的虚拟机上面也有网关。

而我们的实际windows上有一块实际的网关,同事vmware 也会给我们windows生成一个虚拟网卡,快捷键 win + R 可以看到该网卡,名字叫做 VMware NetWork Adapter VMnet8 ,这个网卡当然就会与vmware 进行连接。 这样的话通过 vmware软件,就把你的centos虚拟机和本地windows主机组成一个虚拟的网络。 

这样 vmware虚拟网关为 192.168.2.1 的话,那么centos虚拟机网关为192.168.2.1,网卡ip可以配置为 192.168.2.100(1–>255),而本地vmnet8 虚拟机网关同样为192.168.2.1,网卡ip可以配置为 192.168.2.101(1–255),保证两个网卡不冲突并且在同一个网段即可。

点这里可以跳转到人工智能网站

发表评论