非高可用集群搭建可以参看我写的博客
http://blog.csdn.net/wyl6019/article/details/52874779
1 体系架构图
集群节点分配情况
192.168.100.200 wangyl-0 Active NameNode
192.168.100.201 wangyl-1 Standby Namenode
192.168.100.202 wangyl-2 Active ResourceManager
192.168.100.203 wangyl-3 Standby ResourceManager
192.168.100.204 wangyl-4 DataNode、JournalNode、NodeManager
192.168.100.205 wangyl-5 DataNode、JournalNode、NodeManager
192.168.100.206 wangyl-6 DataNode、JournalNode、NodeManager
192.168.100.207 wangyl-7 Zookeeper
192.168.100.208 wangyl-8 Zookeeper
192.168.100.209 wangyl-9 Zookeeper
2 准备工作
配置每一个节点的/ect/hosts文件
配置SSH免密码登陆
安装JDK
3 HDFS HA 原理
fsimage:元数据的镜像文件,可以认为是元数据在保存在磁盘的一个副本;
edits:日记文件,记录元数据变化操作;
NameNode:有两种状态,Active状态为激活状态,对外提供服务,Standby状态为热备,当Active宕机之后对外提供服务;
JournalNode:hadoop自带的共享存储系统,一个轻量级的进程;
ZKFC:Zookeeper的客户端,在NameNode节点上作为守护进程启动;
主备NameNode数据实时同步流程:
当集群启动后,一个NameNode节点处于Active状态,对外提供服务,并把editLog写到本地和共享存储系统(可以是JournalNode);另外一个NameNode处于Standby状态,启动的时候会去加载元数据的镜像文件fsimage,并周期性去共享存储系统中读edits,保持与Active的NameNode状态同步;为了确保主备切换高效,DataNode需要同时向两个NameNode汇报block to report信息,因为主备切换最耗时的就是处理DataNode的report block;生产环境中为了提高自动化切换,引入了Zookeeper集群和ZKFC进程,ZKFC进程在每一个NameNode上都存在,ZKFC与Zookeeper通信,通过Zookeeper选主。
4 ResourceManager HA原理
ResourceManager的主备也是用过Zookeeper集群实现,每一个ResourceManager节点存在一个ZKFC轻量级的守护进程,负责与Zookeeper集群通信,当主RM宕机之后,迅速切换来实现HA;
5 具体搭建步骤
zookeeper集群搭建省略
目录规划
hadoop安装目录 :/usr/local
hadoop临时文件目录:/usr/local/hadoop-2.7.1/tmp
journalNode存储目录:/usr/local/hadoop-2.7.1/journaldata
5.1 hadoop-env.xml文件
export JAVA_HOME=
修改为你自己的${JAVA_HOME}
5.2 mapred-site.xml
配置yarn为集群的协调管理框架
配置 hadoop集群的jobhistory
配置 hadoop集群的jobhistory的webapp,可通过浏览器访问
5.3 yarn-site.xml
开启MR HA
指定RM集群的ID
指定RM名称
指定RM所在节点
指定失效自动切换
5.4 core-site.xml
指定HDFS的名称空间为ns1,ns1为逻辑概念,与hdfs-site.xml中一致即可
指定Zookeeper集群地址
5.5 hdfs-site.xml
指定HDFS的名称空间为ns1,ns1为逻辑概念,与core-site.xml中一致即可
HDFS的名称空间为ns1下面有两个NameNode,作为HA
指定wangyl-0的RPC通信地址
指定wangyl-0的HTTP通信地址,可通过web浏览器查看
指定wangyl-1的RPC通信地址
指定wangyl-1的HTTP通信地址,可通过web浏览器查看
指定Namenode的元数据在JournalNode上的存放路径
指定JournalNode在本地存储位置
开启NameNode失败自动切换
配置失败自动切换方案
配置隔离机制方式,即主宕机之后,从通过什么方式杀死主NameNode进程,防止脑裂
使用ssh隔离机制需要配置免密码登陆文件位置
配置ssh隔离机制超时时间
5.5 slaves文件
NameNode的指定的是DataNode节点,ResourceManager指定的是NodeManager节点
wangyl-4
wangyl-5
wangyl-6
至此,将配置好的hadoop拷贝到其它节点上
6 启动
6.1 启动Zookeeper集群
在wangyl-7,wangyl-8,wangyl-9三个节点上
./zkServer.sh start
6.2 启动JournalNode
在wangyl-4,wangyl-5,wangyl-6三个节点上
sbin/hadoop-daemon.sh start journalnode
6.3 格式化HDFS(只在第一次启动的时候)
在wangyl-0节点上
hdfs namenode -format
执行成功之后会在core-site.xml配置的hadoop.tmp.dir路径下生成文件,我的是/usr/local/hadoop-2.7.1/tmp,将/usr/local/hadoop-2.7.1/tmp拷贝到wangyl-1下
6.4 格式化ZKFC
在wangyl-0节点上
hdfs zkfc -formatZK
6.5 启动HDFS
在wangyl-0节点上
sbin/start-dfs.sh
6.6 启动ResourceManager
在wangyl-2节点上
sbin/start-yarn.sh
在wangyl-3节点上
sbin/yarn-daemon.sh start resourcemanager