问题

思路:

主从集群:结构相对简单,主与从协作

主:单点,数据一致好掌握

问题:

单点故障,集群整体不可用

压力过大,内存受限

解决方案

单点故障:

高可用方案:HA(High Available)

多个NN,主备切换,主压力过大,内存受限:

联邦机制:Federation(元数据分片)

多个NN,管理不同的元数据

Hadoop2.X只支持HA的一主一备

Hadoop3.x支持一主多备(官方推荐NN为3)

HDFS-HA解决方案

HA解决方案图

 Client只能与一个NameNode去通信,在我们的NameNode中。

存储的元数据:

1.dn提交的block

2.Cli交互操作,例如mkdir等

有关这两个数据交互操作,数据同步吗?

1.DN可以将块向两个NameNode进行传递区块,问题解决

2.NNActive和NNStandby得满足CA,中间时间差不能太多

所以使用3台JoinNode集群。如果3台,那么应该得等3台写完,再返回,还是一台写完就返回呢??

这陷入一个怪圈。

所以我们使用选举制度,加上权重,JoinNode只要3台中有2台返回ok,那么NN可以读取3台中2台有数据,那么该数据可信。(基于Paxos算法)

上部分的ZK集群主要用于主备切换,如果有了下部分,也可以手动解决NN挂掉的案例

FailoverController是一个故障转移控制器(3只手):

1.一只手:一个进程来监控NNActive,另外一个进程监控NNStandby

2.第二只手:连接ZK(ZK用于分布式决策,JN是用于分布式存储)

3.目录树结构,假设x节点,两个ZKFC进行抢锁,某个人抢锁成功就是Active,另一个是Standby

4.随着时间推移,假设NNActive挂掉,那么ZKFC将会把锁删除,另一个ZKFC在一直进行Watch监控,会立即触发Call Back,进行新一轮抢锁

5.新一轮抢锁原先的NN已经没有了,所以不进行抢锁,把NNActive让给备用

6.右侧抢锁成功,将会将第三只手偷偷伸向对方,查看原先的NN是否真的挂掉,如果真的挂掉,将对方降为Standby,自己升级为Active

7.所有都挂掉,这个是运维的错误,情况太低了

8.所有网络都是不可靠的,所以上面的集群架构都是基于串口

CAP理论(参考博客http://www.ruanyifeng.com/blog/2018/07/cap.html

1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标。

Consistency:一致性

Availability:可用性

Partition  tolerance:分区容忍性

Eric Brewer 说,这三个指标不可能同时做到。这个结论就叫做 CAP 定理。

Partition Tolerance

先看 Partition tolerance,中文叫做"分区容错"。

大多数分布式系统都分布在多个子网络。每个子网络就叫做一个区(partition)。分区容错的意思是,区间通信可能失败。比如,一台服务器放在中国,另一台服务器放在美国,这就是两个区,它们之间可能无法通信。

上图中,G1 和 G2 是两台跨区的服务器。G1 向 G2 发送一条消息,G2 可能无法收到。系统设计的时候,必须考虑到这种情况。

一般来说,分区容错无法避免,因此可以认为 CAP 的 P 总是成立。CAP 定理告诉我们,剩下的 C 和 A 无法同时做到。

Consistency

Consistency 中文叫做"一致性"。意思是,写操作之后的读操作,必须返回该值。举例来说,某条记录是 v0,用户向 G1 发起一个写操作,将其改为 v1。

接下来,用户的读操作就会得到 v1。这就叫一致性。

问题是,用户有可能向 G2 发起读操作,由于 G2 的值没有发生变化,因此返回的是 v0。G1 和 G2 读操作的结果不一致,这就不满足一致性了。

Availability

Availability 中文叫做"可用性",意思是只要收到用户的请求,服务器就必须给出回应。

用户可以选择向 G1 或 G2 发起读操作。不管是哪台服务器,只要收到请求,就必须告诉用户,到底是 v0 还是 v1,否则就不满足可用性。、

参考(https://baijiahao.baidu.com/s?id=1619807486368681081&wfr=spider&for=pc

- 舍C保A(AP)的例子:

比如刚刚的微博这个例子,我们更新了一条微博,不是所有的人都能马上刷出来的,对于哪些还只能刷出旧的微博数据的人来说数据就和我真实的操作不一致了。然而这种业务也不需要要求我们强一致性,没有刷出我的最新微博,也不是什么大事,大不了认为我没有更新而已,对业务影响很小。但是呢也不能一直都不一致是吧,所以C还是不能丢的,可以迟到。

- 舍A保C(CP)的例子:

比如银行账户的例子,大家生活中也许也已经注意到了,银行转账需要几个小时甚至几天,都会显示正在转账中。这时就是视作一种丢失可用性的状态。当然这是业务决定的。

- 舍P保C又保A的场景:

不是分布式的场景的话,我们可以选择CA,比如我是个小银行,我的转账功能可以设计为多地账户不互通,只能本地转账,只在一台服务器上操作,保证可用性和一致性。但整体来看可用性和一致性都丢失了。(这是关系型数据库情况)

ACID特性(参考https://www.jianshu.com/p/0b245d972e23)

Atomic(原子性):指整个数据库事务是不可分割的工作单位。只有使据库中所有的操作执行成功,才算整个事务成功;事务中任何一个SQL语句执行失败,那么已经执行成功的SQL语句也必须撤销,数据库状态应该退回到执行事务前的状态。

Consistency(一致性):指数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。例如对银行转帐事务,不管事务成功还是失败,应该保证事务结束后ACCOUNTS表中Tom和Jack的存款总额为2000元。

Isolation(隔离性):指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。

Durability(持久性):指的是只要事务成功结束,它对数据库所做的更新就必须永久保存下来。即使发生系统崩溃,重新启动数据库系统后,数据库还能恢复到事务成功结束时的状态。

HDFS- Federation解决方案

NN的压力过大,内存受限问题:

1.元数据分治,复用DN存储

2.元数据访问隔离性

3.DN目录隔离block

                 Federation的图示

Big Data(四)关于Hadoop的HA&CAP理论详解的更多相关文章

  1. Hadoop 新 MapReduce 框架 Yarn 详解

    Hadoop 新 MapReduce 框架 Yarn 详解: http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/ Ap ...

  2. Hadoop 发行版本 Hortonworks 安装详解(一) 准备工作

    一.前言 目前Hadoop发行版非常多,所有这些发行版均是基于Apache Hadoop衍生出来的,之所以有这么多的版本,完全是由Apache Hadoop的开源协议决定的:任何人可以对其进行修改,并 ...

  3. Hadoop 发行版本 Hortonworks 安装详解(二) 安装Ambari

    一.通过yum安装ambari-server 由于上一步我们搭建了本地源,实际上yum是通过本地源安装的ambari-server,虽然也可以直接通过官方源在线安装,不过体积巨大比较费时. 这里我选择 ...

  4. Hadoop生态圈-Hbase的Region详解

    Hadoop生态圈-Hbase的Region详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  5. “全栈2019”Java异常第四章:catch代码块作用域详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  6. [转]Hadoop集群_WordCount运行详解--MapReduce编程模型

    Hadoop集群_WordCount运行详解--MapReduce编程模型 下面这篇文章写得非常好,有利于初学mapreduce的入门 http://www.nosqldb.cn/1369099810 ...

  7. “全栈2019”Java第八十四章:接口中嵌套接口详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. Hadoop深入学习:MapTask详解

    转自:http://flyingdutchman.iteye.com/blog/1878775#bc2337280 Hadoop深入学习:MapTask详解 博客分类: Hadoop MapTask执 ...

  9. 【史上最全】Hadoop 核心 - HDFS 分布式文件系统详解(上万字建议收藏)

    1. HDFS概述 Hadoop 分布式系统框架中,首要的基础功能就是文件系统,在 Hadoop 中使用 FileSystem 这个抽象类来表示我们的文件系统,这个抽象类下面有很多子实现类,究竟使用哪 ...

随机推荐

  1. docker top 和 docker exec ps 命令查看的PID区别

    区别在于 docker top 查看到的 PID 属于宿主机的 PID.我们可以通过  宿主机执行 ps -ef 查看结果 也可以进去容器执行 top 和 ps查看结果

  2. 等式变换java解法

    输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立. 1 2 3 4 5 6 7 8 9 = X 比如: 12-34+5-67+89 = 5 1+23+4-5+6-7-8-9 ...

  3. Git检出和提交至远程仓库

    步骤一:首先需要一个Github账号,还没有的话先去注册:https://github.com/,我们使用Git需要先安装Git工具,这里给出下载地址:https://git-for-windows. ...

  4. python中_new_()与_init_()的区别

    __new__方法的使用 只有继承于object的新式类才能有__new__方法,__new__方法在创建类实例对象时由Python解释器自动调用,一般不用自己定义,Python默认调用该类的直接父类 ...

  5. 监控Linux服务器上python服务脚本

    提供给公司使用的测试平台这两天频繁地挂掉,影响到相关同事的正常使用,决定在服务器上写个监控脚本,监控到服务挂了就启动起来,一分钟检查一次.注:后台服务使用的是python.监控脚本如下: NUM=`p ...

  6. VirtualBox-5.2.8-121009-Win.exe虚拟机桥接

  7. CentOS 7 Tomcat 启动后 外部无法访问的问题

    1.启动tomcat 2.   验证tomcat 是否启动成功 ps -ef|grep tomcat  这样是启动成功了的 3 检查防火墙是否启动 firewall-cmd --state 防火墙 已 ...

  8. C++ 多文件编译简述:头文件、链接性、声明与定义

    目录 Commen Sense 头文件 链接性 static 与链接性控制 extern 与外部链接性 Reference Commen Sense C++ 在编译时对每个翻译单元(Translati ...

  9. AGC037 C Numbers on a Circle【思维】

    题目传送门 题意 这道题被某大佬改编拿来出成考试题,是长这个样子的: 好的,其实这才是真正的题意: 给定初始序列和最终序列,每次选择一个数变成自己和相邻2个数的和.问初始序列是否可以变为最终序列,若可 ...

  10. Vue.js官方文档学习笔记(二)组件化应用的构建

    组件化应用的构建 组件化应用允许我们使用小型.独立和通常可复用的组件构建大型应用. Vue注册组件 Vue.component('todo-item',{template:'<li>这是个 ...