Hadoop Ha (High avilable)配置

为什么要配置HDFS HA?

  首先:HDFS集群中NameNode 如果存在单点故障。对于只有一个NameNode的集群,如果NameNode机器出现意外情况,将导致整个集群无法使用.

而影响HDFS集群不可用主要包括以下两种情况:一是NameNode机器宕机,将导致集群不可用,重启NameNode之后才可使用;二是计划内的NameNode节点软件或硬件升级,导致集群在短时间内不可用。

为了解决上述问题,Hadoop给出了HDFS的高可用HA方案:HDFS通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,比如处理来自客户端的RPC请求,而Standby NameNode则不对外提供服务,仅同步Active NameNode的状态,以便能够在它失败时快速进行切换。


HDFS HA架构的核心作用:

一个典型的HA集群,NameNode会被配置在两台独立的机器上,在任何时间上,一个NameNode处于活动状态,而另一个NameNode处于备份状态,活动状态的NameNode会响应集群中所有的客户端,备份状态的NameNode只是作为一个副本,保证在必要的时候提供一个快速的转移。任何时刻,只能且有一个Active NameNode是非常重要的,否则将会导致集群操作的混乱.如果有两个NameNode将会分可能会导致数据丢失,或者状态异常,这种情况通常称为“split-brain”(脑裂)。所以任何时候只允许一个NameNode作为writer;在当前namenode宕机之后,原来的Standby Node才可以接管Active的所有职能,这就阻止了其他NameNode基于处于Active状态的问题。

HDFS HA配置要素:

NameNode机器:两台配置对等的物理机器,它们分别运行Active和Standby Node。

JouralNode机器:运行JouralNodes的机器。JouralNode守护进程相当的轻量级,可以和Hadoop的其他进程部署在一起,比如NameNode、DataNode、ResourceManager等,至少需要3个且为奇数,保证选举机制的绝对成功。


说明以下几点:

HDFS HA通常由两个NameNode组成,一个处于Active状态,另一个处于Standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步Active NameNode的状态,以便能够在它失败时快速进行切换。

Hadoop 2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode,这里还配置了一个Zookeeper集群,用于ZKFC故障转移,当Active NameNode挂掉了,会自动切换Standby NameNode为Active状态。

YARN的ResourceManager也存在单点故障问题,这个问题在hadoop-2.4.1得到了解决:有两个ResourceManager,一个是Active,一个是Standby,状态由zookeeper进行协调。

YARN框架下的MapReduce可以开启JobHistoryServer来记录历史任务信息,否则只能查看当前正在执行的任务信息。

Zookeeper的作用是负责HDFS中NameNode主备节点的选举,和YARN框架下ResourceManaer主备节点的选举。




Hadoop Ha 分为namenodeHA 和resourcemanagerHA

下面是个人具体的配置步骤


Namenode HA

集群规划


PC01PC02PC03
NameNodeNameNode 
ZKFCZKFCResourceManager
DataNodeDataNodeDataNode
JournalNodeJournalNodeJournalNode
NodeManagerNodeManagerNodeManager
ZooKeeperZooKeeperZooKeeper










一)安装hadoop

二)配置环境文件

                   hadoop-env.sh

                   mapred-env.sh

                   yarn-env.sh

                  

                   exportJAVA_HOME=/opt/modules/jdk1.7.0_67

 

三)配置4个site.xml文件

        

         1.========core-site.xml========

<!--NameNode HA的逻辑访问名称-->

<property>

         <name>fs.defaultFS</name>

         <value>hdfs://ns1</value>

</property>

 

<property>

         <name>hadoop.tmp.dir</name>

         <value>/opt/modules/hadoop-2.5.0/data</value>

</property>

 

2.=================hdfs-site.xml=============

<!-- 分布式副本数设置为3 -->

         <property>

        <name>dfs.replication</name>

        <value>3</value>

    </property>

         <!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->

         <property>

                   <name>dfs.nameservices</name>

                   <value>ns1</value>

         </property>

        

         <!--ns1下面有两个NameNode,分别是nn1,nn2 -->


         <property>

                   <name>dfs.ha.namenodes.ns1</name>

                   <value>nn1,nn2</value>

         </property>

        

         <!--nn1的RPC通信地址 -->

         <property>

                   <name>dfs.namenode.rpc-address.ns1.nn1</name>

                   <value>vampire01:8020</value>

         </property>

         <!--nn1的http通信地址 -->

         <property>

                   <name>dfs.namenode.http-address.ns1.nn1</name>

                   <value>vampire01:50070</value>

         </property>

        

         <!--nn2的RPC通信地址 -->

         <property>

                   <name>dfs.namenode.rpc-address.ns1.nn2</name>

                   <value>vampire02:8020</value>

         </property>

         <!--nn2的http通信地址 -->

         <property>

                   <name>dfs.namenode.http-address.ns1.nn2</name>

                   <value>vampire02:50070</value>

         </property>

        

         <!--指定NameNode的元数据在JournalNode上的存放位置 -->


         <property>

                   <name>dfs.namenode.shared.edits.dir</name>

                   <value>qjournal://vampire01:8485;vampire02:8485;vampire03:8485/ns1</value>

         </property>

         <!--指定JournalNode在本地磁盘存放数据的位置 -->

         <property>

                   <name>dfs.journalnode.edits.dir</name>

                   <value>/opt/modules/hadoop-2.5.0/journal</value>

         </property>

        

         <!--配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行

sshfence:当Active出问题后,standby切换成Active,此时,原Active又没有停止服务,这种情况下会被强制杀死进程。

shell(/bin/true):NN Active和它的ZKFC一起挂了,没有人通知ZK,ZK长期没有接到通知,standby要切换,此时,standby调一个shell(脚本内容),这个脚本返回true则切换成功。

-->


         <property>

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

                   <value>

                            sshfence

                            shell(/bin/true)

                   </value>

         </property>

        

         <!--使用sshfence隔离机制时需要ssh免登陆 -->

         <property>

                   <name>dfs.ha.fencing.ssh.private-key-files</name>

                   <value>/home/hadoop/.ssh/id_rsa</value>

         </property>

        

         <!--配置sshfence隔离机制超时时间 -->

         <property>

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

                   <value>30000</value>

         </property>

        

 

        

<!-- 关闭权限检查用户或用户组 -->

         <property>

         <name>dfs.permissions.enabled</name>

         <value>false</value>

    </property>

 

3.=============mapred-site.xml

<property>

                   <name>mapreduce.framework.name</name>

                   <value>yarn</value>

         </property>

        

         <property>

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

         <!--配置实际的主机名和端口-->

                   <value>vampire01:10020</value>

         </property>

 

         <property>

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

                   <value>vampire01:19888</value>

         </property>

 

 

 4.============yarn-site.xml

  <property>

              <name>yarn.nodemanager.aux-services</name>

              <value>mapreduce_shuffle</value>

</property>

<property>

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

              <value>vampire03</value>

</property>

<!--启用日志聚合功能-->

<property>

         <name>yarn.log-aggregation-enable</name>

         <value>true</value>

</property>

         <!--日志保存时间-->

<property>

         <name>yarn.log-aggregation.retain-seconds</name>

         <value>86400</value>

</property>

 

        

         5.=================slaves

         vampire01

         vampire02

         vampire03

        

四)分发配置

$scp etc/hadoop/core-site.xmletc/hadoop/hdfs-site.xml  vampire02:/opt/modules/hadoop-2.5.0/etc/hadoop/

 

$scpetc/hadoop/core-site.xml etc/hadoop/hdfs-site.xml  vampire03:/opt/modules/hadoop-2.5.0/etc/hadoop/

 

五)启动HDFS HA

         ##注意:每一个步骤都严格按照以下步骤执行

                  1.删除data和logs目录(3台上,有必须删掉)

                  $ rm -rf data logs

 

         2.启动zk(3台上都要)

                  $ bin/zkServer.sh start

 

         3.启动journalnode(3台上都要)

$ sbin/hadoop-daemon.sh start journalnode

        

         3908 JournalNode

         2740 QuorumPeerMain

 

         4.格式化namenode(PC1也就是nn1)

         adoop-daemon.sh start namenode

 

         5.同步nn1的元数据(PC2 也就是nn2)

         n/hadoop-daemon.sh start namenode

 

         6.查看web界面

         //vampire02:50070       ##standby

 

         7.手动切换namenode的状态

         dfs haadmin -transitionToStandbynn1  ##切换成standby


   六)开启故障自动转移

         1.配置故障转移

                   1)=====core-site.xml====================

                   <property>

                   <name>ha.zookeeper.quorum</name>

                   <value>vampire01:2181,vampire02:2181,vampire03:2181</value>

         </property>

 

                   2)====hdfs-site.xml

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

 

         2.分发配置文件

         $scp etc/hadoop/core-site.xml etc/hadoop/hdfs-site.xml vampire02:/opt/modules/hadoop-2.5.0/etc/hadoop/

 

         3.启动故障转移服务

                   1)首先停止hdfs和zk

         $sbin/stop-dfs.sh

        

         $bin/zkServer.sh stop               ##关闭zk(3台服务器)

         重启

         $bin/zkServer.sh start              ##启动zk(3台服务器)

 

                   2)初始化zkfc[PC1也就是nn1]

         $bin/hdfs zkfc -formatZK  ##初始化ZKFC

 

         17/03/2716:49:18 INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/ns1 inZK.

        

         $sbin/start-dfs.sh                     ##启动hdfs

        

         bin/hdfs haadmin -getServiceState nn1     #查看nn1状态

         bin/hdfs haadmin -getServiceState nn2     #查看nn2状态

 

 

[PC1]

         [hadoop@hadoophadoop-2.5.0]$ jps

4196 JournalNode

4356 DFSZKFailoverController

4012 DataNode

3920 NameNode

3586 QuorumPeerMain

4458 Jps

[PC2]

[hadoop@hadoop hadoop-2.5.0]$ jps

4117 Jps

3849 DataNode

3786 NameNode

3926 JournalNode

3633 QuorumPeerMain

4045 DFSZKFailoverController

[PC3]

[hadoop@hadoop hadoop-2.5.0]$ jps

3387 DataNode

3461 JournalNode

3551 Jps

3231 QuorumPeerMain


ResourceManager HA

一、集群规划(基本操作思路与与NameNode HA xiangs)

 

二、修改配置文件

 

=====yarn-site.xml

<property>

        <name>yarn.nodemanager.aux-services</name>

        <value>mapreduce_shuffle</value>

    </property>

        

         <property>

        <name>yarn.log-aggregation-enable</name>

        <value>true</value>

    </property>

        

         <property>

        <name>yarn.log-aggregation.retain-seconds</name>

         <value>86400</value>

    </property>

 

 

<!--启用resourcemanagerha-->

<property>

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

  <value>true</value>

</property>

        

<property>

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

  <value>rmcluster</value>

</property>

 

<property>

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

  <value>rm1,rm2</value>

</property>

 

<property>

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

   <value>vampire02</value>

</property>

 

<property>

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

   <value>vampire03</value>

</property>

 

<!--指定zookeeper集群的地址-->

<property>

  <name>yarn.resourcemanager.zk-address</name> 

   <value>vampire01:2181,vampire02:2181,vampire03:2181</value>

</property>

 

<!--启用自动恢复-->

<property>

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

  <value>true</value>

</property>

 

<!--指定resourcemanager的状态信息存储在zookeeper集群-->

<property>

  <name>yarn.resourcemanager.store.class</name>

  <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>

</property>

 

 

三、分发配置文件

将yarn-site.xml分发到其他两台

scp etc/hadoop/yarn-site.xml vampire02:/opt/modules/hadoop-2.5.0/etc/hadoop/

 

scp etc/hadoop/yarn-site.xml vampire03:/opt/modules/hadoop-2.5.0/etc/hadoop/

 

四、启动ResourceManagere

在rm1(PC2)上:

sbin/start-yarn.sh

 

在rm2(pc3)上单独启动:

sbin/yarn-daemon.sh start resourcemanager


PC1

jps

5468 DataNode

5934 NodeManager

5653 JournalNode

5820 DFSZKFailoverController

5371 NameNode

3586 QuorumPeerMain

6058 Jps


PC2

jps

5023 NodeManager

4825 DFSZKFailoverController

4554 NameNode

4621 DataNode

4714 JournalNode

5359 Jps

4927 ResourceManager

3633 QuorumPeerMain

PC3

$ jps

3792 DataNode

3986 NodeManager

3881 JournalNode

4178 Jps

4120 ResourceManager

3231 QuorumPeerMain



 


 




  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值