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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDUxMjEyNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDUxMjEyNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

02.启动zkfc

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

03.启动namnode

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

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDUxMjEyNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

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

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDUxMjEyNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDUxMjEyNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

 
  

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDUxMjEyNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="599" height="222" alt="">

6.结语

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

谢谢

最新文章

  1. datatables中的Options总结(1)
  2. Linux下用ftp更新web内容!
  3. SharePoint 2010 GridView/SPGridView完全应用系统样式
  4. C#异常处理性能测试
  5. kali/centos 更新 java
  6. Redis学习笔记~StackExchange.Redis实现分布式Session
  7. Rest API 开发 学习笔记(转)
  8. HTML 简介
  9. MYSQL存储过程:批量更新数据
  10. jquery 插件原则
  11. php中base64_decode与base64_encode加密解密函数
  12. InputStream和Reader区别
  13. 了解SOA是什么!
  14. 常用的wsdl地址
  15. WIN7 64位 IE10打开WEB管理提示证书不安全
  16. Ext.grid.EditorGridPanel保存
  17. 分布式监控系统--zabbix
  18. 《UNIX网络编程 卷1:套接字联网API》读书笔记(一):网络编程简介
  19. Android向通讯录添加联系人的一般方法
  20. Spring+Redis集成+关系型数据库持久化

热门文章

  1. Linux 生产实习01
  2. LeetCode(21):合并两个有序链表
  3. java 异常 throw
  4. laravel中redis队列的使用
  5. javaweb笔记四
  6. 20165330《网络对抗技术》Exp0 Kali安装
  7. thinkphp AOP(面向切面编程)
  8. IntelIJ IDEA配置Tomcat遇到问题Error during artifact deployment. See server log for details
  9. kotlin下载地址收藏
  10. python 实现远端ftp文件上传下载