Hadoop高可用+联邦机制简谈

一 Hadoop HA机制存在原因

1.1 HA:High Available,高可用

在Hadoop 2.0之前,在HDFS 集群中NameNode 存在单点故障 (SPOF:A Single Point of Failure)。 对于只有一个 NameNode 的集群,如果 NameNode 机器出现故障(比如宕机或是软件、硬件 升级),那么整个集群将无法使用,直到 NameNode 重新启动

1.2 如何解决:

HDFS 的 HA 功能通过配置 Active/Standby 两个 NameNodes 实现在集群中对 NameNode 的热备来解决上述问题。如果出现故障,如机器崩溃或机器需要升级维护,这时可通过此种方式将 NameNode 很快的切换到另外一台机器。  在一个典型的 HDFS(HA) 集群中,使用两台单独的机器配置为 NameNodes 。在任何时间点,确保 NameNodes 中只有一个处于 Active 状态,其他的处在 Standby 状态。其中 ActiveNameNode 负责集群中的所有客户端操作,StandbyNameNode 仅仅充当备机,保证一 旦 ActiveNameNode 出现问题能够快速切换。

为了能够实时同步 Active 和 Standby 两个 NameNode 的元数据信息(实际上 editlog),需提 供一个共享存储系统,可以是 NFS、QJM(Quorum Journal Manager)或者 Zookeeper,Active Namenode 将数据写入共享存储系统,而 Standby 监听该系统,一旦发现有新数据写入,则 读取这些数据,并加载到自己内存中,以保证自己内存状态与 Active NameNode 保持基本一 致,如此这般,在紧急情况下 standby 便可快速切为 active namenode。为了实现快速切换, Standby 节点获取集群的最新文件块信息也是很有必要的。为了实现这一目标,DataNode 需要配置 NameNodes 的位置,并同时给他们发送文件块信息以及心跳检测。

1.3 集群规划样例:


**Journalnode:**hadoop框架为集群专门写了分布式应用qjournal(依赖zookeeper实现),作用是为了解决HA机制同步问题。它会将NN的active节点新写入的元数据放到zookeeper集群上,standby节点在active节点正常情况下只需将zk上的edits文件同步到自己的fsimage中。

**Zkfc:**监控进程(依赖zookeeper实现)。时刻监控namenode的状态。对于处在active状态的namenode,如果发现不正常就向zookeeper集群中写入一些数据。对于处在standby状态的namenode,监控进程从zookeeper集群中读数据,从而感知到active节点是否正常。如果发现异常,监控进程负责将standby状态切换到active状态。

二 HAhadoop安装配置

2.1 以3台机器配置 hadoop HA 为例

hadoop 版本:hadoop-2.7.6.tar.gz
zookeeper 版本:zookeeper-3.4.10.tar.gz

在这里插入图片描述

2.2 提前工作

  1. 配置好3台虚拟机 hosts
# vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.8.128 hd01
192.168.8.129 hd02
192.168.8.130 hd03
  1. 关闭防火墙(root用户下)
systemctl status firewalld(查看防火墙状态)
Active: inactive (dead)(防火墙已关闭)
systemctl stop firewalld(关闭防火墙)
systemctl disable firewalld(开机不自启动
  1. 配置所有节点的ssh免密码登录设置
ssh-keygen -t rsa
然后发送给每一台,也要发送自己
ssh-copy-id hd01
ssh-copy-id hd02
ssh-copy-id hd03

2.3 Hadoop集群模式环境部署 HA

一、服务节点的部署规划

在这里插入图片描述
HA 有两种状态:

  1. 故障,需要手动切换
  2. 故障,自动故障转移
二、ZooKeeper 配置–分布式模式
  1. 把 zookeeper-3.4.10.tar.gz 解压到一个目录中
# tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/
  1. 修改conf/zoo_sample.cfg 重命名 zoo.cfg文件
  2. 指定ZK本地存储的数据存放目录
dataDir=/opt/zookeeper-3.4.10/zkData
  1. 指定所有ZK的节点以及端口号(内部相互通信端口号:选举端口号)
server.1=hd01:2888:3888
server.2=hd02:2888:3888 
server.3=hd03:2888:3888

ps:
2181表示客户端端口号
2888表示ZK节点内部通信端口号
3888表示ZK内部选举端口号
5. 在dataDir=/opt/zookeeper-3.4.10/zkData/路径下创建文件
创建名为myid的文件,注意一定要这个文件名
写对应的编号,比如:1
6. 将配置分发到其他节点上
scp -r zookeeper-3.4.10/ hd02:/opt/
scp -r zookeeper-3.4.10/ hd03:/opt/
7. 分发完成之后需要更改其他节点上的myid对应编号
里面的值就是第一台机器写1,第二台写2,第三台写3,就可以了,要跟你的server.1这里的1
8. 启动所有ZK的节点
zkServer.sh start
9. 查看状态
bin/zkServer.sh status
当看到 2个: follower 和 1个: leader 说明配置成功

三、配置 Hadoop 集群
  1. 在hadoop-env.sh和mapred-env.sh还有yarn-env.sh中写上你的jdk路径(有可能这条属性被注释掉了,记得解开,把前面的#去掉就可以了)
    export JAVA_HOME=/opt/jdk1.8.0_181
  2. 配置 /opt/hadoop-2.7.6/etc/hadoop 下的5个文件
    core-site.xml
    hdfs-site.xml
    mapred-site.xml(重命名:mapred-site.xml.template)
    yarn-site.xml
    slaves

1)、core-site.xml
<configuration>  
<property>  
    <name>fs.defaultFS</name>  
    <value>hdfs://ns1</value>  
</property> 
 <property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-2.7.6/tmp</value>
</property>
<!-- Resource Manager UI的默认用户dr.who权限不正确 ,这里写上你的机器用户名-->
<property>  
    <name>hadoop.http.staticuser.user</name>  
    <value>root</value>  
</property>
<property>  
    <name>ha.zookeeper.quorum</name>  
    <value>hd01:2181,hd02:2181,hd03:2181</value>  
</property> 
</configuration>
2)、hdfs-site.xml
<configuration>
<property>
  <name>dfs.replication</name>
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值