阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Hadoop2.0 NN HA实验记录

130次阅读
没有评论

共计 9805 个字符,预计需要花费 25 分钟才能阅读完成。

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

Hadoop2.0 NN 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 的介绍

Hadoop2.0 NN 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

Hadoop2.0 NN HA 实验记录

02. 启动 zkfc

进入 hadoop_home 目录下 采用:sbin/hadoop-daemon.sh start zkfc

Hadoop2.0 NN HA 实验记录

03. 启动 namnode

进入 hadoop_home 目录下 采用:sbin/hadoop-daemon.sh start namenode

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

Hadoop2.0 NN HA 实验记录

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

通过访问页面可以得到结果:(192.168.0.162:50070)(192.168.0.163:50070)

Hadoop2.0 NN HA 实验记录

Hadoop2.0 NN HA 实验记录

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

Hadoop2.0 NN HA 实验记录

Hadoop2.0 NN HA 实验记录

Hadoop2.0 NN HA 实验记录

6. 结语

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

谢谢

更多 Hadoop 相关信息见 Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计9805字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中