hadoop大数据(下)HDFS高可用集群、RM高可用集群

  • 1、高可用介绍
  • 2、hadoop高可用
  • (1)Zookeeper 集群搭建
  • (2)hadoop-HA搭建
  • (3)测试
  • 3、YARN – ResourceManager高可用
  • (1)RM资源管理器高可用部署
  • (2)测试
  • 4、补充



本文接上篇文章hadoop大数据(上)

1、高可用介绍

在前面的部署中,NN节点只有一个,一旦他down了,整个系统就瘫痪了,所以在典型的 HA 集群中,通常有两台不同的机器充当 NN。在任何时间,只有一台机器处于Active 状态;另一台机器是处于 Standby 状态。Active NN 负责集群中所有客户端的操作;而 Standby NN 主要用于备用,它主要维持足够的状态,如果必要,可以提供快速的故障恢复。

为了让 Standby NN 的状态和 Active NN 保持同步,即元数据保持一致,它们都将会和JournalNodes 守护进程通信。一旦 Active NN出现故障,Standby NN 将会保证从 JNs 中读出了全部的 Edits,然后切换成 Active 状态。Standby NN 读取全部的 edits 可确保发生故障转移之前,是和 Active NN 拥有完全同步的命名空间状态。为了提供快速的故障恢复,Standby NN 也需要保存集群中各个文件块的存储位置。为了实现这个,集群中所有的 Database 将配置好 Active NN 和 Standby NN 的位置,并向它们发送块文件所在的位置及心跳,如下图所示

配置高可用模式hadoop简历 hadoop高可用集群_配置高可用模式hadoop简历

2、hadoop高可用

实验准备五台虚拟机,准备Zookeeper的压缩包

虚拟机ip

主机名

角色

172.25.77.1

server1

NameNode、ResourceManager、DFSZKFailoverController

172.25.77.5

server5

NameNode、ResourceManager、DFSZKFailoverController

172.25.77.2

server2

DataNode、NodeManager、JournalNode、QuorumPeerMain

172.25.77.3

server3

DataNode、NodeManager、JournalNode、QuorumPeerMain

172.25.77.4

server4

DataNode、NodeManager、JournalNode、QuorumPeerMain

(1)Zookeeper 集群搭建

server1首先把之前的实验环境都给停掉,jps查看没有任何进程了,删除/tmp,就把hadoop的数据都清理了,保持纯净

配置高可用模式hadoop简历 hadoop高可用集群_配置高可用模式hadoop简历_02


server2删除/tmp,保持纯净

配置高可用模式hadoop简历 hadoop高可用集群_hadoop_03

server3删除/tmp,保持纯净

配置高可用模式hadoop简历 hadoop高可用集群_分布式_04

server4删除/tmp,保持纯净

配置高可用模式hadoop简历 hadoop高可用集群_运维_05

server5创建hodoop用户,安装nfs

配置高可用模式hadoop简历 hadoop高可用集群_hadoop_06


server5把共享的目录挂载到自己的/home/hadoop,切入hadoop用户

配置高可用模式hadoop简历 hadoop高可用集群_运维_07


server1解压Zookeeper ,由于是nfs系统全部节点都可共用

配置高可用模式hadoop简历 hadoop高可用集群_配置高可用模式hadoop简历_08


server2进入zookeeper-3.4.9/conf,复制一份配置文件,编辑 zoo.cfg 文件。创建目录/tmp/zookeeper

配置高可用模式hadoop简历 hadoop高可用集群_分布式_09


加入三个zk节点的ip,这里172.25.77.2 在zk集群中编号为1,172.25.77.3 在zk集群中编号为2,172.25.77.4 在zk集群中编号为3。2888端口是用来数据同步的,3888端口是用来选举leader的

配置高可用模式hadoop简历 hadoop高可用集群_大数据_10


根据每个节点自己的编号,把编号写入/tmp/zookeeper/myid,server2写1

配置高可用模式hadoop简历 hadoop高可用集群_配置高可用模式hadoop简历_11

server3写2

配置高可用模式hadoop简历 hadoop高可用集群_大数据_12

server4写3

配置高可用模式hadoop简历 hadoop高可用集群_配置高可用模式hadoop简历_13

server2进入zookeeper-3.4.9,开启zkserver,可以查看状态为follower

配置高可用模式hadoop简历 hadoop高可用集群_配置高可用模式hadoop简历_14


server3进入zookeeper-3.4.9,开启zkserver,可以查看状态为leader(随机选举的身份)

配置高可用模式hadoop简历 hadoop高可用集群_大数据_15


server4进入zookeeper-3.4.9,开启zkserver,可以查看状态为follower

配置高可用模式hadoop简历 hadoop高可用集群_hadoop_16

[hadoop@server2 zookeeper-3.4.9]$ jps
4338 QuorumPeerMain
4868 Jps
[hadoop@server3 zookeeper-3.4.9]$ jps
5338 QuorumPeerMain
5868 Jps
[hadoop@server4 zookeeper-3.4.9]$ jps
6338 QuorumPeerMain
7868 Jps

(2)hadoop-HA搭建

编辑etc/hadoop/core-site.xml文件

配置高可用模式hadoop简历 hadoop高可用集群_运维_17

<configuration>
<property>
    <name>fs.defaultFS</name>	%指定 hdfs 的 namenode 为 masters (名称可自定义,前后要一致)
    <value>hdfs://masters</value>
</property>

<property>
    <name>ha.zookeeper.quorum</name>	%指定 zookeeper 集群主机地址
    <value>172.25.77.2:2181,172.25.77.3:2181,172.25.77.4:2181</value>
</property>
</configuration>

配置高可用模式hadoop简历 hadoop高可用集群_大数据_18


编辑etc/hadoop/hdfs-site.xml 文件

配置高可用模式hadoop简历 hadoop高可用集群_大数据_19

[hadoop@server1 hadoop]$ cat hdfs-site.xml 
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

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

<configuration>
    <property>		%副本数为3
        <name>dfs.replication</name>
        <value>3</value>
    </property>

    <property>		%指定 hdfs 的 nameservices 为 masters,和 core-site.xml 文件中的设置保持一致
        <name>dfs.nameservices</name>
        <value>masters</value>
    </property>
    
    <property>		%masters 下面有两个 namenode 节点,分别是 h1 和 h2 (名称可自定义)
        <name>dfs.ha.namenodes.masters</name>
        <value>h1,h2</value>
    </property>
    
    <property>		%指定 h1 节点的 rpc 通信地址
        <name>dfs.namenode.rpc-address.masters.h1</name>
        <value>172.25.77.1:9000</value>
    </property>
    
    <property>		%指定 h1 节点的 http 通信地址
        <name>dfs.namenode.http-address.masters.h1</name>
        <value>172.25.77.1:9870</value>
    </property>
    
    <property>		%指定 h2 节点的 rpc 通信地址
        <name>dfs.namenode.rpc-address.masters.h2</name>
        <value>172.25.77.5:9000</value>
    </property>
    
    <property>		%指定 h2 节点的 http 通信地址
        <name>dfs.namenode.http-address.masters.h2</name>
        <value>172.25.77.5:9870</value>
    </property>
    
    <property>		%指定 NameNode 元数据在 JournalNode 上的存放位置
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://172.25.77.2:8485;172.25.77.3:8485;172.25.77.4:8485/masters</value>
    </property>
    
    <property>		%指定 JournalNode 在本地磁盘存放数据的位置
        <name>dfs.journalnode.edits.dir</name>
        <value>/tmp/journaldata</value>
    </property>
    
    <property>		%开启 NameNode 失败自动切换
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    
    <property>		%配置失败自动切换实现方式
        <name>dfs.client.failover.proxy.provider.masters</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    
    <property>		%配置隔离机制方法,每个机制占用一行
        <name>dfs.ha.fencing.methods</name>
        <value>
        sshfence
        shell(/bin/true)
        </value>
    </property>
    
    <property>		%使用 sshfence 隔离机制时需要 ssh 免密码
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/hadoop/.ssh/id_rsa</value>
    </property>
    
    <property>		%配置 sshfence 隔离机制超时时间
        <name>dfs.ha.fencing.ssh.connect-timeout</name>
        <value>30000</value>
    </property>
</configuration>

server2开启journalnode,第一次启动 hdfs 必须先手动启动 journalnode(按照编号顺序依次开启),jps看到开启了 JournalNode

配置高可用模式hadoop简历 hadoop高可用集群_大数据_20

server3开启journalnode,jps看到开启了 JournalNode

配置高可用模式hadoop简历 hadoop高可用集群_hadoop_21

server4开启journalnode,jps看到开启了 JournalNode

配置高可用模式hadoop简历 hadoop高可用集群_hadoop_22

server1进入hadoop目录,格式化 HDFS 集群

配置高可用模式hadoop简历 hadoop高可用集群_配置高可用模式hadoop简历_23


Namenode 数据默认存放在/tmp,server1需要把数据拷贝到 server5

配置高可用模式hadoop简历 hadoop高可用集群_运维_24


server1格式化 zookeeper (只需在 h1 上执行即可)

配置高可用模式hadoop简历 hadoop高可用集群_大数据_25


server2进入zk,作为一个查询的窗口,不要退出

配置高可用模式hadoop简历 hadoop高可用集群_分布式_26


可以查看到DFS虚拟目录(不要退出)

配置高可用模式hadoop简历 hadoop高可用集群_大数据_27

server1打开dfs,jps查看有DFSZKFailoverController(zk控制器)

配置高可用模式hadoop简历 hadoop高可用集群_hadoop_28


返回serever2查看,现在的主机为server1,备机为server5

配置高可用模式hadoop简历 hadoop高可用集群_大数据_29


访问172.25.77.1:9870,可以看到server1为active

配置高可用模式hadoop简历 hadoop高可用集群_配置高可用模式hadoop简历_30


访问172.25.77.5:9870,可以看到server5为standby

配置高可用模式hadoop简历 hadoop高可用集群_hadoop_31


server1创建hadoop目录,上传input目录到DFS

配置高可用模式hadoop简历 hadoop高可用集群_hadoop_32


访问172.25.77.1:9870,可以看到上传的文件

配置高可用模式hadoop简历 hadoop高可用集群_运维_33

(3)测试

现在杀掉server1

配置高可用模式hadoop简历 hadoop高可用集群_分布式_34


在server2查看,现在server5接替任务了

配置高可用模式hadoop简历 hadoop高可用集群_分布式_35


访问172.25.77.1:9870就失败了

配置高可用模式hadoop简历 hadoop高可用集群_hadoop_36


现在需要访问172.25.77.5:9870,三个DN状态正常

配置高可用模式hadoop简历 hadoop高可用集群_hadoop_37


现在server5是active

配置高可用模式hadoop简历 hadoop高可用集群_运维_38


查看input也在,没有异常

配置高可用模式hadoop简历 hadoop高可用集群_大数据_39


想要恢复server1也很简单,只要开启server1节点即可

配置高可用模式hadoop简历 hadoop高可用集群_大数据_40


不过现在server5依然是active,因为没有必要切换,浪费资源

配置高可用模式hadoop简历 hadoop高可用集群_运维_41


现在访问172.25.77.1:9870可以了,但是server1是standby

配置高可用模式hadoop简历 hadoop高可用集群_配置高可用模式hadoop简历_42


到此 hdfs 的高可用完成

3、YARN – ResourceManager高可用

(1)RM资源管理器高可用部署

编辑yarn-site.xml 文件

配置高可用模式hadoop简历 hadoop高可用集群_hadoop_43

[hadoop@server1 hadoop]$ cat yarn-site.xml 
<?xml version="1.0"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->
<configuration>

    <property>		%配置可以在 nodemanager 上运行 mapreduce 程序
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

    <property>		%指定变量
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>
    </property>

    <property>		%激活 RM 高可用
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    
    <property>		%指定 RM 的集群 id
        <name>yarn.resourcemanager.cluster-id</name>
        <value>RM_CLUSTER</value>
    </property>
    
    <property>		%定义 RM 的节点
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    
    <property>		%指定 RM1 的地址
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>172.25.77.1</value>
    </property>
    
    <property>		%指定 RM2 的地址
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>172.25.77.5</value>
    </property>
    
    <property>		%激活 RM 自动恢复
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
    </property>
    
    <property>		%配置 RM 状态信息存储方式,有 MemStore 和 ZKStore
        <name>yarn.resourcemanager.store.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>
    
    <property>		%配置为 zookeeper 存储时,指定 zookeeper 集群的地址
        <name>yarn.resourcemanager.zk-address</name>
        <value>172.25.77.2:2181,172.25.77.3:2181,172.25.77.4:2181</value>
    </property>
</configuration>

server1开启yarn,jps查看出现ResourceManager

配置高可用模式hadoop简历 hadoop高可用集群_运维_44


server5,jps查看出现ResourceManager

配置高可用模式hadoop简历 hadoop高可用集群_运维_45


server3,jps查看出现NodeManager

配置高可用模式hadoop简历 hadoop高可用集群_大数据_46


server4,jps查看出现NodeManager

配置高可用模式hadoop简历 hadoop高可用集群_大数据_47


在server2查看,RM现在rm1是active

配置高可用模式hadoop简历 hadoop高可用集群_大数据_48


访问172.25.77.1:8088,可以看到是active

配置高可用模式hadoop简历 hadoop高可用集群_分布式_49


访问172.25.77.5:8088,可以看到是standby

配置高可用模式hadoop简历 hadoop高可用集群_运维_50

(2)测试

杀掉server1的RM

配置高可用模式hadoop简历 hadoop高可用集群_运维_51


server2查看,rm2(server5)自动接管active

配置高可用模式hadoop简历 hadoop高可用集群_配置高可用模式hadoop简历_52


访问172.25.77.5:8088,可以看到是active

配置高可用模式hadoop简历 hadoop高可用集群_分布式_53


当然访问172.25.77.1:8088失败

配置高可用模式hadoop简历 hadoop高可用集群_大数据_54


恢复也很简单,server1开启RM

配置高可用模式hadoop简历 hadoop高可用集群_分布式_55


但是server1现在是standby,因为没有必要浪费资源切换

配置高可用模式hadoop简历 hadoop高可用集群_大数据_56

4、补充

其他的集群都可以像上面一样搭建高可用,方法相同,比如hbase高可用等等,这里不再赘述