zoukankan      html  css  js  c++  java
  • 【伊利丹】Hadoop2.0 NN HA实验记录


    1.关于Hadoop2.2.0中HA的介绍

    NameNode 简称: NN 

    DateNode 简称: DN

    JournalNode  简称: JN

    Zookeeper  简称: ZK


    从上面的图里,我们能够知道HA的大致架构:

    01.利用共享存储来在两个NN之间同步元数据信息。

    在NN中有两个关键的文件:一个是fsimage,一个是edits,当中fsimage指的是元数据镜像文件,存在磁盘中用来保持文件系统的文件夹树,然而edits指的是元数据操作日志,针对文件夹树的改动操作,被写入共享存储系统中,比如DFS,JournalNode。同一时候元数据镜像文件在内存中保存一份最新的,然后Standby NameNode定期的合并fsimage和edits。

    02.DataNode同一时候向两个NN汇报块信息。

    这是让Standby NN 保持集群最新状态的必要步骤。

    03.用于监视和控制NN进程採用了FailoverControllerActive进程。


    2.实验环境搭建和准备

    01.前提是要有一个能手动切换主备NN的集群,假设没有。能够到http://blog.csdn.net/u010967382/article/details/20380387

    中去学习怎样搭建一个集群。

    02.本次实验环境是Ubuntu12.04.4版本号的虚拟机4台 :

    分别取名为SY-0217 SY-0355 SY-0225 SY-0226 的一个Hadoop集群;

    当中 SY-0217 SY-0355 为主备NameNode。

    而且 SY-0355 SY-0225 SY-0226 为JouranlNode 。

    03.下载Zookeeper并安装

    下载地址:http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.5/ 并把它放到虚拟机的Desktop上。

    这下在zookeeper-3.4.5是用于的測试。 最好採用zookeeper-3.4.6由于它做了大量的 bug 修复和功能增强

    下载完毕后用 解压命令解压: sudo tar -xzvf  Dsektop/zookeeper-3.4.5

    同一时候把SY-0217 SY-0355 SY-0225 都安装好zookeeper-3.4.5 (最好是奇数个 原因是zookeeper有这样一个特性:集群中仅仅要有过半的机器是正常工作的,那么整个集群对外就是可用的。也就是说假设有2个zookeeper,那么仅仅要有1个死了zookeeper就不能用了,由于1没有过半。所以2个zookeeper的死亡容忍度为0;同理。要是有3个zookeeper,一个死了,还剩下2个正常的。过半了,所以3个zookeeper的容忍度为1。

    总之zookeeper的容忍度决定zookeeper的个数)


    3.Zookeeper的配置文件的改动

    01.进入zookeeper中的conf文件夹:

    拷贝zoo_sample.cfg为并又一次命名为zoo.cfg

       编辑zoo.cfg文件把以下的加入进去

    dataDir=/home/kkzhangtao/zookeeper-3.4.5/zookeeper
    dataLogDir=/home/kkzhangtao/zookeeper-3.4.5/zookeeperlog
    server.1=SY-0217:2888:3888
    server.2=SY-0355:2888:3888
    server.3=SY-0225:2888:3888


    这文件中面的配置 解释例如以下:

    dataDir指的是存储内存中数据库快照的位置;

    dataLogDir指的是将管理机器的事务日志写到“dataLogDir”所指定的文件夹;

    server.1=SY-0217:2888:3888指的是不同的Zookeeper服务器的自身标识,用户能够从中读取相关信息。当中那个的SY-0217指的是组成Zookeeper服务的机器主机名。2888是为用来进行leader选举的port。3888是为组成Zookeeper服务的机器之间通信的port。


    02.创建zookeeper和zookeeperlog两个目录

    在zookeeper的目录中,创建上述的两个目录。进入zookeeper目录,创建文件myid,里面填写1。这里写入的1,是在zoo.cfg文本中的server.1中的1。

    这里的数字是为了差别不同的zookerper)当我们把全部的文件配置完毕了。分别复制到各个节点上去,可是要把zookpeeper目录中的myid改为zoo.cfg配置文件里相应的数字。zookeeperlog目录,是为了指定zookeeper产生日志指定相应的路径。


    03.改动环境变量

      在本机的环境变量中加入  进入/etc/profile文件夹中去 用vi命令 把例如以下的加入进去

    export ZOOKEEPER_HOME=/home/kkzhangtao/zookeeper-3.4.5
    export PATH=$PATH:$ZOOKEEPER_HOME/bin


    然后在终端 source /etc/profile (其它安装了zookeeper的机器都要进入如上的配置)


    4.Hadoop的配置文件的改动  (这两个配置文件 请亲 细致对比的改动和加入)


    01.文件coer-site.xml

    	<property>
    		<name>fs.defaultFS</name>
      		<value>hdfs://hadoop-cluster</value>
    		<description>这里的值指的是默认的HDFS路径。这里仅仅有一个HDFS集群,在这里指定。该值来自于hdfs-site.xml中的配置</description>
    	</property>
    	<property>   
    		<name>hadoop.tmp.dir</name>   
    		<value>/home/kkzhangtao/hadoop-2.2.0/yarn/yarn_data/tmp</value>   
    		<description>这里的路径默认是NameNode、DataNode、JournalNode等存放数据的公共文件夹。用户也能够自己单独指定这三类节点的文件夹。

    这里的yarn_data/tmp文件夹与文件都是自己创建的。</description> </property> <property> <name>ha.zookeeper.quorum</name> <value>SY-0217:2181,SY-0355:2181,SY-0225:2181</value> <description>这里是ZooKeeper集群的地址和port。注意。数量一定是奇数</description> </property>



    02.文件hdfs-site.xml 

    <property>
    		<name>dfs.nameservices</name>
     		<value>hadoop-cluster</value>
    		<description>指定命名空间名称,可任意起名</description>
    	</property>
    	<property>
    		<name>dfs.ha.namenodes.hadoop-cluster</name>
    		<value>nn1,nn2</value>
    		<description>在命名空间下指定NameNode逻辑名</description>
    	</property>
    
    	<property>
    		<name>dfs.namenode.rpc-address.hadoop-cluster.nn1</name>
    		<value>SY-0217:8020</value>
    		<description>为“命名空间名.NameNode逻辑名”配置rpc地址</description>
    	</property>
    
    	<property>
    		<name>dfs.namenode.rpc-address.hadoop-cluster.nn2</name>
      		<value>SY-0355:8020</value>
    	        <description>为“命名空间名.NameNode逻辑名”配置rpc地址</description>
    	</property>
    	<property>
    		<name>dfs.namenode.http-address.hadoop-cluster.nn1</name>
    		<value>SY-0217:50070</value>
      		<description>为“命名空间名.NameNode逻辑名”配置http地址</description>
    	</property>
     
    	<property>
      		<name>dfs.namenode.http-address.hadoop-cluster.nn2</name>
      		<value>SY-0355:50070</value>
      		<description>为“命名空间名.NameNode逻辑名”配置http地址</description>
    	</property>
    	
    	<property>
    		<name>dfs.namenode.servicerpc-address.hadoop-cluster.n1</name>
    		<value>SY-0217:53310</value>
    	</property>
    	<property>
    		<name>dfs.namenode.servicerpc-address.hadoop-cluster.n2</name>
    		<value>SY-0355:53310</value>
    	</property>
    	<property>
    		<name>dfs.namenode.name.dir</name>
    		<value>file:///home/kkzhangtao/hadoop-2.2.0/hdfs/name</value>
    		<description>配置NameNode元数据存放的路径;</description>
    	</property>
    	
    	<property>
    		<name>dfs.datanode.data.dir</name>
    		<value>file:///home/kkzhangtao/hadoop-2.2.0/hdfs/data</value>
    		<description>配置datanode元数据存放的路径。</description>
    	</property>
    
    	<property>
      		<name>dfs.namenode.shared.edits.dir</name>
     		 <value>qjournal://SY-0355:8485;SY-0225:8485;SY-0226:8485/journalnode</value>
    		<description>
     		配置JournalNode,包括三部分:
    		1.qjournal是协议,无需改动;
    		2.然后就是三台部署JournalNode的主机host/ip:port,三台机器之间用分号分隔。
    		3.最后的hadoop-journal是journalnode的命名空间,能够任意取名。
      		</description>
    	 </property>
    	 <property>
      		<name>dfs.journalnode.edits.dir</name>
      		<value>/home/kkzhangtao/hadoop-2.2.0/hdfs/journal/</value>
      		<description>journalnode的本地数据存放文件夹,指定一个路径就够。</description>
    	 </property>
    	<property>
    		<name>dfs.ha.automatic-failover.enabled.hadoop-cluster</name>
      		<value>true</value>
      		<description> 是否自己主动切换。

    </description> </property> <property> <name>dfs.client.failover.proxy.provider.hadoop-cluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> <description> 指定hadoop-cluster出故障时,哪个实现类负责运行故障切换</description> </property> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> <description> 一旦须要NameNode切换,使用ssh方式进行操作</description> </property> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/kkzhangtao/.ssh/id_rsa</value> <description> 假设使用ssh进行故障切换。使用ssh通信时用的密钥存储的位置</description> </property> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>1000<</value> <description>ssh连接超时的最大时间</description> </property> <property> <name>dfs.namenode.handler.count</name> <value>8</value> <description>为处理datanode节点的进程调用开户的服务线程数量。能够改动</description> </property>


    03.文件mapred-site.xml 和yarn-site.xml  不用改动 (保持和原来一样)


    04.拷贝到其它各个节点去


    採用例如以下命令:在hadoop_home文件夹下

         scp etc/hadoop/*  kkzhangtao@SY-0355:/home/kkzhangtao/hadoop-2.2.0/etc/hadoop

         scp etc/hadoop/*  kkzhangtao@SY-0225:/home/kkzhangtao/hadoop-2.2.0/etc/hadoop

         scp etc/hadoop/*  kkzhangtao@SY-0226:/home/kkzhangtao/hadoop-2.2.0/etc/hadoop


    5.Hadoop主备节点(自己主动切换)的測试

    01.zookeeper的初始化


    进入hadoop_home文件夹下 採用 :bin/hdfs zkfc -formatZK

      02.启动zkfc 

    进入hadoop_home文件夹下 採用 :sbin/hadoop-daemon.sh start zkfc

    03.启动namnode

    进入hadoop_home文件夹下 採用 :sbin/hadoop-daemon.sh start namenode

    都启动好了通过jps 能够看到各个几点的进程 如图


    在两个namenode都启动之后,会发现,当中一个namenode会自己主动切换成active状态,不须要手工切换。

    通过訪问页面能够得到结果:(192.168.0.162:50070)(192.168.0.163:50070)

    04.在SY-0217上面 Kill Namenode(10051) 进程 让SY-0355自己主动切换为Active

        

    6.结语

    上面就是主备NameNode自己主动切换的配置和測试结果 。都亲自实现多次而且成功自己主动切换。

     

    谢谢



  • 相关阅读:
    spring中Bean的懒加载
    ActiveMQ学习教程
    Maven中解决jar包冲突的三种方式
    Spring的日志管理
    mybatis使用collection查询集合属性规则
    springcloud之Feign伪装
    springcloud之Hystrix熔断入门
    springcloud的负载均衡Ribbon入门
    springcloud的Eureka启动时报错:Connection refused: connect
    springboot启动过程中出现You must configure either the server or JDBC driver (via the serverTimezone configuration
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/5094155.html
Copyright © 2011-2022 走看看