Hadoop搭建HA的步骤与讲解--详细

21 篇文章 0 订阅
7 篇文章 0 订阅

前提: 已经有搭建过hadoop集群了,本文章主要是在Hadoop条件下搭建HA,
          现在让我们先在主节点master搭建HA,并测试:

搭建HA的步骤:(要保证各master,slave1,slave2三个可以互相ssh无密登陆)
        1. 创建软链接:

                             ln  -s  hadoop_cluster_ha      hadoop
               原因是:我们需要经常修改我们hadoop/etc/hadoop下的各种.xml文件,但是有时候我们可能 需要的不是HA
                              的配置文件,而是其他状态,这个时候可以把etc下的.xml文件复制成hadoop_cluster_ha,和hadoop_cluster,
                              一方面:可以随时切换我们的集群环境;另一方面:可以防止我们把集群玩坏;


        2.修改配置文件:hdfs-site.xml   和  core-site.xml     
             1)hdfs-site.xml    

 1.修改【hdfs-site.xml】  //表示注释
	<property>
		  <name>dfs.nameservices</name>
		  <value>mycluster</value>     //此新名称服务的逻辑名称
	</property>
		//指定两个namenode的唯一标识:注意一定是两个
	<property>
	      <name>dfs.ha.namenodes.mycluster</name>
		  <value>nn1,nn2</value>
	</property>
		//修改namenode RPC访问端口  , 要监听的每个NameNode的完全限定RPC地址
	<property>
		  <name>dfs.namenode.rpc-address.mycluster.nn1</name>
		  <value>master:9000</value>
	</property>
	<property>
		  <name>dfs.namenode.rpc-address.mycluster.nn2</name>
		  <value>slave1:9000</value>
	</property>
          //修改http-WEBUI访问端口,要监听的每个NameNode的完全限定HTTP地址
	<property>
		  <name>dfs.namenode.http-address.mycluster.nn1</name>
		  <value>master:50070</value>
	</property>
	<property>
		  <name>dfs.namenode.http-address.mycluster.nn2</name>
		  <value>slave1:50070</value>
    </property>
		//标识NameNodes写入/读取编辑的一组JNs的URI,就是journalnode的节点
	<property>
		  <name>dfs.namenode.shared.edits.dir</name>
		  <value>qjournal://master:8485;slave1:8485;slave2:8485/mycluster</value>
    </property>  //**在三个节点上声明了journal协议,所以要在三个节点开启journalnode服务
		                 这是一个配置JournalNodes地址的地方,它提供共享编辑存储,由Active 
                         nameNode写入并由Standby NameNode读取,以保持Active NameNode所做的所 
                         有文件系统更改的最新状态。
   // HDFS客户端用于联系Active NameNode的Java类
     <property>
		 <name>dfs.client.failover.proxy.provider.mycluster</name>
         <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
         </value>
	</property>
   // SSH到Active NameNode并终止进程
	<property>
		  <name>dfs.ha.fencing.methods</name>
	          <value>sshfence</value>
    </property>

   //该选项是以逗号分隔的SSH私钥文件列表
    <property>
	          <name>dfs.ha.fencing.ssh.private-key-files</name>
	          <value>/home/hyxy/.ssh/id_rsa</value>
    </property>
		
	 

  

   2)  core-site.xml

 2.修改【core-site.xml】
      <property>
		    <name>fs.defaultFS</name>
		    <value>hdfs://mycluster</value>
	  </property>
      // - JournalNode守护程序将存储其本地状态的路径
	  <property>
		    <name>dfs.journalnode.edits.dir</name>
		    <value>/home/hyxy/tmp/journal</value>
	  </property>
      <property>
          <name>ipc.client.connect.max.retries</name>
          <value>20</value>  //最大连接次数,修改大一点,为20,默认10
          <description>Indicates the number of retries a client will make to establish
               a server connection.
          </description>
      </property>
 
     <property>
          <name>ipc.client.connect.retry.interval</name>
          <value>1000</value> //重复连接的间隔1000ms=1s
          <description>Indicates the number of milliseconds a client will wait for
                        before retrying to establish a server connection.
          </description>
     </property>






       3.将修改的配置文件分发到其他节点
                   命令:$>  scp   -r    etc/     hyxy@slave1:~/soft/hadoop/
                              $>  scp    -r   etc/     hyxy@slave2:~/soft/hadoop/
                  注意:分发之后的软链接失效 ,需要重新创建:先删除  etc$> rm -r hadoop 
                                                                                                            etc$> ln  -s  hadoop_cluster_ha   hadoop
          4.在【master:8485'slave1:8485;slave2:8485】三个节点上分别开启journalnode,
                 【开启之后会新建 空的: ~/tmp/journal ,初始化  后会有镜像文件
                    命令:hadoop-daemon.sh   start     journalnode
                    命令:jps
                              [hyxy@master ~]$ jps
                              16138 Jps
                              16107 JournalNode

                    原因:start-dfs.sh ,会先开启namenode ,最后在master,slave1两个节点会有一个namendoe连接
                               不上journalnode ,然后该有的namenode会挂掉。
          5.一旦启动了JournalNodes,就必须首先同步两个HA NameNodes的磁盘元数据 ,有如下三种方式:
                    A>.如果要设置新的HDFS集群,则应首先在其中一个NameNode上运行format命令
                               $>hdfs namenode -format
                                     慎用!!!
                                  原因:  会把原有的数据全都格式化。
                    B.>.如果您已经格式化了NameNode,或者正在将启用了HA的群集转换为启用HA,
                          在未格式化的NameNode(slave1,即nn2)上,则现在应该通过运行命令“ hdfs namenode   -bootstrapStandby
                          将NameNode元数据目录 的内容复制到另一个未格式化的NameNode上。
                      首先:确保JournalNode开启, 在master上(nn1)开启namenode:
                                  $> hadoop-daemon.sh  start   namenode 
                       其次: 在nn2上执行以下命令;
                                  $>hdfs namenode -bootstrapStandby      //目的:主要是复制master的镜像文件到slave1中,
                                                                                                      因为slave1是备用的namenode。
                                此时,slave1的journal文件还没有东西
                     说明:将nn1节点的fsimage复制到nn2中【{HADOOP_TMP_DIR}/dfs/name】
                                                                                          即是:  ~/tmp/hadoop/dfs/name*
                   C>.如果要将非HA NameNode转换为HA,则应运行命令“ hdfs namenode -initializeSharedEdits ”,
                       该命令将使 用来自本地NameNode编辑目录的编辑数据初始化JournalNodes
                       在nn1上,执行以下命令; 
                                 首先 :  $>hadoop-daemon.sh stop namenode(先关闭namenode)
                                 其次 :  $>hdfs namenode -initializeSharedEdits    // 初始化共享的编辑
                                 此时,初始化后,journal文件夹有了内容,是mycluster,它是复制master的镜像文件
                                                            【   /home/hyxy/tmp/journal/mycluster/current  】

                                 说明:   使三个节点【master ,slave1, slave2】的JournalNode日志信息要一致。
              6.开启:start-dfs.sh        

[hyxy@master mycluster]$ jps
16838 NameNode
17126 Jps
16107 JournalNode

[hyxy@slave1 mycluster]$ jps
16838 NameNode
16594 DataNode
17126 Jps
16107 JournalNode

[hyxy@slave2 mycluster]$ jps
 6838 DataNode
 7126 Jps
 6107 JournalNode

  7.验证:分别打开浏览器master:50070 和slave1:50070,查看nn1和nn2的相关信息,均为standby(备用状态)
 

 8.  HA 集群管理:
           用法:hdfs haadmin 
                              [ -transitionToActive <serviceId>]   // 将给定NameNode的状态转换为Active
                              [-transitionToStandby <serviceId>]   // 将给定NameNode的状态转换为Standby
                              [-failover [--forcefence] [--forceactive] <serviceId> <serviceId>] 
                              [-getServiceState <serviceId>] 
                              [-checkHealth <serviceId> ] 
                              [-help <command>]

          手动切换Active/Standby状态:
                             $>hdfs haadmin -transitionToActive nn1
                            $>hadoop fs -put tt.txt
                            $>hdfs haadmin -transitionToStandby nn1
                            $>hdfs haadmin -transitionToActive nn2
                           $>hadoop fs -put tt1.txt

总结:

            HA: 主要是为了防止namenode故障,journalnode同步两个HA namendoe磁盘元数据,
                一个挂掉,另一个就会读取journalnode里面信息,变成namendoe了。
            journalnode:实现共享元数据,
                       当备用节点看到编辑时,它会将它们应用到自己的命名空间。如果发生故障转移,
                       Standby将确保在将自身升级为Active状态之前已从JournalNodes读取所有编辑内容。
                       这可确保在发生故障转移之前完全同步命名空间状态。
           





 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值