共计 2904 个字符,预计需要花费 8 分钟才能阅读完成。
我们在 Hadoop 配置集群时,经常将 namenode 与 secondarynamenode 存放在一个节点上,其实这是非常危险的,如果此节点崩溃的话,则整个集群不可恢复。下面介绍一下将 namenode 与 secondarynamenode 分离的方法。当然还存在好多不足和待改进的地方,欢迎各位大神指点和吐槽。
非常说明:我原本以为 masters 配置文件中的内容(主机名)是指的 namenode 的主机名称,但它实际上指的是 secondarynamenode,slavers 配置文件指的是运行了 datanode 和 tasktracker(一般是同一节点)的所有节点。并且这两个文件只有在运行 namenode 和 jobtracker(一般都在 namenode 节点上 namenode 由 core-site.xml fs.default.name 指定,jobtracker 由 mapred-site.xml mapred.job.tracker 指定)的节点才被用到,所以其它节点可以不进行配置。
所以千万不要忘记修改 namenode 节点中 masters 文件中的内容
言归正传(本实验结合本文中的集群搭建后的环境进行的)
1 将 namenode 所在的节点进行克隆 ,即新建一个节点,包括 conf 目录下的文件配置
所有文件、目录结构、环境变量等都要相同。可参考给集群添加一个新建节点一节,相关配置如:
主机名 secondary
IP 192.168.5.16
hosts 文件:
192.168.5.13 namenode
192.168.5.16 secondary
SSH 免密码登录
关于 hosts 文件和 ssh,我认为 secondarynamenode 只与 namenode 通信,所以只需跟 namenode 节点建立无密码连接即可,并且 hosts 文件的内容可以只写 namenode 节点和自身的信息,注意 namenode 节点中的 hosts 文件也需添加 secondarynamenode 节点的信息才可。
2 文件配置
(1)在 namenode 节点中 修改 hdfs-site.xml 文件为:
<property>
<name>dfs.secondary.http.address</name>
<value>192.168.5.16:50090</value>
<description>NameNode get the newest fsimage via dfs.secondary.http.address </description>
</property>
在 masters 文件中修改为 secondary
(2)在 secondarynamenodenamenode 节点中 修改 hdfs-site.xml 文件为:
<property>
<name>dfs.http.address</name>
<value>192.168.5.13:50070</value>
<description>Secondary get fsimage and edits via dfs.http.address</description>
</property>
修改 core-site.xml 文件
<property>
<name>fs.checkpoint.period</name>
<value>3600</value>
<description>The number of seconds between two periodic checkpoints.</description>
</property>
<property>
<name>fs.checkpoint.size</name>
<value>67108864</value>
</property>
<property>
<name>fs.checkpoint.dir</name>
<value>/home/zhang/hadoop0202/secondaryname</value>
</property>
其中 fs.checkpoint.period 和 fs.checkpoint.size 是 SecondaryNameNode 节点开始备份满足的条件,当满足两种情况中的任意一个,SecondaryNameNode 节点都会开始备份,第一个为设定的间隔时间到了(默认为一小时)fs.checkpoint.period 设置的时间(以秒为单位),第二个为操作日志文件的大小达到了 fs.checkpoint.size 中设置的阈值。
3 重启 hadoop 或者在 secondary 上直接进行
hadoop-daemon.sh start secondarynamenode 命令启动 secondaryNamenode
重启后我们可以看到
在 namenode 中没有了 SecondaryNameNode 的 Java 进程(很抱歉,忘记分离之前截图了,分离之前在 namenode 节点上确实有 SecondaryNameNode 的 Java 进程)
在 secondary 节点上出现 SecondaryNameNode 的 Java 进程
验证:在 secondary 节点上的 secondaryname 目录中是否有了有了镜像文件(由于在设置 core-siet.xml 文件中的 fs.checkpoint.period 参数是 3600,代表一小时,我们为了实验效果要进行参数修改,修改效果可以参照《怎样控制 namenode 检查点的发生频率》一文 http://www.linuxidc.com/Linux/2015-02/113643.htm)
Ubuntu14.04 下 Hadoop2.4.1 单机 / 伪分布式安装配置教程 http://www.linuxidc.com/Linux/2015-02/113487.htm
CentOS 安装和配置 Hadoop2.2.0 http://www.linuxidc.com/Linux/2014-01/94685.htm
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
更多 Hadoop 相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13