您的位置:首页 > 运维架构 > 网站架构

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

2016-12-05 15:41 573 查看
非高可用集群搭建可以参看我写的博客
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为集群的协调管理框架

<property>

          <name>mapreduce.framework.name<
4000
;/name>

          <value>yarn</value>

</property>

配置 hadoop集群的jobhistory

<property>

          <name>mapreduce.jobhistory.address</name>

          <value>wangyl-4:10020</value>

</property>

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

<property>

          <name>mapreduce.jobhistory.webapp.address</name>

          <value>wangyl-4:19888</value>

</property>

5.3 yarn-site.xml

开启MR HA

 <property>  

       <name>yarn.resourcemanager.ha.enabled</name>  

       <value>true</value>  

</property>

指定RM集群的ID

<property>  

       <name>yarn.resourcemanager.cluster-id</name>  

       <value>yrc</value>  

</property>

指定RM名称

<property>  

       <name>yarn.resourcemanager.ha.rm-ids</name>  

       <value>rm1,rm2</value>  

</property>

指定RM所在节点

 <property>  

       <name>yarn.resourcemanager.hostname.rm1</name>  

       <value>wangyl-2</value>  

</property>

 <property>  

       <name>yarn.resourcemanager.hostname.rm2</name>  

       <value>wangyl-3</value>  

</property>

配置MR合并
<property>

            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
</property>
指定失效自动切换
<property>

            <name>yarn.resourcemanager.recovery.enabled</name>
            <value>true</value>
</property>
<property>

            <name>yarn.resourcemanager.store.class</name>
            <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>

指定zookeeper集群地址
<property>

            <name>yarn.resourcemanager.zk-address</name>
            <value>wangyl-7:2181,wangyl-8:2181,wangyl-9:2181</value>
</property>

5.4 core-site.xml

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

<property>

           <name>fs.defaultFS</name>              
           <value>hdfs://ns1</value>   
</property>

指定hadoop的临时存储文件
<property>

           <name>hadoop.tmp.dir</name>              
           <value>/usr/local/hadoop-2.1.7/tmp</value>   
</property>

指定Zookeeper集群地址

<property>

           <name>ha.zookeeper.quorum</name>              
           <value>wangyl-7:2181,wangyl-8:2181,wangyl-9:2181</value>   
</property>

[b]5.5  hdfs-site.xml
[/b]

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

<property>

           <name>dfs.nameservices</name>              
           <value>ns1</value>   
</property>
HDFS的名称空间为ns1下面有两个NameNode,作为HA

<property>

           <name>dfs.ha.namenodes.ns1</name>              
           <value>wangyl-0,wangyl-1</value>   
</property>
指定wangyl-0的RPC通信地址

<property>

           <name>dfs.namenode.rpc-address.ns1.wangyl-0</name>              
           <value>wangyl-0:9000</value>   
</property>
指定wangyl-0的HTTP通信地址,可通过web浏览器查看

<property>

           <name>dfs.namenode.http-address.ns1.wangyl-0</name>              
           <value>wangyl-0:50070</value>   
</property>
指定wangyl-1的RPC通信地址

<property>

           <name>dfs.namenode.rpc-address.ns1.wangyl-1</name>              
           <value>wangyl-1:9000</value>   
</property>

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

<property>

           <name>dfs.namenode.http-address.ns1.wangyl-1</name>              
           <value>wangyl-1:50070</value>   
</property>
指定Namenode的元数据在JournalNode上的存放路径

<property>

           <name>dfs.namenode.shared.edits.dir</name>              
           <value>qjournal://wangyl-4:8485;wangyl-5:8485;wangyl-6:8485/ns1</value>   
</property>
指定JournalNode在本地存储位置

<property>

           <name>dfs.journalnode.edits.dir</name>              
           <value>/usr/local/hadoop-2.1.7/journaldata</value>   
</property>
开启NameNode失败自动切换

<property>

           <name>dfs.ha.automatic-failover.enabled</name>              
           <value>true</value>   
</property>
配置失败自动切换方案

<property>

           <name>dfs.client.failover.proxy.provider.ns1</name>              
           <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>   
</property>
配置隔离机制方式,即主宕机之后,从通过什么方式杀死主NameNode进程,防止脑裂

<property>

           <name>dfs.ha.fencing.methods</name>              
           <value>

                   sshfencing

                   shell(bin/true)

          </value>   
</property>
使用ssh隔离机制需要配置免密码登陆文件位置

<property>

           <name>dfs.ha.fencing.ssh.private-key-files</name>              
           <value>替换成你的ssh免登陆文件位置</value>   
</property>
配置ssh隔离机制超时时间

<property>

           <name>dfs.ha.fencing.ssh.connect-timeout</name>              
           <value>30000</value>   
</property>

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: