hadoop2.0生产环境高可用集群原理和搭建


非高可用集群搭建可以参看我写的博客

http://blog.csdn.net/wyl6019/article/details/52874779


1  体系架构图

hadoop2.0生产环境高可用集群原理和搭建_第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 原理

hadoop2.0生产环境高可用集群原理和搭建_第2张图片

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原理

hadoop2.0生产环境高可用集群原理和搭建_第3张图片

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为集群的协调管理框架


          mapreduce.framework.name
          yarn

配置 hadoop集群的jobhistory


          mapreduce.jobhistory.address
          wangyl-4:10020

配置 hadoop集群的jobhistory的webapp,可通过浏览器访问


          mapreduce.jobhistory.webapp.address
          wangyl-4:19888

5.3 yarn-site.xml

开启MR HA

   
       yarn.resourcemanager.ha.enabled  
       true  

指定RM集群的ID

 
       yarn.resourcemanager.cluster-id  
       yrc  

指定RM名称

 
       yarn.resourcemanager.ha.rm-ids  
       rm1,rm2  

指定RM所在节点

   
       yarn.resourcemanager.hostname.rm1  
       wangyl-2  

   
       yarn.resourcemanager.hostname.rm2  
       wangyl-3  

配置MR合并

            yarn.nodemanager.aux-services
            mapreduce_shuffle

指定失效自动切换

            yarn.resourcemanager.recovery.enabled
            true

            yarn.resourcemanager.store.class
            org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore

指定zookeeper集群地址

            yarn.resourcemanager.zk-address
            wangyl-7:2181,wangyl-8:2181,wangyl-9:2181


5.4 core-site.xml


指定HDFS的名称空间为ns1,ns1为逻辑概念,与hdfs-site.xml中一致即可

           fs.defaultFS              
           hdfs://ns1   

指定hadoop的临时存储文件

           hadoop.tmp.dir              
           /usr/local/hadoop-2.1.7/tmp   

指定Zookeeper集群地址

           ha.zookeeper.quorum              
           wangyl-7:2181,wangyl-8:2181,wangyl-9:2181   


5.5  hdfs-site.xml


指定HDFS的名称空间为ns1,ns1为逻辑概念,与core-site.xml中一致即可

           dfs.nameservices              
           ns1   

HDFS的名称空间为ns1下面有两个NameNode,作为HA

           dfs.ha.namenodes.ns1              
           wangyl-0,wangyl-1   

指定wangyl-0的RPC通信地址

           dfs.namenode.rpc-address.ns1.wangyl-0              
           wangyl-0:9000   

指定wangyl-0的HTTP通信地址,可通过web浏览器查看

           dfs.namenode.http-address.ns1.wangyl-0              
           wangyl-0:50070   

指定wangyl-1的RPC通信地址

           dfs.namenode.rpc-address.ns1.wangyl-1              
           wangyl-1:9000   

指定wangyl-1的HTTP通信地址,可通过web浏览器查看

           dfs.namenode.http-address.ns1.wangyl-1              
           wangyl-1:50070   

指定Namenode的元数据在JournalNode上的存放路径

           dfs.namenode.shared.edits.dir              
           qjournal://wangyl-4:8485;wangyl-5:8485;wangyl-6:8485/ns1   

指定JournalNode在本地存储位置

           dfs.journalnode.edits.dir              
           /usr/local/hadoop-2.1.7/journaldata   

开启NameNode失败自动切换

           dfs.ha.automatic-failover.enabled              
           true   

配置失败自动切换方案

           dfs.client.failover.proxy.provider.ns1              
           org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider   

配置隔离机制方式,即主宕机之后,从通过什么方式杀死主NameNode进程,防止脑裂

           dfs.ha.fencing.methods              
          
                   sshfencing
                   shell(bin/true)
         
  

使用ssh隔离机制需要配置免密码登陆文件位置

           dfs.ha.fencing.ssh.private-key-files              
           替换成你的ssh免登陆文件位置   

配置ssh隔离机制超时时间

           dfs.ha.fencing.ssh.connect-timeout              
           30000   


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

你可能感兴趣的:(hadoop2.0生产环境高可用集群原理和搭建)