配置高可用hadoop集群Namenode自动切换主备

回复 收藏

### 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

2017-05-02 10:11 举报
已邀请:

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: