HADOOP 2.2.0 HA搭建(现有集群,QJM方案)

来源:互联网 发布:安卓播放器源码 编辑:程序博客网 时间:2024/06/05 20:28

HADOOP 2.2.0 HA搭建手册V1.0

 

 

 *本文档分别阐述了给新建集群配置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机器,分别部署在baby20angel1上;

我们有三台journalnode,分别部署在baby18baby19baby20上,用来存储namenode元数据;

有三台zookeeper组成的集群用来管理namenode的状态(active或者standby),分别部署在baby18baby19baby20上;

有三台datanode节点,部署在baby18baby19baby20上。

 

二、 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文件分发到baby18baby19angel1上;

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为主备namenodeangel1为备用namenode

a)      进入baby20 hadoop/bin目录

执行 ./hdfs namenode -format                  

执行 ./hdfs zkfc -formatZK                     

执行  ./hdfs namenode                                   

b)      进入angel1 hadoop/bin目录

执行  ./hdfs namenode -bootstrapStandby   --同步namenode元数据,需要在选举服务启动之前同步;

执行  ./hdfs namenode

c)      进入 baby18baby19baby20 hadoop/bin目录

执行 ./hdfs datanode                                      

注意:此时 查看页面baby20:35070angel1:35070,两个namenode都是出于standby的状态,因为还未开启选举服务。

d)  每台namenode节点都要执行以下命令启动自动选举服务

执行  ./hdfs zkfc   --启动自动选举服务

注意:此操作必须在启动两个namenode之后进行,否则namenode会挂掉!

 此时查看页面baby20:35070angel1:35070 应该一个处于standby状态 一个处于active状态 

-------------------------------------------------------------------------------

(二) 给现有集群配置HA的方法(因为不能格式化namenode,所以需要对上面的操作进行部分修改)

 

5. 启动JournalNode服务

进入bin目录  ./hdfs journalnode

三台部署 journalnode的机器都如此执行。

访问web页面 baby18:8480,baby19:8480,巴布亚20:8480

检查服务是否正常  

 

6.  启动hadoop

 

这里默认baby20为主备namenodeangel1为备用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)       进入 baby18baby19baby20 hadoop/bin目录

执行 ./hdfs datanode                                      

注意:此时 查看页面baby20:35070angel1:35070,两个namenode都是出于standby的状态,因为还未开启选举服务。

d)  每台namenode节点都要执行以下命令启动自动选举服务

执行  ./hdfs zkfc   --启动自动选举服务

注意:此操作必须在启动两个namenode之后进行,否则namenode会挂掉!

 此时查看页面baby20:35070angel1:35070 应该一个处于standby状态 一个处于active状态 

 

 

三、 Tips

1.      首先把各个zookeeper起来,然后在某一个节点执行hdfs zkfc -formatZK,创建命名空间;

2.      在备节点执行hdfs namenode -bootstrapStandby,这个是把主namenode节点的目录格式化并把数据从主namenode节点的元数据拷本过来,并且这个命令不会把journalnode目录在格式化;

3.      ./hadoop-daemon.sh start zkfc两个节点都做;

4.      ./hadoop-daemon.sh start datanode所有datanode节点都做;

5.      如果采用格式化namenode方法的话,datanode会报错org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for block pool Block pool,是因为namenode format会重新创建一个namenodeId,tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的数据,但是没有清空datanode下的数据,导致启动时失败,解决方法谷歌到:

We have to delete and recreate the folder /home/hadoop/dfs/data on local FS for DN.

·       Check your hdfs-site.xml file to see where dfs.data.dir is pointing to

·       and delete that folder

·       and then restart the DN daemon on machine

Above steps should create folder and resolve the problem.

6.      最后发现备用namenode下只有1datanode,看了下日志发现50010端口号被占用。。。解决办法是在hdfs-site.xml重新配一下就好啦。

7.      先起namenode在起zkfc你会发现namenode无法active状态,当你把zkfc启动后就可以了,顺序不能变,如果先把zkfc启动了,会导到namenode起不来!

8.      另外也可以采用bin/hdfs haadmin –DFSHAadmin –transitionToActive nn1 让上面配置的nn1处于active状态,nn2还处于stanby状态。另外DFSHAadmin还有一些其他的功能如下:

Usage: DFSHAAdmin [-ns ]

[-transitionToActive ]

[-transitionToStandby ]

[-failover [--forcefence] [--forceactive] ]

[-getServiceState ]

[-checkHealth ]

其中:bin/hdfs haadmin -DfSHAadmin -failover nn1 nn2是让nn2成为变为active nn1变为standby,这是使用这个命令可能会出现:Failover failed: /10.250.8.107:9000 is not ready to become active,这时我们用命令bin/hdfs haadmin -DfSHAadmin -failover --forceactive nn1 nn2就不会出现上面的问题。

 

问题终于算是圆满解决了,以上内容来很多来自网上,本人拙略地整理了下。

0 0
原创粉丝点击