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

Hadoop2.2.0基于QJM的HA实践

121次阅读
没有评论

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

日志分析集群已经搭建起来了,但是我总觉得 NN 没有采用 HA 是一个大大的隐忧,让我一直不敢把测试集群正式投入使用,总是担心把大批量的日志文件弄过来后,NN 挂掉或者硬盘故障的话那就什么都白费工夫,遂决定要把 NN 的 HA 也搞起来。

Hadoop2.2.0 的 NN 的 HA 目前有两种方式,贫民的方式自然是 QJM 了,它会采用类似 Zookeepr 的方式来保存 NN 的 LOG,而 NFS 的模式显然不是我等几台机器组成的集群的选项,那是高大上的土豪们的选择。

话说 QJM 也不是很难配置的,基于之前搭建的测试集群只要稍微调整下配置即可。我这里采用的是 lrts216、lrts217 作为主备 NN 节点,lrts216、lrts217、lrts218 则分别作为 journal 节点,另外也要在 lrts216、lrts217、lrts218 三台机器上分别搭建 Zookeeper3.4.5 构成一个 ZK 的集群,来实现 NN 的自动切换。

(1)搭建 Zookeeper 的集群

在我的 3 台测试机器 lrts216、lrts217、lrts218 上搭建 Zookeeper 集群,采用的版本为 3.4.5,这个搭建比较简单,可以一找一大把的资料。

(2)修改 Hadoop 的配置,支持 QJM

在 /home/hadoop/hadoop-2.2.0/etc/hadoop/hdfs-site.xml 中追加:

        <property>
  <name>dfs.nameservices</name>
  <value>lrtscluster</value>
 </property>

 <property>
  <name>dfs.ha.namenodes.lrtscluster</name>
  <value>nn216,nn217</value>
 </property>

 <property>
  <name>dfs.namenode.rpc-address.lrtscluster.nn216</name>
  <value>lrts216:8020</value>
 </property>

 <property>
  <name>dfs.namenode.rpc-address.lrtscluster.nn217</name>
  <value>lrts217:8020</value>
 </property>
 <property>
  <name>dfs.namenode.http-address.lrtscluster.nn216</name>
  <value>lrts216:50070</value>
 </property>
 <property>
  <name>dfs.namenode.http-address.lrtscluster.nn217</name>
  <value>lrts217:50070</value>
 </property>
 <property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://lrts216:8485;lrts217:8485;lrts218:8485/lrtscluster
  </value>
 </property>
 <property>
  <name>dfs.client.failover.proxy.provider.lrtscluster</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
  </value>
 </property>

 <property>
  <name>dfs.ha.fencing.methods</name>
  <value>sshfence</value>
 </property>

 <property>
  <name>dfs.ha.fencing.ssh.private-key-files</name>
  <value>/home/hadoop/.ssh/id_rsa</value>
 </property>
 <property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/home/hadoop/hadoop-2.2.0/journal</value>
 </property>
 <property>
  <name>dfs.ha.automatic-failover.enabled</name>
  <value>true</value>
 </property>

同时要修改下原来的配置,注释掉原来对 dfs.namenode.http-address 的配置:

    <!–
 <property>
  <name>dfs.namenode.http-address</name>
  <value>lrts216:50070</value>
  <description>
   The address and the base port where the dfs namenode web ui will listen on.
  </description>
 </property>
  –>

 另外一个需要追加修改的配置 /home/hadoop/hadoop-2.2.0/etc/hadoop/core-site.xml:

 <property>
  <name>ha.zookeeper.quorum</name>
  <value>lrts216:2181,lrts217:2181,lrts218:2181</value>
 </property>

 

————————————– 分割线 ————————————–

相关阅读

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

————————————– 分割线 ————————————–

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2014-05/101177p2.htm

(3)HA 初始化
 
由于我这里的 Hadoop 集群是测试集群,之前没有特重要的数据,所以事情变得简单多了。
 
3.1、保持一个彻底干净的环境
 

先把 NameNode、DataNode、journalNode 的数据目录以及日志删除掉,以一个彻底干净的面貌来开始使用。
 
在 Hadoop 的各节点执行如下命令:
 
rm -rf /home/hadoop/hadoop-2.2.0/logs/*
 rm -rf /home/hadoop/hadoop-2.2.0/dfs/name/*
 rm -rf /home/hadoop/hadoop-2.2.0/dfs/data/*
 rm -rf /home/hadoop/hadoop-2.2.0/journal/lrtscluster/*
 

格式化 zkfc:
 
/home/hadoop/hadoop-2.2.0/bin/hdfs zkfc -formatZK
 

3.2、启动 journal
 
分别在 lrts216、lrts217、lrts218 这 3 台机器下执行命令来启动 journalnode:
 
/home/hadoop/hadoop-2.2.0/sbin/hadoop-daemon.sh start journalnode
 
可以通过 http://lrts216:8480 来看 journal 是否正常;
 
3.3、格式化 NN
 
在任意一个 NameNode 节点执行如下命令来格式化当前命名节点:
 
/home/hadoop/hadoop-2.2.0/bin/hdfs namenode -format
 

注意:
 
这个需要当前被格式化的 NameNode 中 /home/hadoop/hadoop-2.2.0/dfs/name 目录下的内容 COPY 到另外一个 nameNode 对应目录中去,否则会导致两个 NameNode 都处于 Standby 状态。由于整个的配置是使用 NameNode 的自动 Failover 的,所以需要强制切一个 NN 为 Active 状态,但是并不好使,甚至还会导致脑裂的问题产生,嘿,本人遇到了一次。
 
在这里受阻过一次,简直是刻骨铭心了。
 

3.4、启动 HDFS
  ./start-dfs.sh 启动 hadoop 集群。

参考:
 
http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/HDFSHighAvailabilityWithQJM.html

http://www.linuxidc.com/Linux/2014-05/101178.htm

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

日志分析集群已经搭建起来了,但是我总觉得 NN 没有采用 HA 是一个大大的隐忧,让我一直不敢把测试集群正式投入使用,总是担心把大批量的日志文件弄过来后,NN 挂掉或者硬盘故障的话那就什么都白费工夫,遂决定要把 NN 的 HA 也搞起来。

Hadoop2.2.0 的 NN 的 HA 目前有两种方式,贫民的方式自然是 QJM 了,它会采用类似 Zookeepr 的方式来保存 NN 的 LOG,而 NFS 的模式显然不是我等几台机器组成的集群的选项,那是高大上的土豪们的选择。

话说 QJM 也不是很难配置的,基于之前搭建的测试集群只要稍微调整下配置即可。我这里采用的是 lrts216、lrts217 作为主备 NN 节点,lrts216、lrts217、lrts218 则分别作为 journal 节点,另外也要在 lrts216、lrts217、lrts218 三台机器上分别搭建 Zookeeper3.4.5 构成一个 ZK 的集群,来实现 NN 的自动切换。

(1)搭建 Zookeeper 的集群

在我的 3 台测试机器 lrts216、lrts217、lrts218 上搭建 Zookeeper 集群,采用的版本为 3.4.5,这个搭建比较简单,可以一找一大把的资料。

(2)修改 Hadoop 的配置,支持 QJM

在 /home/hadoop/hadoop-2.2.0/etc/hadoop/hdfs-site.xml 中追加:

        <property>
  <name>dfs.nameservices</name>
  <value>lrtscluster</value>
 </property>

 <property>
  <name>dfs.ha.namenodes.lrtscluster</name>
  <value>nn216,nn217</value>
 </property>

 <property>
  <name>dfs.namenode.rpc-address.lrtscluster.nn216</name>
  <value>lrts216:8020</value>
 </property>

 <property>
  <name>dfs.namenode.rpc-address.lrtscluster.nn217</name>
  <value>lrts217:8020</value>
 </property>
 <property>
  <name>dfs.namenode.http-address.lrtscluster.nn216</name>
  <value>lrts216:50070</value>
 </property>
 <property>
  <name>dfs.namenode.http-address.lrtscluster.nn217</name>
  <value>lrts217:50070</value>
 </property>
 <property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://lrts216:8485;lrts217:8485;lrts218:8485/lrtscluster
  </value>
 </property>
 <property>
  <name>dfs.client.failover.proxy.provider.lrtscluster</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
  </value>
 </property>

 <property>
  <name>dfs.ha.fencing.methods</name>
  <value>sshfence</value>
 </property>

 <property>
  <name>dfs.ha.fencing.ssh.private-key-files</name>
  <value>/home/hadoop/.ssh/id_rsa</value>
 </property>
 <property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/home/hadoop/hadoop-2.2.0/journal</value>
 </property>
 <property>
  <name>dfs.ha.automatic-failover.enabled</name>
  <value>true</value>
 </property>

同时要修改下原来的配置,注释掉原来对 dfs.namenode.http-address 的配置:

    <!–
 <property>
  <name>dfs.namenode.http-address</name>
  <value>lrts216:50070</value>
  <description>
   The address and the base port where the dfs namenode web ui will listen on.
  </description>
 </property>
  –>

 另外一个需要追加修改的配置 /home/hadoop/hadoop-2.2.0/etc/hadoop/core-site.xml:

 <property>
  <name>ha.zookeeper.quorum</name>
  <value>lrts216:2181,lrts217:2181,lrts218:2181</value>
 </property>

 

————————————– 分割线 ————————————–

相关阅读

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

————————————– 分割线 ————————————–

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2014-05/101177p2.htm

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