*本文档分别阐述了给新建集群配置HA的方法(需要格式化namenode)以及给现有集群配置HA的方法(不需要格式化namenode),均使用QJM方案。
一、机器情况
angel1
10.2.0.101
baby18
10.1.1.38
baby19
10.1.1.39
baby20
10.1.1.40
我们有两台namenode机器,分别部署在baby20和angel1上;
我们有三台journalnode,分别部署在baby18、baby19和baby20上,用来存储namenode元数据;
有三台zookeeper组成的集群用来管理namenode的状态(active或者standby),分别部署在baby18、baby19和baby20上;
有三台datanode节点,部署在baby18、baby19和baby20上。
--------------------------------------分割线 --------------------------------------
Ubuntu 12.10 +Hadoop 1.2.1版本集群配置
--------------------------------------分割线 --------------------------------------
二、 HDFS部署文档
1.建立用户
每台机器都用hdfs账号登录,进行操作。
2.建立ssh联接
登录baby20
mkdir .ssh
ssh-keygen -t rsa –f~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
将.shh文件分发到baby18、baby19和angel1上;
对angel1做同样操作,保证四台机器无需密码即可切换用户。
3. 搭建zookeeper
4. 修改配置文件
a) 修改 core-site.xml
发上来格式太乱了,略掉。
b) 修改 hdfs-site.xml
发上来格式太乱了,略掉。
c)修改slaves
baby18
baby19
baby20
以上分发hadoop到各个机器。
注意:给新建集群和现有集群配置HA的两种方案在下面这一部分会稍有不同,将分别阐述。
(一) 给新建集群配置HA的方法(需要格式化namenode)
5. 启动JournalNode服务
进入bin目录 ./hdfs journalnode
三台部署 journalnode的机器都如此执行。
访问web页面 baby18:8480,baby19:8480,baby20:8480
检查服务是否正常 。
6. 启动hadoop
这里默认baby20为主备namenode,angel1为备用namenode。
a) 进入baby20的 hadoop/bin目录
执行 ./hdfs namenode -format
执行 ./hdfs zkfc -formatZK
执行 ./hdfs namenode
b) 进入angel1的 hadoop/bin目录
执行 ./hdfs namenode -bootstrapStandby --同步namenode元数据,需要在选举服务启动之前同步;
执行 ./hdfs namenode
c) 进入 baby18、baby19、baby20的 hadoop/bin目录
执行 ./hdfs datanode
注意:此时 查看页面baby20:35070、angel1:35070,两个namenode都是出于standby的状态,因为还未开启选举服务。
d) 每台namenode节点都要执行以下命令启动自动选举服务
执行 ./hdfs zkfc --启动自动选举服务
注意:此操作必须在启动两个namenode之后进行,否则namenode会挂掉!
此时查看页面baby20:35070、angel1:35070, 应该一个处于standby状态 一个处于active状态 。
-------------------------------------------------------------------------------
(二) 给现有集群配置HA的方法(因为不能格式化namenode,所以需要对上面的操作进行部分修改)
5. 启动JournalNode服务
进入bin目录 ./hdfs journalnode
三台部署 journalnode的机器都如此执行。
访问web页面 baby18:8480,baby19:8480,巴布亚20:8480
检查服务是否正常 。
6. 启动hadoop
这里默认baby20为主备namenode,angel1为备用namenode。
d) 进入baby20的 hadoop/bin目录
执行 hdfs namenode -initializeSharedEdits -force ---这一操作主要完成格式化所有JournalNode,以及将日志文件从baby20拷贝到所有JournalNode。
执行 ./hdfs zkfc -formatZK
执行 ./hdfs namenode
e) 进入angel1的 hadoop/bin目录
为了让主备dfs.namenode.name.dir目录下的Namenode的元数据一致以及dfs.namenode.shared.edits.dir包含最近所有的edit files,可以把主节点的dfs.namenode.name.dir目录下的元数据拷贝到备用节点dfs.namenode.name.dir和共享dfs.namenode.shared.edits.dir目录下。
执行 ./hdfs namenode
f) 进入 baby18、baby19、baby20的 hadoop/bin目录
执行 ./hdfs datanode
注意:此时 查看页面baby20:35070、angel1:35070,两个namenode都是出于standby的状态,因为还未开启选举服务。
d) 每台namenode节点都要执行以下命令启动自动选举服务
执行 ./hdfs zkfc --启动自动选举服务
注意:此操作必须在启动两个namenode之后进行,否则namenode会挂掉!
此时查看页面baby20:35070、angel1:35070, 应该一个处于standby状态 一个处于active状态 。