首家大数据培训挂牌机构 股票代码:837906 | EN CN
异常解决方案—NameNode 宕机读写测试
异常解决方案—NameNode 宕机切换实验
异常解决方案—Data Node 配置
异常解决方案—Backup Node配置
异常解决方案—NameNode配置
异常解决方案—6.5.1异常情况分析
安装及配置
5NameNode安装及配置以及6BackupNode安装及配置
6.4.4虚拟机集群架设
6.4.3安装JDK
3.配置操作系统
2.创建虚拟机与安装操作系统
6.4构建实验环境
实验方案说明
故障切换机制
日志池(journal spool)机制
元数据操作情景分——BackupNode更新磁盘上的日志文件
元数据操作情景分——NameNode通过日志输出流......
元数据操作情景分——NameNode将日志写入日志文件
元数据操作情景分——NameNode更新内存镜像
元数据操作情景分——客户端执行命令流程
元数据操作情景分
Hadoop的Backup Node方案——运行机制分析(5)
Hadoop的Backup Node方案——运行机制分析(4)
Hadoop的Backup Node方案——运行机制分析(3)
Hadoop的Backup Node方案——运行机制分析(2)
Hadoop的Backup Node方案——运行机制分析(1)
Hadoop的Backup Node方案——系统架构
Hadoop的Backup Node方案—Backup Node 概述
元数据可靠性机制以及使用说明
Checkpoint 过程情景分析
元数据更新及日志写入情景分析
NameNode启动加载元数据情景分析
Hadoop的元数据备份机制的进行分析
元数据应用场景分析
Format情景分析
磁盘元数据文件
HDFS之代码分析——元数据结构
HDFS之内存元数据结构
什么是HDFS的元数据
Hadoop中DRDB方案和AvatarNode方案
Hadoop中常用各方案的对比
Hadoop的BackupNode方案
Hadoop的CheckpointNode方案
Hadoop的SecondaryNameNode方案
Hadoop的元数据备份方案
影响HDFS可用性的几个因素
什么是高可用性? 详细解析
HDFS系统架构简介
如何安装和配置Hadoop集群
如何在Windows下安装Hadoop
在MacOSX上安装与配置Hadoop
Linux下安装Hadoop的步骤
Hadoop的集群安全策略介绍
Hive的数据管理介绍
HBase的数据管理介绍
HDFS的数据管理介绍
Hadoop计算模型之 MapReduce 简介
Hadoop于分布式开发
Hadoop体系结构介绍
Hadoop的项目结构详解
一文读懂Hadoop

异常解决方案—NameNode 宕机读写测试

于2018-01-24由小牛君创建

分享到:


6.5.6 NameNode 宕机读写测试

NameNode机时,需要在运行BackupNode的节点上终止BackupNode,修改配置文件后以NameNode方式启动。NameNode(原BackupNode)启动后将获得虚拟IP,集群中的DataNode无需改动配置,也不需要重启就可以到新的NameNode注册,整个集群恢复正常,接下来,选择一个新的节点启动BackupNode。本节实验模拟以上场景,测试其对读写操作的影响。具体步骤如下。

视频参见:\视频\4BackupNode\9hadoop-0.21.0数据读写实验.exe

1.启动虚拟机

依次启动namenode0namenode1datanode00datanode01datanode02datanode03。使用SecureCRT分别登录到各节点。如果节点已经启动,则重启节点,恢复到初始状态。

2.启动虚拟IP

1)在NameNode(namenode0)上执行。

$ nohup /etc/ucarp.sh &

Ucarp启动后,NameNode(namenode0)将增加一个虚拟IP192.168.1.9)对外工作,在其他节点上,访问192.168.1.9可直接访问到NameNode(namenode0)

datanode00终端上运行。

$ ssh 192.168.1.9 hostname

运行结果为namenode0,说明通过虚拟IP192.168.1.9)直接访问到了NameNode(namenode0)

2)在BackupNode(namenode1)上执行。

$ nohup /etc/ucarp.sh &

NameNode(namenode0)无法访问时,BackupNode(namenode1)将接替NameNode(namenode0)的虚拟IP192.168.1.9)对外服务。

3.启动Hadoop

1)启动HDFS集群。

NameNode(namenode0)的终端上执行。

$/usr/local/hadoop-0.21.0/bin/start-dfs.sh

查看启动情况。

$/usr/local/hadoop-0.21.0/bin/hadoop dfsadmin -report

HDFS集群状态。

2)启动BackupNode(namenode1)

BackupNode(namenode1)的终端上执行,该命令可使得日志输出到文件。

$/usr/local/hadoop-0.21.0/bin/hadoop-daemon.sh start namenode -backup

查看启动情况。

$jps

查看日志。

$ls –l /usr/local/hadoop-0.21.0/logs

3)检查HDFS

NameNode(namenode0)上执行,通过NameNode(namenode0)上的元数据,查询HDFS的情况。

$/usr/local/hadoop-0.21.0/bin/hadoop dfs –lsr /

可以看到在/tmp目录下有没有192.168.1.13192.168.1.164四个目录,如果没有,则手工创建。

Backup Node(namenode1)上执行:

$/usr/local/hadoop-0.21.0/bin/hadoop dfs –D

fs.default.name=hdfs://192.168.1.12:50100 –lsr /

查询BackupNode(namenode1)上的元数据信息。可以看到两者显示一样,说明元数据已经同步。

4.启动写操作

调用脚本,从datanode00datanode03四个客户端节点向HDFS“/tmp”下的192.168.1.13192.168.1.164四个目录中写入文件,每个客户端写入50个文件,编号为1000010050,每个文件大小为5MB,写入间隔10s

datanode00datanode03上依次执行:

$/usr/local/hadoop-0.21.0/bin/write_to_hdfs.sh 50 50000000 10注意:write_to_hdfs.sh脚本源码参见4Backup Node\write_to_hdfs.sh,其中调用/usr/local/hadoop-0.21.0/bin/makefile程序用于创建文件。

5.准备切换

由于下面将模拟NameNode无法正常服务,在此,修改BackupNode(namenode1)的配置,为其切换为NameNode做准备。

1)修改hdfs-site.xml

dfs.http.address的值修改为0.0.0.0:50070,在所有IP地址上监听,这样外部通过虚拟IP192.168.1.9)就可以访问到namenode1Web

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

<property>

<name>dfs.http.address</name>

<value>0.0.0.0:50070</value>

</property>

<property>

<name>dfs.name.dir</name>

<value>/usr/local/hadoop/local/namenode</value>

</property>

<property>

<name>dfs.name.edits.dir</name>

<value>/usr/local/hadoop/local/editlog</value>

</property>

<property>

<name>dfs.data.dir</name>

<value>/usr/local/hadoop/block</value>

</property>

</configuration>

2)修改 core-site.xml

$vi conf/core-site.xml

fs.default.name的值修改为hdfs://0.0.0.0:9000,在所有IP地址上监听,192.168.1.9是其中的一个IP,因此可以接收所有访问192.168.1.9的请求,如来自客户端或DataNode的请求。

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

<property>

<name>fs.default.name</name>

<value>hdfs://0.0.0.0:9000</value>

</property>

<property>

<name>hadoop.tmp.dir</name>

<value>/usr/local/hadoop/tmp</value>

</property>

</configuration>

6.模拟NameNode无法提供服务

重启NameNode(namenode0)之前,先查看一下HDFS上文件的写入情况,在NameNode(namenode0)上执行:

$/usr/local/hadoop-0.21.0/bin/hadoop dfs –lsr /

可以看到,此时每个客户端的50个文件并未全部写完,说明此时还在进行写入操作。

重启NameNode(namenode0)

$sudo reboot

7.切换BackupNode

1)关闭BackupNode(namenode1)上的NameNode进程。

BackupNode(namenode1)上执行:

$jps

查看NameNode的进程号,将其Kill掉。

2)在BackupNode(namenode1)上启动新的NameNode

$/usr/local/hadoop-0.21.0/bin/hadoop-daemon.sh start namenode

3)查看集群启动情况。

$/usr/local/hadoop-0.21.0/bin/hadoop dfsadmin -report

4)查看HDFS

$/usr/local/hadoop-0.21.0/bin/hadoop dfs –lsr /

连续执行上面的命令,可以看到有新的文件创建,说明切换成功,等待文件写入结束,再次查看,发现一些文件没有成功复制到HDFS中,以本次实验为例:

192.168.1.13 10013~10017

192.168.1.14 10013~10016

192.168.1.15 10013~10016

192.168.1.16 10013~10016

以上文件的操作发生在切换期间,因此需要有额外的机制来确保其写入成功。

8.启动新的BackupNode

选择刚才重启的namenode0节点作为新的BackupNode

1)启动虚拟IP

$nohup /etc/ucarp.sh &

测试虚拟IP是否工作。

$ssh 192.168.1.9 hostname

正常情况下,虚拟IP应指向namenode1

2)修改配置文件。

修改hdfs-site.xml

$vi conf/hdfs-site.xml

dfs.http.address的值修改为hdfs://192.168.1.12:50070

修改core-site.xml

$vi conf/core-site.xml

fs.default.name的值修改为hdfs://192.168.1.12:9000

3)启动Backup Node

$bin/hadoop-daemon.sh start namenode -backup

4)查看namenode0(Backup Node)的元数据。

$bin/hadoop dfs –D fs.default.name=hdfs://192.168.1.11:50100 –lsr /

可以看到元数据已同步。

9.启动读操作

调用脚本write_to_hdfs.sh,从datanode00datanode03四个客户端节点向HDFS“/tmp”下的192.168.1.13192.168.1.16四个目录中写入文件,每个客户端写入50个文件,编号为1000010050,每个文件大小为5MB,写入间隔10s。在datanode00~datanode03客户端调用脚本read_from_hdfs_IP.sh(脚本源码参见4BackupNode\read_from_hdfs_IP.sh)从HDFS上复制对应目录下的文件到本地的/tmp/192.168.1.1x目录下。在datanode00datanode03上执行:

$nohup /usr/local/hadoop-0.21.0/bin/read_from_hdfs_IP.sh 192.168.1.13 &

$nohup /usr/local/hadoop-0.21.0/bin/read_from_hdfs_IP.sh 192.168.1.14 &

$nohup /usr/local/hadoop-0.21.0/bin/read_from_hdfs_IP.sh 192.168.1.15 &

$nohup /usr/local/hadoop-0.21.0/bin/read_from_hdfs_IP.sh 192.168.1.16 &

查看执行情况。

$ps -an

查看复制情况。

$ls –l /tmp/192.168.1.13

$ls –l /tmp/192.168.1.14

$ls –l /tmp/192.168.1.15

$ls –l /tmp/192.168.1.16

10.准备切换

此次切换是将namenode0(BackupNode)切换为NameNode。在namenode0上修改配置文件。

1)修改hdfs-site.xml

$vi conf/hdfs-site.xml

dfs.http.address的值修改为hdfs://0.0.0.0:50070

2)修改core-site.xml

$vi conf/core-site.xml

fs.default.name的值修改为hdfs://0.0.0.0:9000

11.模拟NameNode(namenode1)无法服务

namenode1上执行:

$sudo reboot

12.切换BackupNode

具体操作参见步骤7,在namenode0上执行。

datanode00上查看复制情况,可以看到有新的文件复制到本地,说明切换成功,但也有部分文件没有复制成功,以本次实验为例。

192.168.1.13 10016~10025

192.168.1.14 10015~10024

192.168.1.15 10013~10023

192.168.1.16 10015~10024

以上未成功的文件发生在切换期间,需要其他的机制来确保其复制成功。

13.启动新的BackupNode

选择刚才重启的namenode1节点作为新的BackupNode,具体操作参见步骤9,在namenode1上执行。