### hadoop2体系结构
要想理解本节内容,首先需要了解hadoop1的体系结构。
hadoop1的核心组成是两部分,即HDFS和MapReduce。在hadoop2中变为HDFS和Yarn。
新的HDFS中的NameNode不再是只有一个了,可以有多个(目前只支持2个)。每一个都有相同的职能。
这两个NameNode的地位如何哪?答:一个是active状态的,一个是standby状态的。当集群运行时,只有active状态的NameNode是正常工作的,standby状态的NameNode是处于待命状态的,时刻同步active状态NameNode的数据。一旦active状态的NameNode不能工作,通过手工或者自动切换,standby状态的NameNode就可以转变为active状态的,就可以继续工作了。这就是高可靠。
当NameNode发生故障时,他们的数据如何保持一致哪?在这里,2个NameNode的数据其实是实时共享的。新HDFS采用了一种共享机制,JournalNode集群或者NFS进行共享。NFS是操作系统层面的,JournalNode是hadoop层面的,我们这里使用JournalNode集群进行数据共享。
如何实现NameNode的自动切换哪?这就需要使用ZooKeeper集群进行选择了。HDFS集群中的两个NameNode都在ZooKeeper中注册,当active状态的NameNode出故障时,ZooKeeper能检测到这种情况,它就会自动把standby状态的NameNode切换为active状态。
HDFS Federation(HDFS联盟)是怎么回事?答:联盟的出现是有原因的。我们知道NameNode是核心节点,维护着整个HDFS中的元数据信息,那么其容量是有限的,受制于服务器的内存空间。当NameNode服务器的内存装不下数据后,那么HDFS集群就装不下数据了,寿命也就到头了。因此其扩展性是受限的。HDFS联盟指的是有多个HDFS集群同时工作,那么其容量理论上就不受限了,夸张点说就是无限扩展。
在Hadoop2.0.0之前,NameNode(NN)在HDFS集群中存在单点故障(single point of failure),每一个集群中存在一个NameNode,如果NN所在的机器出现了故障,那么将导致整个集群无法利用,直到NN重启或者在另一台主机上启动NN守护线程。
主要在两方面影响了HDFS的可用性:
(1)、在不可预测的情况下,如果NN所在的机器崩溃了,整个集群将无法利用,直到NN被重新启动;
(2)、在可预知的情况下,比如NN所在的机器硬件或者软件需要升级,将导致集群宕机。
HDFS的高可用性将通过在同一个集群中运行两个NN(active NN & standby NN)来解决上面两个问题,这种方案允许在机器破溃或者机器维护快速地启用一个新的NN来恢复故障。
在典型的HA集 群中,通常有两台不同的机器充当NN。在任何时间,只有一台机器处于Active状态;另一台机器是处于Standby状态。Active NN负责集群中所有客户端的操作;而Standby NN主要用于备用,它主要维持足够的状态,如果必要,可以提供快速的故障恢复。
为了让 Standby NN的状态和Active NN保持同步,即元数据保持一致,它们都将会和JournalNodes守护进程通信。当Active NN执行任何有关命名空间的修改,它需要持久化到一半以上的JournalNodes上(通过edits log持久化存储),而Standby NN负责观察edits log的变化,它能够读取从JNs中读取edits信息,并更新其内部的命名空间。一旦Active NN出现故障,Standby NN将会保证从JNs中读出了全部的Edits,然后切换成Active状态。Standby NN读取全部的edits可确保发生故障转移之前,是和Active NN拥有完全同步的命名空间状态。
为了提供快速的故障恢复,Standby NN也需要保存集群中各个文件块的存储位置。为了实现这个,集群中所有的Database将配置好Active NN和Standby NN的位置,并向它们发送块文件所在的位置及心跳,如下图所示:
Hadoop2中HDFS的高可用性实现原理
在任何时候,集群中只有一个NN处于Active 状态是极其重要的。否则,在两个Active NN的状态下NameSpace状态将会出现分歧,这将会导致数据的丢失及其它不正确的结果。为了保证这种情况不会发生,在任何时间,JNs只允许一个 NN充当writer。在故障恢复期间,将要变成Active 状态的NN将取得writer的角色,并阻止另外一个NN继续处于Active状态。
为了部署HA集群,你需要准备以下事项:
(1)、NameNode machines:运行Active NN和Standby NN的机器需要相同的硬件配置;
(2)、JournalNode machines:也就是运行JN的机器。JN守护进程相对来说比较轻量,所以这些守护进程可以可其他守护线程(比如NN,YARN ResourceManager)运行在同一台机器上。在一个集群中,最少要运行3个JN守护进程,这将使得系统有一定的容错能力。当然,你也可以运行3 个以上的JN,但是为了增加系统的容错能力,你应该运行奇数个JN(3、5、7等),当运行N个JN,系统将最多容忍(N-1)/2个JN崩溃。
在HA集群中,Standby NN也执行namespace状态的checkpoints,所以不必要运行Secondary NN、CheckpointNode和BackupNode;事实上,运行这些守护进程是错误的。
集群执行步骤如下:
1、创建hadoop用户
2、安装JDK
3、配置hosts
4、安装SSH,配置免密钥登录
5、关闭防火墙
6、修改时区,同步集群时间
7、ZK(安装,启动,验证)
8、HDFS+HA的结构图
9、角色分配
10、环境变量配置
11、核心文件配置
12、启动命令(hdfs和yarn的相关命令)
13、HA的切换,故障模拟
参考文档
http://www.cnblogs.com/smartloli/p/4298430.html
```
### 安装
zookeeper集群安装和hadoop集群的安装省略
环境说明:
1、系统环境
[root@mylab hadoop]# cat /etc/issue
CentOS release 6.6 (Final)
Kernel \r on an \m
2、hadoop版本
[root@mylab hadoop]# /usr/local/hadoop/bin/hadoop version
Hadoop 2.7.1
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 15ecc87ccf4a0228f35af08fc56de536e6ce657a
Compiled by jenkins on 2015-06-29T06:04Z
Compiled with protoc 2.5.0
From source with checksum fc0a1a23fc1868e4d5ee7fa2b28a58a
This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-2.7.1.jar
[root@mylab hadoop]#
3、JDK版本
[root@mylab hadoop]# java -version
java version "1.8.0_74"
Java(TM) SE Runtime Environment (build 1.8.0_74-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)
[root@mylab hadoop]#
4、hosts文件
[root@mylab hadoop]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.237 mylab master nna hadoop-cluster
#namenode active,zookeeper
192.168.100.238 mylab1 node1 nns dn1
#namenode standby, datenode1,zookeeper
192.168.100.239 mylab2 node2 dn2
#datenode2, zookeeper
[root@mylab hadoop]#
5、core-site.xml,hdfs-site.xml ,mapred-site.xml ,yarn-site.xml配置文件
core-site.xml
<configuration><property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-cluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131702</value>
</property>
<!--指定可以在任何IP访问-->
<property>
<name>hadoop.proxyuser.hduser.hosts</name>
<value>*</value>
</property>
<!--指定所有用户可以访问-->
<property>
<name>hadoop.proxyuser.hduser.groups</name>
<value>*</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>mylab1:2181,mylab2:2181,mylab:2181</value>
</property>
<property>
<name>dfs.client.read.shortcircuit</name>
<value>true</value>
</property>
<property>
<name>dfs.client.read.shortcircuit.skip.checksum</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>fs.alluxio.impl</name>
<value>alluxio.hadoop.FileSystem</value>
</property>
<property>
<name>fs.alluxio-ft.impl</name>
<value>alluxio.hadoop.FaultTolerantFileSystem</value>
<description>The Alluxio FileSystem (Hadoop 1.x and 2.x) with fault tolerant support</description>
</property>
<property>
<name>fs.AbstractFileSystem.alluxio.impl</name>
<value>alluxio.hadoop.AlluxioFileSystem</value>
<description>The Alluxio AbstractFileSystem (Hadoop 2.x)</description>
</property>
<!--
<property>
<name>dfs.hosts.exclude</name>
<value>/usr/local/hadoop/etc/hadoop/excludes</value>
</property>
<property>
<name>io.native.lib.available</name>
<value>true</value>
</property>
<property>
<name>hadoop.native.lib</name>
<value>true</value>
</property>
-->
</configuration>
hdfs-site.xml
<configuration><!--指定支持高可用自动切换机制 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!--指定cluster出故障时,哪个实现类负责执行故障切换-->
<property>
<name>dfs.client.failover.proxy.provider.hadoop-cluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--需要NameNode切换,使用ssh方式进行操作-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>hadoop-cluster</value>
</property>
<property>
<name>dfs.ha.namenodes.hadoop-cluster</name>
<value>mylab,mylab1</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hadoop-cluster.mylab</name>
<value>mylab:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.hadoop-cluster.mylab</name>
<value>mylab:50070</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hadoop-cluster.mylab1</name>
<value>mylab1:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.hadoop-cluster.mylab1</name>
<value>mylab1:50070</value>
</property>
<!--指定cluster的两个NameNode共享edits文件目录时,使用的JournalNode集群信息-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://mylab:8485;mylab1:8485;mylab2:8485/hadoop-cluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/hadoop/tmp/journal</value>
</property>
<property>
<name>dfs.journalnode.http-address</name>
<value>0.0.0.0:8480</value>
</property>
<property>
<name>dfs.journalnode.rpc-address</name>
<value>0.0.0.0:8485</value>
</property>
<!--指定namenode名称空间的存储地址,配置多个目录冗余-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/dfs/name</value>
<description>dir1,dir2</description>
</property>
<!--指定datanode数据存储地址-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!--
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>192.168.3.237:9001</value>
</property>
-->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
<name>dfs.datanode.data.dir.perm</name>
<value>755</value>
</property>
<property>
<name>dfs.block.local-path-access.user</name>
<value>hadoop,root</value>
</property>
<property>
<name>dfs.datanode.hdfs-blocks-metadata.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.client.read.shortcircuit</name>
<value>true</value>
</property>
<!--
<property>
<name>dfs.domain.socket.path</name>
<value>/var/lib/hadoop-hdfs/dn_socket</value>
</property>
<-->
<property>
<name>dfs.client.use.legacy.blockreader.local</name>
<value>true</value>
</property>
<property>
<name>dfs.client.read.shortcircuit.buffer.size</name>
<value>4096</value>
</property>
<property>
<name>dfs.namenode.safemode.threshold-pct</name>
<value>0</value>
</property>
<property>
<name>dfs.client.file-block-storage-locations.timeout.millis</name>
<value>10000</value>
</property>
<property>
<name>dfs.datanode.max.xcievers</name>
<value>4096</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>mylab1:2181,mylab2:2181,mylab:2181</value>
</property>
</configuration>
mapred-site.xml
<configuration><!-- 配置MapReduce运行于yarn中 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 配置 MapReduce JobHistory Server 地址 ,默认端口10020 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>192.168.100.237:10020</value>
</property>
<!-- 配置 MapReduce JobHistory Server web ui 地址, 默认端口19888 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>192.168.100.237:19888</value>
</property>
<property>
<name>mapred.hosts.exclude</name>
<value>/usr/local/hadoop/etc/hadoop/excludes</value>
<final>true</final>
</property>
</configuration>
cat yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>192.168.100.237:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>192.168.100.237:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>192.168.100.237:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>192.168.100.237:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>192.168.100.237:8088</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>mylab1:2181,mylab2:2181,mylab:2181</value>
</property>
<!--配置与zookeeper的连接地址-->
<property>
<name>yarn.resourcemanager.zk-state-store.address</name>
<value>mylab1:2181,mylab2:2181,mylab:2181</value>
</property>
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>mylab1:2181,mylab2:2181,mylab:2181</value>
</property>
</configuration>
#### 启动过程
启动时,要非常小心,请严格按照我这里描述的步骤做,每一步要检查自己的操作是否正确。
#### 1.首先检查各个节点的配置文件是否正确
### 2.启动ZooKeeper集群
在各个节点启动zookeeper
[hadoop@mylab zookeeper]#/opt/zookeeper/bin/zkServer.sh start
查看zk状态
[root@mylab ~]# /opt/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: follower
[root@mylab ~]#
### 3.格式化ZooKeeper集群
目的是在ZooKeeper集群上建立HA的相应节点。
[hadoop@mylab hadoop]$/usr/local/hadoop/bin/hdfs zkfc -formatZK
sr/lib
17/04/29 16:47:07 INFO zookeeper.ZooKeeper: Client environment:java.io.tmpdir=/tmp
17/04/29 16:47:07 INFO zookeeper.ZooKeeper: Client environment:java.compiler=<NA>
17/04/29 16:47:07 INFO zookeeper.ZooKeeper: Client environment:os.name=Linux
17/04/29 16:47:07 INFO zookeeper.ZooKeeper: Client environment:os.arch=amd64
17/04/29 16:47:07 INFO zookeeper.ZooKeeper: Client environment:os.version=2.6.32-504.el6.x86_64
17/04/29 16:47:07 INFO zookeeper.ZooKeeper: Client environment:user.name=hadoop
17/04/29 16:47:07 INFO zookeeper.ZooKeeper: Client environment:user.home=/home/hadoop
17/04/29 16:47:07 INFO zookeeper.ZooKeeper: Client environment:user.dir=/usr/local/hadoop/etc/hadoop
17/04/29 16:47:07 INFO zookeeper.ZooKeeper: Initiating client connection, connectString=mylab1:2181,mylab2:2181,mylab:2181 sessionTimeout=5000 watcher=org.apache.hadoop.ha.ActiveStandbyElector$WatcherWithClientRef@1623b78d
17/04/29 16:47:07 INFO zookeeper.ClientCnxn: Opening socket connection to server mylab2/192.168.3.239:2181. Will not attempt to authenticate using SASL (unknown error)
17/04/29 16:47:07 INFO zookeeper.ClientCnxn: Socket connection established to mylab2/192.168.3.239:2181, initiating session
17/04/29 16:47:07 INFO zookeeper.ClientCnxn: Session establishment complete on server mylab2/192.168.3.239:2181, sessionid = 0x25bb8da82280000, negotiated timeout = 5000
17/04/29 16:47:07 INFO ha.ActiveStandbyElector: Session connected.
17/04/29 16:47:07 INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/hadoop-cluster in ZK.
17/04/29 16:47:07 INFO zookeeper.ClientCnxn: EventThread shut down
17/04/29 16:47:07 INFO zookeeper.ZooKeeper: Session: 0x25bb8da82280000 closed
[hadoop@mylab hadoop]$
到zk上查看
[zk: localhost:2181(CONNECTED) 5] ls /hadoop-ha/hadoop-cluster
[]
[zk: localhost:2181(CONNECTED) 6] get /hadoop-ha/hadoop-cluster
cZxid = 0x900000005
ctime = Sat Apr 29 16:47:07 CST 2017
mZxid = 0x900000005
mtime = Sat Apr 29 16:47:07 CST 2017
pZxid = 0x900000005
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 0
[zk: localhost:2181(CONNECTED) 7]
注:格式化操作的目的是在ZK集群中建立一个节点,用于保存集群hadoop-cluster中NameNode的状态数据】
### 4.启动JournalNode集群
在各个节点分别执行命令
[hadoop@mylab sbin]$ ./hadoop-daemon.sh start journalnode
starting journalnode, logging to /usr/local/hadoop/logs/hadoop-hadoop-journalnode-mylab.out
[hadoop@mylab sbin]$ jps
19337 JournalNode
19386 Jps
[hadoop@mylab sbin]$
自动在tmp目录下创建如下目录
[hadoop@mylab sbin]$ ls /usr/local/hadoop/tmp/
journal
[hadoop@mylab sbin]$
注:此时目录下没有数据,空目录。
查看启动端口:8480 8485
[hadoop@mylab sbin]$ netstat -tunlp
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:8480 0.0.0.0:* LISTEN 19337/java
tcp 0 0 0.0.0.0:8485 0.0.0.0:* LISTEN 19337/java
tcp 0 0 :::21811 :::* LISTEN -
tcp 0 0 :::22 :::* LISTEN -
tcp 0 0 ::1:25 :::* LISTEN -
tcp 0 0 :::56289 :::* LISTEN -
tcp 0 0 :::2181 :::* LISTEN -
tcp 0 0 :::50476 :::* LISTEN -
tcp 0 0 ::ffff:192.168.3.237:3888 :::* LISTEN -
udp 0 0 0.0.0.0:68 0.0.0.0:* -
[hadoop@mylab sbin]$
6.在主节点格式化NameNode
格式化
./hdfs namenode -format -clusterid c1
参数说明:
Usage: java NameNode [-backup] |
[-checkpoint] |
[-format [-clusterid cid ] [-force] [-nonInteractive] ] |
[-upgrade [-clusterid cid] [-renameReserved<k-v pairs>] ] |
[-upgradeOnly [-clusterid cid] [-renameReserved<k-v pairs>] ] |
[-rollback] |
[-rollingUpgrade <rollback|downgrade|started> ] |
[-finalize] |
[-importCheckpoint] |
[-initializeSharedEdits] |
[-bootstrapStandby] |
[-recover [ -force] ] |
[-metadataVersion ] ]
启动命令
/usr/local/hadoop/sbin/hadoop-daemon.sh start namenode
查看name目录和journal已经有数据了
[hadoop@mylab hadoop]$ ls dfs/name/
current in_use.lock
[hadoop@mylab hadoop]$
[hadoop@mylab hadoop]$ ls tmp/journal/
hadoop-cluster
[hadoop@mylab hadoop]$
注:namenode节点格式化后,要先启动namenode节点
7.把NameNode的数据从主节点同步到备节点中
此步骤要在备用namenode上操作
[hadoop@mylab1 hadoop]$ ./bin/hdfs namenode -bootstrapStandby
=====================================================
About to bootstrap Standby ID mylab1 from:
Nameservice ID: hadoop-cluster
Other Namenode ID: mylab
Other NN's HTTP address: http://mylab:50070
Other NN's IPC address: mylab/192.168.100.237:9000
Namespace ID: 107323084
Block pool ID: BP-624044142-192.168.100.237-1493621000502
Cluster ID: c1
Layout version: -63
isUpgradeFinalized: true
=====================================================
17/05/01 14:53:14 INFO common.Storage: Storage directory /usr/local/hadoop/dfs/name has been successfully formatted.
17/05/01 14:53:15 INFO namenode.TransferFsImage: Opening connection to http://mylab:50070/imagetransfer?getimage=1&txid=0&storageInfo=-63:107323084:0:c1
17/05/01 14:53:15 INFO namenode.TransferFsImage: Image Transfer timeout configured to 60000 milliseconds
17/05/01 14:53:15 INFO namenode.TransferFsImage: Transfer took 0.01s at 0.00 KB/s
17/05/01 14:53:15 INFO namenode.TransferFsImage: Downloaded file fsimage.ckpt_0000000000000000000 size 352 bytes.
17/05/01 14:53:15 INFO util.ExitUtil: Exiting with status 0
17/05/01 14:53:15 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at mylab1/192.168.100.238
************************************************************/
[hadoop@mylab1 hadoop]$
### 启动另一个namenode,在备用namenode上执行
/usr/local/hadoop/sbin/hadoop-daemon.sh start namenode
### 启动所有的datanode
在所有的数据节点启动
/usr/local/hadoop/sbin/hadoop-daemons.sh start datanode
### 启动Yarn
在主数据节点启动
/usr/local/hadoop/sbin/start-yarn.sh
【产生java进程ResourceManager和NodeManager】
### 启动ZooKeeperFailoverController
在主节点和备用节点启动
/usr/local/hadoop/sbin/hadoop-daemon.sh start zkfc
【产生java进程DFSZKFailoverController】
### 查看进程
[hadoop@mylab logs]$ jps
10512 DFSZKFailoverController
11200 Jps
7654 JournalNode
10184 ResourceManager
10041 DataNode
10747 NameNode
[hadoop@mylab logs]$
[hadoop@mylab1 .ssh]$ jps
9906 JournalNode
10066 NameNode
12007 DFSZKFailoverController
11832 NodeManager
12585 Jps
11708 DataNode
[hadoop@mylab1 .ssh]$
[hadoop@mylab2 hadoop]$ jps
8723 JournalNode
8889 DataNode
9067 Jps
9004 NodeManager
[hadoop@mylab2 hadoop]$ jps
8723 JournalNode
8889 DataNode
9147 Jps
9004 NodeManager
[hadoop@mylab2 hadoop]$
### 验证namenode自动切换
前提:要配置主备节点可以互信。即ssh免密码互相登录
手动关闭主namenode节点,可以看到备用namenode节点会自动接管成为主节点
通过http://ip:50070/dfshealth.html#tab-overview可以查看到状态
一般注意:
配置文件,网络问题
参考地址:
http://www.superwu.cn/2014/02/12/1094/9/
http://wenda.chinahadoop.cn/question/740
http://blog.csdn.net/xuekunlu/article/details/50510740
编辑回复