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

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

133次阅读
没有评论

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

 * 本文档分别阐述了给新建集群配置 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 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

————————————– 分割线 ————————————–
 
二、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 状态。

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

三、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 下只有 1 台 datanode,看了下日志发现 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 就不会出现上面的问题。

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

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

 * 本文档分别阐述了给新建集群配置 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 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

————————————– 分割线 ————————————–
 
二、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 状态。

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

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