共计 9805 个字符,预计需要花费 25 分钟才能阅读完成。
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 进程。
===============================================
Ubuntu 13.04 上搭建 Hadoop 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm
Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm
Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm
Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm
单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm
搭建 Hadoop 环境(在 Winodws 环境下用虚拟机虚拟两个 Ubuntu 系统进行搭建)http://www.linuxidc.com/Linux/2011-12/48894.htm
===============================================
2. 实验环境搭建和准备
01. 前提是要有一个能手动切换主备 NN 的集群,如果没有,可以到 http://www.linuxidc.com/Linux/2014-09/106289.htm 中去学习如何搭建一个集群。
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 选举的端口,3888 是为组成 Zookeeper 服务的机器之间通信的端口。
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 的机器都要进入如上的配置)
更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-09/106290p2.htm
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 集群的地址和端口。注意,数量一定是奇数 </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:端口,三台机器之间用分号分隔;
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
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 进程。
===============================================
Ubuntu 13.04 上搭建 Hadoop 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm
Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm
Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm
Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm
单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm
搭建 Hadoop 环境(在 Winodws 环境下用虚拟机虚拟两个 Ubuntu 系统进行搭建)http://www.linuxidc.com/Linux/2011-12/48894.htm
===============================================
2. 实验环境搭建和准备
01. 前提是要有一个能手动切换主备 NN 的集群,如果没有,可以到 http://www.linuxidc.com/Linux/2014-09/106289.htm 中去学习如何搭建一个集群。
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 选举的端口,3888 是为组成 Zookeeper 服务的机器之间通信的端口。
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 的机器都要进入如上的配置)
更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-09/106290p2.htm
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 自动切换的配置和测试结果,都亲自实现多次并且成功自动切换。
谢谢
更多 Hadoop 相关信息见 Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13