共计 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