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