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

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

 1 ,  前期准备

1.1  ,  准备Linux环境,配置虚拟机网络环境,修改虚拟机IP地址(最好使用第一种配置,简单且不容易出错)

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

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

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

vi /etc/hosts

           

关闭防火墙 service iptables stop  
关闭开机自启 chkconfig iptables off
重启虚拟机  reboot 

参考https://blog.csdn.net/qq_25838777/article/details/80732854

 

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 ,  安装集群所需要的各个软件

  3.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

    3.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

 

  3.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

        点击此处跳转至详细配置文档https://blog.csdn.net/qq_25838777/article/details/80734916

注意:core-site中指定hdfs的nameservice名称(fs.defaultFS)可以随意命名,但是必须与hdfs-site中的(dfs.nameservices)保持一致

 3.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中信息改为如下所示

[root@weekend01 hadoop]#cat slaves
weekend05
weekend06
weekend07

 

 3.5 配置免密码登陆

(点击此处跳转详细配置方法文档https://blog.csdn.net/qq_25838777/article/details/80653481

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

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

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

 

3.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

按照下面的步骤启动集群


3.7 启动zookeeper集群

(分别在weekend05、weekend06、weekend07上启动zk)
cd /usr/app/zookeeper-3.4.5/bin/
./zkServer.sh start
#查看状态:一个leader,两个follower
./zkServer.sh status


3.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进程


3.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.10格式化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.12启动HDFS(在weekend01上执行)

sbin/start-dfs.sh


3.13 启动YARN

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

sbin/start-yarn.sh

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

yarn-daemon.sh start resourcemanager

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

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

weekend03 , weekend04 含有的进程:ResourceManager

weekend05 , weekend06,weekend07 含有的进程:NodeManager,DataNode,JournalNode,QuorumPeerMain

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

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),保证两个网卡不冲突并且在同一个网段即可。


原文:https://blog.csdn.net/qq_25838777/article/details/80732854 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章